The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Представлен LISP/c - транслятор Common Lisp в C/C++

13.05.2016 19:44

Увидел свет транслятор LISP/c. Инструмент ставит целью объединение выразительной силы языка Common Lisp и скорости языков C/C++, что позволяет воспользоваться мощным механизмом Lisp-макросов для генерации текста программ на C. В трансляторе реализована поддержка pthreads, MPI и CUDA. Поддерживается создание классов и шаблонов C++. В данный момент реализация LISP/c протестирована и может работать с использованием CLISP.

Примеры:
1. Hello World



   (header stdio)
   (main
     (@printf (str "Hello, world!"))
     (return 0))

транслируется в


   #include <stdio.h>

   int main(int argc,char **argv)
   {
      printf("Hello, world!");
      return 0;
   }

2. Макросы


   (templates make-foo (typ)
     (func (add/sym foo- typ) typ ((x typ) (y typ))
       (return (+ x (* y 2)))))

   (make-foos int long float double)

транслируется в


   int foo_int(int x, int y) {return x + y * 2;}
   long foo_long(long x, long y) {return x + y * 2;}
   float foo_float(float x, float y) {return x + y * 2;}
   double foo_double(double x, double y) {return x + y * 2;}



  1. Главная ссылка к новости (https://github.com/eratosthene...)
Автор новости: freehck
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/44420-lisp
Ключевые слова: lisp
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (38) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, freehck (ok), 20:02, 13/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Ох, не успел я поправить. Ну да ладно, тут скажу. Транслятор - это не совсем правильное слово. Он не транслирует CLISP в C. Это DSL, реализованный на CLISP, который генерирует C-код. Сам автор называет его конвертером. Да в общем вы и сами разберётесь. )
     
     
  • 2.16, Дядя Паша (?), 23:32, 13/05/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Транспайлер?
     
  • 2.27, Kodir (ok), 13:59, 15/05/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну, ничего идеологически нового ты комментом не внёс :) Лисп и есть "сам себе DSL", просто теперь он может транслироваться в Си. Только вот толку?... ЛИСП интересен не тем, что "по-другому может записать printf", а именно своей динамичностью и идеей "данные есть код". Переводить ЭТО в Си - никакого смысла нет, ибо превратится в месиво хакерских алгоритмов, бесполезных человеку.

    Интереснее смотрится перевод JS в какой-нть C# - чтобы избавить страницы от этого мракобесия и запилить нормальный, статически типизированный язык.

     
     
  • 3.34, freehck (ok), 10:30, 16/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Лисп и есть "сам себе DSL", просто теперь он может транслироваться в Си.

    Не согласен. То, что на лиспе написать DSL - это задача на выходные, не делает его DSL. Он вполне себе общего назначения. А тот язык, который описан в статье, хоть и основан на S-выражениях, решает только одну задачу: преобразование себя в C-код.

    > Только вот толку?... ЛИСП интересен не тем, что "по-другому может записать printf",
    > а именно своей динамичностью и идеей "данные есть код".

    Прежде всего лисп интересен макросами. И именно их подобие автор пытается привнести в проект. "Данные есть код" - это конечно интересно, но присутствует и в других языках: в haskell, в ocaml например.

    > Переводить ЭТО в Си - никакого смысла нет, ибо превратится в месиво хакерских
    > алгоритмов, бесполезных человеку.

    Есть мнение, что лисп - это и есть месиво хакерских алгоритмов, бесполезных обычному человеку. Потому что 99% лисперов - это Beautiful Bipolar Mind.

    > Интереснее смотрится перевод JS в какой-нть C# - чтобы избавить страницы от
    > этого мракобесия и запилить нормальный, статически типизированный язык.

    А почему бы не наоборот? Вот есть, например, фреймворк Ocsigen, который переводит нормальный статически типизированный Ocaml в JS.

     

  • 1.3, Аноним (-), 20:08, 13/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Осталось сделать аналог для rust'a))
     
     
  • 2.4, DM (??), 20:20, 13/05/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Может сразу что-то rust-о-подобное со скобочками поверх llvm.
     

  • 1.5, Аноним (-), 20:48, 13/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    в любой непонятной ситуации пиши транслятор LISP на плюсы
     
     
  • 2.28, Kodir (ok), 14:00, 15/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > в любой непонятной ситуации пиши транслятор LISP на плюсы

    FORTRAN в Brainfuck.

     

  • 1.6, A.Stahl (ok), 21:16, 13/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Ура, наконец-то лисперы смогут таки взять и написать что-то полезное. А то сейчас на вопрос "А если ваш язык так офигенен, то почему на нём ничего не написано?" они смотрят в пол и что-то бормочут про непонимание и недооценку (ну и про емакс)...
     
     
  • 2.7, Andrey Mitrofanov (?), 21:19, 13/05/2016 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > Ура, наконец-то лисперы смогут таки взять и написать что-то полезное. А то
    > сейчас на вопрос "А если ваш язык так офигенен, то почему
    > на нём ничего не написано?" они смотрят в пол и что-то
    > бормочут про непонимание и недооценку (ну и про емакс)...

    Да! Наконец-то, ядро можно переписать.

     
  • 2.8, Не Лиспер (?), 21:23, 13/05/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    На Лиспе есть супер полезные вещи.
     
     
  • 3.9, A.Stahl (ok), 21:36, 13/05/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Например? Не важно даже если они узкоспециальные и по этой причине не на слуху. Расскажи.
     
     
  • 4.10, Andrey Mitrofanov (?), 22:06, 13/05/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Например? Не важно даже если они узкоспециальные и по этой причине не
    > на слуху. Расскажи.

    GNUS, Org mode, GNU Emacs.

     
     
  • 5.12, A.Stahl (ok), 22:11, 13/05/2016 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Нехорошо. Вы читерите. Это всего лишь плагины к емаксу. Т.е. вместо трёх наименований вам следовало сказать лишь одно: emacs (и добавить, что костяк емакса написан на Си).
     
     
  • 6.13, Andrey Mitrofanov (?), 22:30, 13/05/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Нехорошо. Вы читерите. Это всего лишь плагины к емаксу. Т.е. вместо трёх
    > наименований вам следовало сказать лишь одно: emacs (и добавить, что костяк
    > емакса написан на Си).

    А песочек не надо начть плавить, чтоб лисп-машину вытранзисторить? Раз- http://elpa.gnu.org/packages/ упо- http://melpa.org/ рись. Там даже редактор отдельно!

     
     
  • 7.14, A.Stahl (ok), 22:39, 13/05/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    >А песочек не надо начть плавить, чтоб лисп-машину вытранзисторить?

    Я на некоторых форумах граммарнаци подрабатываю и с русским языком "на ты", но тут сдаюсь. Нихрена не понял:)
    Но, судя по ссылке, это полный список лисп-программ? Эти 40-50 наименований из 100-строчников это всё, что родили лисперы? Ты лишь расстроил меня. Я думал, что в мире лиспа немного больше лиспа.

     
     
  • 8.21, freehck (ok), 09:07, 14/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Вам дали ссылку на melpa, в которой содержится 3000 пакетов для Emacs, а Вы уви... текст свёрнут, показать
     
     
  • 9.35, mickvav (?), 16:58, 16/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Ну и из независимого от emacs - maxima, конечно ... текст свёрнут, показать
     
     
  • 10.37, freehck (ok), 18:14, 16/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Если в таком ключе, то и MathLab сюда же ... текст свёрнут, показать
     
  • 8.40, serg (??), 22:56, 19/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    В мире лиспа слишком велико разнообразие Вот есть lush http lush sourceforge... текст свёрнут, показать
     
  • 6.25, Аноним84701 (?), 20:11, 14/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > emacs (и добавить, что костяк
    > емакса написан на Си).

    И компилируется GCC.
    А теперь угадайте с трёх раз, кто там [gcc+emacs] автором первых версий был. Бают, что какой-то Ричард )

     
  • 4.11, Андрей (??), 22:06, 13/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Да, интересно. На OCaml есть: unison. А на лиспе? Да и на каком именно лиспе?
     
  • 4.22, Аноним (-), 13:43, 14/05/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    maxima computer algebra system
     
  • 4.38, Andrey Mitrofanov (?), 21:47, 16/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >важно даже если они узкоспециальные

    Читить, так читить! Расширяются на Guile ->>

    LilyPond (+ Denemo)   ...has good GUILE extensibility.
    TeXmacs    ...TeXmacs support Guile/Scheme as an extension language...
    GnuCash   ...An increasing body of secondary functionality [...] is supportedvia the Guile scripting engine.
      ..http://www.glug.org/projects/list.html#Applications

    + gEDA
    + GIMP
    + AutoGen

      ...https://en.wikipedia.org/wiki/GNU_Guile#Programs_using_Guile

    + GDB
    + GNU Make (4.0+)

    .
    .
    .

     
  • 3.15, Ordu (ok), 23:18, 13/05/2016 [^] [^^] [^^^] [ответить]  
  • +12 +/
    Единственная полезная вещь в лиспе -- это лисп. Истинно говорю тебе. Всё остальное, как правило, создаётся на коленке под конкретную задачу, и несмотря на то, что это в некотором смысле эссенция полезности, но крайне редко удаётся эту эссенцию распространить с одной success story на несколько.
    Бывают исключения -- тот же emacs, например. Он полезен не только Столлману. Или weblocks -- если он ещё не загнулся, я не интересовался его судьбой уже несколько лет.

    А вообще, чтобы почувствовать, читай здесь: http://www.winestockwebdesign.com/Essays/Lisp_Curse.html
    Если вкратце и основную суть, то... Лисп -- это прибежище для особо асоциальных кодеров, потому что в лиспе можно гораздо больше сделать не связываясь с социумом и не вербуя соратников. Таким образом можно найти офигеннейшие примеры кода, писанные на лиспе одиночками. Но коллективный проект, который годами тянет, пускай небольшое, но сообщество -- это большая редкость.

    Кстати, до кучи: http://www.posteriorscience.net/?p=206
    lisp -- это для тех, кто пишет систему снизу-вверх, понимая её на всех уровнях. Но это прошлый век. Сегодня невозможно понимать, сегодня программы пишутся методом тыка. То есть, волки-одиночки-лисперы уже не имеют никаких шансов.

    В новости ведь упоминается проект, в котором автор пытается слезть с иглы lisp'а на C, но ему это не вполне удаётся, поэтому он начинает создавать суррогаты лиспа. Я знаю, это сложно: все языки выглядят жалкими подобиями lisp'а, с огромным количеством идиотских ограничений, которые превращают написание программ в вырезание гландов через жопу. Но со временем можно привыкнуть вырезать гланды через жопу. И автор сего лиспового синтаксиса для C тоже поймёт это со временем.

     
     
  • 4.19, Sergey Ya. Korshunoff (?), 07:20, 14/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > И автор сего лиспового синтаксиса для C тоже поймёт это со временем

    Однако gcc переводит C в lisp (промежуточные формы). Редактор Crisp (grief, https://sourceforge.net/projects/grief/files/?source=navbar) имеет С-подобный язык макросов, который транслируется в lisp-формат и только потом выполняется. Так что LISP-синтаксис для языков (промежуточный язык) -- это класcика. И это то применение, которое широко используется.

    PS: ваш коментарий понравился.

     
  • 4.20, Sergey Ya. Korshunoff (?), 07:37, 14/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Не знаю правда, зачем писать С программы на Lisp. Есть openlisp реализация https://en.wikipedia.org/wiki/OpenLisp, которая транслирует Lisp в программу на C. Эта фича есть и для других версий Lisp. openLisp мне просто нравится больше.
     
  • 4.23, pv47 (ok), 14:47, 14/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Хотел поставить вам плюс, но после обновления страницы рейтинг комментария почему-то остаётся прежним, так что напишу тут: у вас получился прекрасный комментарий!

    Как программист тоже чувствую, что понимать, как работает программа, - прошлый век, и это грустно.

     
     
  • 5.24, Andrey Mitrofanov (?), 18:58, 14/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Хотел поставить вам плюс, но после обновления страницы рейтинг комментария почему-то остаётся
    > прежним,
    > Как программист тоже чувствую, что понимать, как работает программа, - прошлый век,
    > и это грустно.

    Как порогомисту раскрою страшную тайну работы плюсика: он плюсуется асинхронно. То есть "своевременно или чуть позже". Никакого "после обновления страницы".

    Полностью разделяю Ваши чувства по поводу того, что Вы не понимаете, как работает программа с "плюсиком". Это так... прошло-веково и готично-баррочно.

     
     
  • 6.26, Аноним (-), 00:49, 15/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    А ещё оно может учитывать что ты аноним и считать твой голос за 0.1. Или банить по айпи голосование. Кто знает почему оно не работает, или, даже, видеть что ты аноним, а в user_agent у тебя винда и пропускать плюсик чтобы охранить сообщество!
     
  • 6.32, За pv47 (?), 23:28, 15/05/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Как порогомисту раскрою страшную тайну работы плюсика: он плюсуется асинхронно. То есть "своевременно или чуть позже". Никакого "после обновления страницы".

    Я был залогинен, сидел из firefox-esr 45, linux. Нажал на плюсик, подождал 10 секунд, обновил страницу.

    Как программист, я знаю, как работают кластерные системы и что с некоторой вероятностью обновлённый плюсик просто был отправлен не на тот мастер-сервер, с которого получаю информацию я. Хотя обычно такие системы пишутся так, чтоб пользователь, поставивший плюс, этот плюс видел: либо он в сессию заносится, либо в куку, либо переключается на мастер-сервер, в который записались данные.

    Но как программист, я также понимаю, что с гораздо большей вероятностью мой плюс просто не был учтён по какой-то причине, включая (наряду с отключенной передачей referer или включенным uBlock) вероятные ошибки автора движка сайта. Поэтому решил выразить этот плюс автору письменно

    И как пользователь должен сказать, что я НЕ ХОЧУ изучать исходный код каждого сайта, на котором нажимаю плюс (кстати, где можно посмотреть на исходники opennet?) лишь для того, чтобы понять, учтён мой плюс или нет.

    > Полностью разделяю Ваши чувства по поводу того, что Вы не понимаете, как работает программа с "плюсиком". Это так... прошло-веково и готично-баррочно.

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

     
     
  • 7.36, mickvav (?), 17:03, 16/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Поставил вам плюсик и заодно проверил, что сейчас оно работает, значит - баг плавающий. Плюсователь мог молча лечь под нагрузкой - выв плюсовали вечером :)
     
  • 7.39, Andrey Mitrofanov (?), 11:57, 17/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >> Как порогомисту раскрою страшную тайну работы плюсика: он плюсуется асинхронно. То есть "своевременно или чуть позже". Никакого "после обновления страницы".
    > Я был залогинен, сидел из firefox-

    Первое правило "плюсик"-клуба: не обсуждай http://www.opennet.dev/openforum/vsluhforumID4/323.html#1 плюсики.

    Воторое правило "плюсик"-клуба: будь мужЫком, никогда #$%@... см. п.1.

     
  • 4.29, Kodir (ok), 14:10, 15/05/2016 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > lisp -- это для тех, кто пишет систему снизу-вверх

    чё?? "снизу-вверх" - так пишут новички на бейсике! Или ассемблере, но у них выхода нет. Любой проект больше 1000 строк кода пишется сверху вниз.

    > , понимая её на всех уровнях.

    Ага. Первые 10 минут. А на завтра он приходит и сам не понимает собственный код, ибо наворотил "генераторов" по самые гланды, зато в 10 строк. Оно нам надо?

    > Но это прошлый век. Сегодня невозможно понимать, сегодня программы пишутся методом тыка.

    "Методом тыка" пишется Линукс, ибо только "тыком" новички и могут модифицировать чужой код. Любая нормальная программа пишется как обычно - проектированием архитектуры и разложением сложного в простое.

    > То есть, волки-одиночки-лисперы уже не имеют никаких шансов.

    Так асоциальные клоуны или волки? Вы уж определитесь... :) Я больше склоняюсь к "укуренный ЛИСпер" :)

     
     
  • 5.31, Ordu (ok), 14:51, 15/05/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Так асоциальные клоуны или волки?

    Клоуны конечно же. Кругом одни клоуны. Не переживайте так. Примите галоперидольчику, и не нервничайте. Нет никаких волков.

     
  • 5.33, Аноним (-), 23:38, 15/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > "снизу-вверх" - так пишут новички на бейсике!

    Объясняю специально для кодеров.

    Когда вы пишете сверху вниз и выясняете, что вам нужно сложить три числа, вы пишете функцию, складывающую три числа "sum(a, b, c) = a + b + c". Когда через месяц вам понадобится функция складывающая четыре числа, вы либо пишете её с нуля, либо (если вы agile-озабочены) реализуете её как-то типа "sum4(a, b, c, d) = sum(sum(a, b, c), d, 0)".

    Когда вы пишете снизу вверх и выясняете, что вам нужно сложить три числа, то вы анализируете возможные дальнейшие применения функции и либо пишете функцию, складывающую лишь два числа "sum(a, b) = a + b", либо функцию складывающую произвольное количество чисел "sum(as) = foreach (as) return += as[i]". Когда через месяц вам понадобится функция складывающая четыре числа, вы используете уже созданное и оттестированное.

     
  • 4.30, Kodir (ok), 14:16, 15/05/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > А вообще, чтобы почувствовать, читай здесь: http://www.winestockwebdesign.com/Essays/Lisp_Curse.html

    Почитал белорусский перевод - чуть не уссыкался :)

    "Гэта эсэ яшчэ адна спроба прымірыць ўлада Lisp мова праграмавання з няздольнасцю Lisp супольнасці, каб прайграць іх загадзя А.І. зімовых дасягненняў. Без сумневу, Lisp быў уплывовым крыніцай ідэй нават у яго час адступлення. Той факт, плюс бляск розных архітэктур Lisp Machine, і ў цяперашні час Ліспе рэнесанс пасля больш чым дзесяці гадоў у пустыні, паказваюць, што Lisp партызаны павінны мець некаторыя падставы для іх самаздаволення. Тым не менш, яны не змаглі перавесці магутнасць Lisp ў рух з пераважнай імпульсу."

     
  • 3.18, Аноним (-), 02:43, 14/05/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    метнул бисер перед свиньёй, которая не слыхала про переполнение буфера
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру