Куча говна / Говнокод #27055 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
// Define type
define bottles_of_beer => type {

	// Define internal data 
	data private bottles = 99

	// Define private methods
	private br => '<br/>'
	private s => .bottles != 1 ? 's' | ''
	
	// Generate lyrics when object represented as a string
	public asstring => {

		local(out = '')
	
		// Use Lasso query syntax to generate the lyrics
	

		with n in 99 to 1 by -1 do {
			.bottles = #n
			#out +=  .bottles + ' bottle' + .s + ' of beer on the wall, ' + .br
			#out +=  .bottles + ' bottle' + .s + ' of beer; ' + .br
			.bottles--
			#out += 'Take one down, pass it around, ' + .br
			#out += .bottles + ' bottle' + .s + ' of beer on the wall. ' + (.br * 2) 
		}

		// Return result
		return #out
	}
}

bottles_of_beer

https://en.wikipedia.org/wiki/Lasso_(programming_language)

Запостил: MAKAKA MAKAKA, (Updated )

Комментарии (109) RSS

      • ну да, "локальный" out, и "поле" bottles , хотя они называли его "internal data"
        Ответить
    • ни в чем, это один из десятков ранних веб-параш типа колдфюженов и парсеров.
      Там есть его история в вики

      Я просто случайно в одной книжке прочитал урл типа http://хуемое/index.lasso, и погуглил аут оф зе кьюриосити
      Ответить
      • License: proprietary

        Фублядь, фунахуй. Ещё проприетарной скриптушни не хватало.
        Ответить
        • Windows 64-bit

          https://github.com/EuphoriaLanguages/Friendly_Flexible_Fast/raw/OpenEuphoria/euphoria-4.1.0-x64.exe

          Windows 32-bit

          https://github.com/EuphoriaLanguages/Friendly_Flexible_Fast/raw/OpenEuphoria/euphoria-4.1.0-x86.exe

          Linux 32-bit


          сиречь, современные прыщи не поддржваюца?

          >All data objects in Euphoria are either atoms or sequences. An atom is a single numeric value. A sequence is a collection of objects

          оо, скаляры и коллекции, няшно

          >The Euphoria interpreter usually stores integer-valued atoms as machine integers (four bytes) t

          привет из 2020

          >'=' is treated as an operator, just like '+', '*' etc., so it is applied to corresponding sequence elements
          When they are not equal length, the result is an error. Either way you'll get an error, since an if-condition must be an atom, not a sequence. Instead you should use the equal() built-in routine:

          фуу

          >sequence seq_1 = { 10, 20, 30, $ }

          ого, надо статически тип указывать

          >https://sourceforge.net/projects/euvide/
          даже так, воу

          >https://github.com/vim/vim/blob/master/runtime/syntax/euphoria4.vim
          Ответить
          • а не, прекрасно стал на прыщи

            ~$ eui
            Euphoria Interpreter v4.1.0 development
            64-bit Linux, Using System Memory
            Revision Date: 2015-02-02 14:18:53, Id: 5861:57179171dbed

            ERROR: Must specify the file to be interpreted on the command line

            вот я и в хопре
            Ответить
            • #!/usr/bin/eui
              include std/io.e
              puts(STDOUT, "hello govnokod")

              все, я поехал
              Ответить
              • Like other programming languages, Euphoria lets you calculate results by forming expressions. However, in Euphoria you can perform calculations on entire sequences of data with one expression, where in most other languages you would have to construct a loop. In Euphoria you can handle a sequence much as you would a single number. It can be copied, passed to a subroutine, or calculated upon as a unit. For example,

                {1,2,3} + 5

                is an expression that adds the sequence {1,2,3} and the atom 5 to get the resulting sequence {6,7,8}.


                охунно!!
                Ответить
                • и так: сложение атома с последовательностью дает в результате последовательность где каждый член сложен с атомом.

                  Строки это последовательность в кодировке ascii.

                  #!/usr/bin/eui
                  include std/io.e
                  sequence a = "hello"
                  puts(STDOUT, a + 1) -- ifmmp


                  если второй операнд тоже сиквенс, но происходит почленное сложение.

                  по этой же причине нельзя сравнивать строки через = : сравниваться будут отдельные члены сиквсенса, и если строки будут разной длины -- будет ошибка
                  Ответить
                  • include std/io.e
                    sequence a = {"hello", "wrold"} 
                    puts(STDOUT, a[2]) --wrold, sequ from 1
                    puts(STDOUT, a[length(a)]) --last
                    puts(STDOUT, a[$]) --$ is last
                    puts(STDOUT, a[$ - 1]) --hello
                    
                    sequence new = a & {"of", "shit"} --conctenation
                    printf(STDOUT, "%d\n", length(new)) --4
                    Ответить
                    • хуясе
                      а вот это уже серьезно
                      https://openeuphoria.org/docs/lang_decl.html#_123_userdefinedtypes

                      #!/usr/bin/eui
                      include std/io.e
                      
                      type user_age(integer i)
                      	return i > 18
                      end type
                      
                      procedure drink_beer(sequence name, user_age age)
                      	puts(STDOUT, name)
                      	printf(STDOUT, " drinks beer because he is %d", age)
                      end procedure
                      
                      --drink_beer("A", 12) ебнеца
                      --user_age f = 12 --ебнеца
                      user_age q = 22
                      drink_beer("me", 93)


                      понимаете, что произошло? кастомный тип свалидировался. ХЗ как такое сделать без объектов в других япах
                      Ответить
                      • мояж ты ляля
                        include std/io.e
                        enum type kusok by / 2 TSELOE, POLOVINKA, CHETVERTINKA, OSMUSHKA end type
                        
                        
                        procedure split_cake(integer cake, kusok part)
                        	? cake * part
                        end procedure
                        
                        split_cake(100, CHETVERTINKA) --25


                        кстати, джаваскриптеры, сосать!!

                        Calculations using variables declared as integer will usually be somewhat faster than calculations involving variables declared as atom. If your machine has floating-point hardware, Euphoria will use it to manipulate atoms that are not integers.
                        Ответить
                        • тайп чекинг можно включать и выключать!

                          When comparing the speed of Euphoria programs against programs written in other languages, you should specify without type_check at the top of the file. This gives Euphoria permission to skip run-time type checks, thereby saving some execution time. All other checks are still performed, e.g. subscript checking, uninitialized variable checking etc. Even when you turn off type checking, Euphoria reserves the right to make checks at strategic places, since this can actually allow it to run your program faster in many cases. So you may still get a type check failure even when you have turned off type checking. Whether type checking is on or off, you will never get a machine-level exception.

                          остальные скриптобляди так не могут
                          Ответить
                        • да, интегрированные с системой типов

                          вот бы их еще в компайлтайме считать
                          Ответить
                            • в программах на Эйфории нету ошибок
                              Ответить
                                • Эйфория довольно низкоуровневая скриптушня, так что обработа ошибок там соответствующая.

                                  Вот, к примеру, оче полезный сервер:
                                  #!/usr/bin/eui
                                  
                                  include std/socket.e as sckt
                                  include std/error.e as err
                                  
                                  object server = sckt:create(sckt:AF_INET, sckt:SOCK_STREAM, 0)
                                  if atom(server) then
                                  	err:crash("Error creating soket %d", server)
                                  end if
                                  
                                  if sckt:bind(server, "127.0.0.1", 5050) = -1 then
                                  	err:crash("Can't bind")
                                  end if
                                  
                                  integer listen_res = sckt:listen(server, 1)
                                  if listen_res != 0 then
                                  	err:crash("Error listening  %d", listen_res)
                                  end if
                                  
                                  object accept_res = sckt:accept(server)
                                  if atom(accept_res) then
                                  	err:crash("Error accepting  %d", accept_res)
                                  end if
                                  
                                  enum CLIENT, IP
                                  sequence client = accept_res[CLIENT]
                                  sequence client_ip = accept_res[IP]
                                  puts(1, client_ip)
                                  sckt:send(client, "Idi k 4erty", 0)


                                  Если функция возвращает атом, то там код ошибки. А иначе там сиквенс, например.
                                  Ответить
                          • В языке Ада проверка и в компайлтайме (если на этапе компиляции возможно определить значение, например, если передали константу), и в рантайме. Проверка отключаемая (её можно вырубить, если вдруг понадобится пирфоманс).

                            В «Паскале» тоже есть проверка (отключаемая, кстати), но она более скучная: там можно проверить только на вхождение в диапазон. Например, так:
                            type age = 19..255;
                            Ответить
                            • если доказать, что фуфуфункцию можно вычислить в компайл тайм, то можно литералы на предикаты проверять

                              но тут понадобица аналог constexpr, а так можно далеко зайти
                              Ответить
                      • А чо тут такого?
                        struct UserAge {
                            constexpr UserAge(int age_) : age(age_)
                            {
                                if (age < 18) {
                                    throw "newfag";
                                }
                            }
                        
                            operator int() const noexcept
                            {
                                return age;
                            }
                        
                            int age;
                        };
                        
                        void drink_beer(std::string_view name, UserAge age)
                        {
                            std::cout << name << " drinks beer because he is " << age << std::endl;
                        }
                        
                        int main()
                        {
                            drink_beer("Vasya", 20);  // ok
                            drink_beer("Petya", 17);  // newfag
                        
                            return EXIT_SUCCESS;
                        }

                        > без объектов
                        Чем объекты плохи и чем «type» не объект?
                        Ответить
                        • ну смотри, сколько тебе приишлось кода-то понаписать) И это еще в крестах хорошо. В жабе ты бы имел объект в куче, внутри кторого был бы инт

                          ах да, преобразования типов тоже в жабах и скриптоговнах нет, так что было бы еще вербознее
                          Ответить
                          • > ну смотри, сколько тебе приишлось кода-то понаписать)
                            create domain adult_age as integer check (value >= 18);
                            Ответить
                            • да, в номральных субд (не mysql) это решается, но мы про обычные языки.
                              Ответить
                              • потому что всему своя предметная область
                                ты не заметил, что констрейнты на типы в универсальных ЯВУ особо никому не понадобились? надо логику наебенить - значит, оборачиваешь в класс и делаешь проверки в конструкторах, не так и много писать

                                а в эйфории можно сделать констрейнт форин кей он апдейт каскад деферред? может, там есть мультиметоды?
                                странно выпячивать подобные киллер-фичи, когда они объективно ненужно
                                Ответить
                                • >и делаешь проверки в конструкторах, не так и много писать

                                  Ну вот выше гост показал, что писать много. Кроме того класс во многих языках это оверхед.

                                  А тут у нас обычный int под капотом, просто проверяется при обращении..

                                  >он апдейт

                                  у нее есть встроенная база данных, лол
                                  http://www.rapideuphoria.com/database.htm
                                  может быть что-то и есть, я еще не смотрел
                                  Ответить
                • >> {1,2,3} + 5

                  В «Фортране» были неявные циклы (например, у оператора PRINT) и передача вектора в функцию, ожидающую скалярного аргумента (которая тоже разворачивалась в цикл). Но в «Фортране» всё это было в зачаточном состоянии. Вот так вот в произвольном выражении использовать это было нельзя.
                  Ответить
                  • в перле тоже кое-что происходит при передаче массива в функцию, и в си тоже, и совсем не цикл)

                    возможно что идею эту эйфория подрезала у Фортрана, да
                    Ответить
        • Я про «Эйфорию» много лет ничего не слышал. Видел её в 1990-х на диске с языками программирования.
          Ответить
          • а она жива, и цветет

            Поставь её, давай изучать?) Прикинь: скриптушня, очень замороченная на типизации. Чем-то похожа на паскаль, и с проверкой типов в рантаймте.
            Ответить
              • есть ифдефы (Которые обрабатываются в момент парсинга) и есть euc который линкует жирный бинарь (как в го)
                Ответить
              • вообще забавно, что люди пилят ещё всякие штуки типа http://redy-project.org/, хотя с 2012-го года похоже никаких мажорных апдейтов языка не было

                впрочем, я его в первый раз увидел в середине нулевых и не удивился бы, если бы он помер уже тогда 🙂
                Ответить
                • Вообще не понятно, чего он стагнирует. Кажется, в нем много забавного: встроенный шедулер для тасок, всякая типобезопасность, линковка в бинарь, entry в лупах, юниттест из коробки, дешевый интероп с сями итд.

                  Жоп, кмк, три:
                  * строки это числа, юникода нету
                  * документация весьма скудна, и расчитана на бульмень скиллового питуха. Стандартная либа вообще не имеет туториалов, а только лишь референс
                  * его никто не форсит.
                  Ответить
                  • ну, для write-and-throw скриптов он вероятно слишком вербозен (взять хотя бы sequence)

                    для чего-то сложного он видимо слишком "низкоуровневый": писать серьёзные вещи с run'n'crash удовольствия немного

                    даже такой экзотике как REBOL/Red проигрывает: там есть гомоиконность и окошки вроде прямо из коробки
                    Ответить
                    • так ведь скриптопитухи сейчас как раз и пхают везде стат тупизацию, потому что понимают, что без нее никак.

                      А тут у тебя она из коробки, да еще и с проверкой.

                      Низкоуровневость конечно скорее минус для скриптушни (правда положительно сказывающийся на пирформансе), но наверняка можно напилить высокоуровневые либы.

                      У меня стойкое ощущение от эйфории, что как это как если бы из паскаля сделали скриптушню.
                      Я бы заменил в некоторых курсах по основам программирования питон на эйфорию, все таки со своими типами она более консистентна
                      Ответить
                      • я ж не про типизацию, а про вербозность

                        почему sequence, а не seq? почему integer, а не int?
                        Ответить
                        • чтобы было читаемее, не?)
                          почему в питоне "lambda"

                          впрочем, я согласен: некотоыре буквы тут лишние
                          Ответить
                          • Какие именно? Должно быть «lama»? «laba»? «lada»? «amba»?
                            Ответить
                            • Синтаксический сахар, как в Цпп:
                              [] () -> {}

                              Чтобы зарезервированным словом lambda не портить жизнь математикам.
                              Ответить
                              • В «SQL» и в «Алголе» можно использовать идентификаторы, совпадающие с зарезервированными словами, если их заэкранировать. Почему так не сделали в других языках?
                                Ответить
                                • У нас в эйфории нет никаких лямбд, но есть указатели на функции и процедуры

                                  include std/graphics.e
                                  
                                  procedure my_print(integer i)
                                  	if remainder(i, 2) = 0 then
                                  		text_color(RED)
                                  	else
                                  		text_color(GREEN)
                                  	end if
                                  	? i
                                  end procedure
                                  
                                  procedure print_nums(atom strategy)
                                  	for i = 1 to 200 do
                                  		call_proc(strategy, {i})
                                  	end for
                                  end procedure
                                  
                                  print_nums(routine_id("my_print"))


                                  заметь, что функция не есть процедура
                                  Ответить
                                  • > routine_id("my_print")

                                    - не знаю, почему, но глаз от такого дёргается
                                    Ответить
                                    • Euphoria 3 does not have an ERROR handler???
                                      For what? An error handler exists in some programming languages as a "safety net" or for an "instant solution" for hardware or software failures. In reality an error handler is a very poor approach for dealing with bugs, and of course - Euphoria 3 rightfully avoids this unnecessary feature.
                                      Ответить
                                      • Ну и правильно, а то понапридумывали всяких эксепшонов, а мы из-за них каждую пятницу собираемся и срёмся до понедельника.
                                        Ответить
                                      • я так и не понял, какой они предлагают approach взамен

                                        всегда сразу писать код без багов?
                                        Ответить
                                        • я ж показал на простом коде с сокетами: они предлагаю подход сишечки, но чуть более аккуратный

                                          * любые ошибки в программе это всегда пиздец и падение. Если ты обратился к несуществущему элементу сиквенса -- твоя программа упала. Всё. Ты лох. Не нужно так делать.

                                          * Если тебе нужно вернуть НЕ рантайм ошибку (то есть ошибку не в программе, а в чем-то внешнем) то возвращай код ошибки
                                          Ответить
                                          • писать на скриптушне, как на шишечке; потом удивляться, что не взлетело

                                            не, ну свои ништяки в язычке конечно есть. но кое-что я бы подшлифовал
                                            Ответить
                                            • Зато не надо ломать голову над говном.

                                              Все эти ваши исключения в скриптушне это сплошной багор: никогда не понять что где ловить, а уж про собачки в пыхе я промолчу)
                                              Ответить
                                              • >>>"про собачки в пыхе я промолчу"

                                                Может, встретимся? Где живёшь?
                                                Ответить
                                      • Then why "nobody" is using Euphoria 3.1.1?
                                        I use. I'm not a programmer and I don't have time for the nonsense of other programming languages... that's why

                                        не, ну таким людям эррор хендлеры не нужны, они сами как эррор хендлер
                                        Ответить
                                        • Я кстати использую четвертую эйфорию, а не третью

                                          У меня опен, а не рапид
                                          Ответить
                                            • под мои прыщи никакой нету (Если не считать синтакс файла для vim, и он как раз для треьей)

                                              Я скачал какой-то sh скрипт с опенефории, и он скачал мне четвертую эйфорию

                                              В третьей небыло enumов как я понял, это похо
                                              Ответить
                                        • > Then why "nobody" is using Euphoria 3.1.1?

                                          Дай угадаю, поддержка XP закончилась на 3.1.0 версии?)
                                          Ответить
        • Подведем итог.
          Не смотря на всю плюшевость, язык затрагивает серьезные темы:
          Кооперативную многозадачность, функциональное программирование, битовую арифметику, статическую типизацию, API операционных систем, модульность, статическую линковку, циклы с retry и continue, switch с fallthru, профилирование, трейсниг, дебаг, препроцессинг, компайл-тайп выражения и косвенные вызовы функций.

          Отлично подходит для обучения программированию. Пара тупых примеров:
          include std/console.e
          include std/error.e
          include std/graphics.e
          
          if not has_console() then
            crash("No console")  
          end if
          clear_screen()
          cursor(NO_CURSOR)
          
          enum UP='i', DOWN='k', LEFT='j', RIGHT='l', QUIT=113 
          enum X=1, Y=2
          ifdef WINDOWS then 
            constant CHARACTER = 1 
          elsedef 
            constant CHARACTER = '*' 
          end ifdef
          
          sequence pos = {1, 1}
          
          while 1 do
             integer key = wait_key()
             put_screen_char(pos[Y], pos[X], {' ', 0})
             switch key do
              case QUIT then abort(0)
              case UP then pos[Y] -= 1
              case DOWN then pos[Y] += 1
              case RIGHT then pos[X] += 1
              case LEFT then pos[X] -= 1
             end switch
             put_screen_char(pos[Y], pos[X], {CHARACTER, WHITE})
          end while

          include std/io.e
          include std/types.e
          include std/convert.e
          
          
          constant MAX = 100
          constant NUM = rand(MAX)
          
          for i = 10 to 1 by -1 do
            printf(STDOUT, "\nEnter guess %d> ", i)
            sequence answer = gets(STDIN)
            integer guess = to_number(answer[1..$ - 1])
            puts(STDOUT, "\n")
            if guess = 0 then
              puts(STDOUT, "Junk!")
              retry
            elsif guess > NUM then
              puts(STDOUT, "Too big")
            elsif guess < NUM then
              puts(STDOUT, "Too small")
            else 
              puts(STDOUT, "******** COOOL ************ ")
              abort(0)
            end if
          end for
          
          puts(STDOUT, "U loooze")

          https://openeuphoria.org/docs/
          Ответить
            • в vim:) у меня синтаксис для него из коробки, мне хватает
              Ответить
          • > enum UP='i', DOWN='k', LEFT='j', RIGHT='l'

            - дай угадаю: работает только на раскладке белых людей
            Ответить
            • ну англ буквы работают везде, а вот коды у стрелочек конечно разные на винде и юниксе
              Ответить
              • Что значит везде?

                Я врублю русскую раскладку и запущу пример, не случится ли SOSNOOLI?

                К тому, что для обучения молодых макак программу надо переписать чуток
                Ответить
                • соснеш, да) ну, это дело поправимое

                  А зачем переписать? код именно такой, как пишут школьники: всё максимально тупо и в лоб

                  Вообще язык довольно прямой, без выебонов
                  Ответить
                  • Переписать чтобы не учить плохому. Проверка кейкодов по чару это эталонный признак говнолабы, а это ж будущие программисты может быть
                    Ответить
                    • ну понятно, что эт нужно выносить в отдельный уровень абстракции, но примеры-то тупые
                      Ответить
                      • А ещё сразу учить использованию аргументов командной строки вместо дрочения ридлайна.

                        Я думаю, даже трупопаскаль умел такое
                        Ответить
                              • в институтские годы открыли для себя руби
                                ну и на волне интереса к похожей скриптушне узнал про Эйфорию

                                примерно в то же время кстати прочитал и про https://www2.cs.arizona.edu/icon/intro.htm, его по мелочи тут уже обсуждали, впрочем, и это не скриптушня
                                Ответить
                                • Про Icon я слышал, а про Эйфорию нет.


                                  Руби мне нравится (я вообще в каждом языке вижу что-то хорошее, кроме ПХП разумеется), но про Эйфорию я не слышал до вчерашней ночи.

                                  Жаль конечно, что он никому нахуй не нужен кроме трех питухов на форуме опенэйфории. Дело, как всегда, в отсутствии киллер фреймворка и пиара
                                  Ответить
                                  • давай тогда форсить Icon, раз ты про него слышал

                                    every i := (1 to 10) | (91 to 100) do write(p[i])
                                    
                                    prints the first and last ten elements of p. The do clause is optional, and the evaluation mechanism often helps eliminate temporary variables like i, for example,
                                    
                                    every write(p[(1 to 10) | (91 to 100)])
                                    Ответить
                                    • я не настолько ветренный, чтобы с утра форсить один язык, а теперь другой:)

                                      могу нырнуть в айкон в следующие выхи, если ничто не отвлечет
                                      Ответить
                                    • «Icon» — это же вроде язык, похожий на «Snobol»? Таким обычно Нидлесс интересуется.
                                      Ответить
                                      • иканус, тебе понравилась эйфория? будешь ее форсить?
                                        Ответить
  • не пора ли перевести DKIM на крученые эдвардовы элиптические кривые?
    Ответить

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8