1. Куча / Говнокод #26411

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    define method display (i :: <integer>)
      do-display-integer(i);
    end;
    
    define method display (s :: <string>)
      do-display-string(s);
    end;
    
    define method display (f :: <float>)
      do-display-float(f);
    end;
    
    define method display (c :: <collection>)
      for (item in c)
        display(item);  // runtime dispatch
      end;
    end;

    В закромах истории нашёлся язык с runtime dispatch/multimethods.

    Запостил: Desktop, 03 Февраля 2020

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

    • https://opendylan.org/documentation/intro-dylan/methods-generic-functions.html#generic-functions
      Ответить
      • Я Dylan неоднократно хвалил на ГК.
        Когда обсуждали новые высеры яблочников: обжоптив и свифт.

        https://govnokod.ru/19976#comment326417
        https://govnokod.ru/12964#comment176395


        wvxvw его очень котировал.
        Ответить
    • 1. Ну так это не какая-то теоретически неразрешимая задача. Просто люди писали без оглядки на производительность, веря в то, что она будет расти очень быстро, и в то, что компиляторы будут умнеть гораздо быстрее, чем получилось на практике. А когда спохватились - оказалось, что поздно.
      Судя по воспоминаниям очевидцев было очень много расстройства когда жизненно важные контракты были безвозвратно перенесены на Си. Чуть ли не на столько, что "уходили в монастырь" - ну, в смысле, люди бросали программирование, и начинали заниматься либо администраторской работой, либо грядки возле дома окапывать.
      Я, так случайно получилось, знаю человека, который учавствовал в разработке и последующем отказе от Дилана. С его слов - очень мало кто после этого проекта продолжил работать в той же области. Кстати, он сына Диланом назвал.

      В смысле, переход на Си был для многих трагедией всей жизни, т.как иначе как недоразумением они это даже назвать не могли.



      2. Многие лисперы, даже те, кто пишут на CL считают Схему более рафинированым и продуманным языком, и эта "универсальность" видится как положительная черта. Почему так в CL / e-lisp'e? - хз, скорее всего так удобнее было когда-то реализовать парсер. Стандарт очень щепетильно описывает как должен работать парсер, поэтому в CL особо вариаций на эту тему и не было.
      Дилан, на сколько я понимаю, тоже Лисп-1.
      Ответить
    • [u]https://govnokod.ru/14352#comment211167[u]
      Лисп - не функциональный язык, и вообще не язык, Лисп может относится к двум понятиям:
      1. Способ записи (аналогично, как Фортрано-подобные языки все похожи друг на друга способом записи).
      2. Наличием встроенного в рантайм компилятора / интерпретатора языка. С этой точки зрения, например Питон или Руби - тоже лиспы.

      Не все лиспы исторически обладали "лисповым" синтаксисом, у Дилана - фортрановский синтаксис.

      Половина лиспов использующихся сегодня - не функциональные языки, (функциональные, или по крайней мере близкие - Схема, Ракет, Кложур). В Эмакс Лиспе до последней редакции не было даже возможности создавать замыкания.

      Большинство современных лиспов не выполняют код один-в-один с деревом представленным его исходником. Есть много оптимизирующих компиляторов, которые расценивают этот код, как промежуточное звено.

      Смысл использовать Лисп в том, что с помощью инструментов языка можно очень легко строить языковые расширения. Например, чтобы в Яве автоматически создать сеттер и геттер для поля класса нужно написать / импортировать lombok аннотации, и после чего это все равно будет выглядеть уродски, не говоря уже про более сложные структуры, где это иногда будет выглядеть либо очень громоздко, либо вообще невозможно. (Попробуйте добавить в Яве другую разновидность форича, которая перебирает сразу несколько коллекций).
      ...


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

      Жаль что Apple не стали его двигать. Языку трудно взлететь без нужной инфраструктуры и поддержки подобного монстра.
      Ответить
      • Лисп анскилльный, он из скобок вылезти не может.

        То ли дело Forth.
        Ответить
      • Эппл могла бы его подвигать, но тут случилось второе пришествие Джобса со своим NeXTSTEP, потому пошли на поводу у нового-старого мессии.

        В Свифте, на мой взгляд, чувствуется некоторое влияние Дилана.
        Ответить
    • lisp моча
      Ответить
      • Нет.

        https://ru.wikipedia.org/wiki/JavaScript

        > Первоначально язык назывался Mocha
        Ответить
        • К 2020-му году JavaScript почти полностью вытеснил PHP

          Инфографика
          https://i.ytimg.com/vi/cIIeKxhBBJk/maxresdefault.jpg
          Ответить
        • Кстати дилан гораздо более няшный чем разные сишкоблядские gc-потомки: js и java.

          Мне дико доставляет этот чудной сплав бейсика и лиспа.

          А с тех пор как они в 2010 завезли типизацию и автовывод типов (привет typescript!), dylan стал вполне современным.

          http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.627.5175&rep=rep1&type=pdf
          Ответить
    • Что особенно доставляет лично мне
      Во-первых это структурирование а-ля ада или бейсик.
      При этом можно почти в любом месте языка можно доблять опциональную синтаксическую соль.
      То есть можно писать максимально кратко и распиздяйски:
      define method display (s :: <string>)
        while (instance?(first, <union>))
        end;
      end;

      В случае больших вложений мы можем дополнительно указывать end какого блока.
      Это проверяется компилятором, и в случае проёба end или неудачного рефакторинга, мы сразу увидим ошибку.
      define method display (s :: <string>)
        while (instance?(first, <union>))
          ...
        end while;
      end method;

      Но и это ещё не всё. Для ОЧЕНЬ длинных методов можно пойти дальше и писать
      define method display (s :: <string>)
      end method display;
      Ответить
    • >> Installation on Windows
      >> For installation, double-click on the installer, and follow instructions. You need to have either the PellesC linker or the linker of VC++ 6.0, 7.0 or the current .NET platform SDK installed. PellesC 8.00 is the best option. (Note that PellesC 9.00 does not work.)

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

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