Увидел свет транслятор LISP/c (https://github.com/eratosthenesia/lispc). Инструмент ставит целью объединение выразительной силы языка Common Lisp и скорости языков C/C++, что позволяет воспользоваться мощным механизмом Lisp-макросов для генерации текста программ на C. В трансляторе реализована поддержка pthreads, MPI и CUDA. Поддерживается создание классов и шаблонов C++. В данный момент реализация LISP/c протестирована и может работать с использованием CLISP.
Примеры:1. Hello World
<font color="#461b7e">
(header stdio)
(main
(@printf (str "Hello, world!"))
(return 0))
</font>
транслируется в<font color="#461b7e">
#include ‹stdio.h›int main(int argc,char **argv)
{
printf("Hello, world!");
return 0;
}
</font>2. Макросы
<font color="#461b7e">
(templates make-foo (typ)
(func (add/sym foo- typ) typ ((x typ) (y typ))
(return (+ x (* y 2)))))(make-foos int long float double)
</font>
транслируется в<font color="#461b7e">
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;}<font color="#461b7e">
URL: https://github.com/eratosthenesia/lispc
Новость: http://www.opennet.me/opennews/art.shtml?num=44420
Ох, не успел я поправить. Ну да ладно, тут скажу. Транслятор - это не совсем правильное слово. Он не транслирует CLISP в C. Это DSL, реализованный на CLISP, который генерирует C-код. Сам автор называет его конвертером. Да в общем вы и сами разберётесь. )
Транспайлер?
Ну, ничего идеологически нового ты комментом не внёс :) Лисп и есть "сам себе DSL", просто теперь он может транслироваться в Си. Только вот толку?... ЛИСП интересен не тем, что "по-другому может записать printf", а именно своей динамичностью и идеей "данные есть код". Переводить ЭТО в Си - никакого смысла нет, ибо превратится в месиво хакерских алгоритмов, бесполезных человеку.Интереснее смотрится перевод JS в какой-нть C# - чтобы избавить страницы от этого мракобесия и запилить нормальный, статически типизированный язык.
> Лисп и есть "сам себе DSL", просто теперь он может транслироваться в Си.Не согласен. То, что на лиспе написать DSL - это задача на выходные, не делает его DSL. Он вполне себе общего назначения. А тот язык, который описан в статье, хоть и основан на S-выражениях, решает только одну задачу: преобразование себя в C-код.
> Только вот толку?... ЛИСП интересен не тем, что "по-другому может записать printf",
> а именно своей динамичностью и идеей "данные есть код".Прежде всего лисп интересен макросами. И именно их подобие автор пытается привнести в проект. "Данные есть код" - это конечно интересно, но присутствует и в других языках: в haskell, в ocaml например.
> Переводить ЭТО в Си - никакого смысла нет, ибо превратится в месиво хакерских
> алгоритмов, бесполезных человеку.Есть мнение, что лисп - это и есть месиво хакерских алгоритмов, бесполезных обычному человеку. Потому что 99% лисперов - это Beautiful Bipolar Mind.
> Интереснее смотрится перевод JS в какой-нть C# - чтобы избавить страницы от
> этого мракобесия и запилить нормальный, статически типизированный язык.А почему бы не наоборот? Вот есть, например, фреймворк Ocsigen, который переводит нормальный статически типизированный Ocaml в JS.
Осталось сделать аналог для rust'a))
Может сразу что-то rust-о-подобное со скобочками поверх llvm.
в любой непонятной ситуации пиши транслятор LISP на плюсы
> в любой непонятной ситуации пиши транслятор LISP на плюсыFORTRAN в Brainfuck.
Ура, наконец-то лисперы смогут таки взять и написать что-то полезное. А то сейчас на вопрос "А если ваш язык так офигенен, то почему на нём ничего не написано?" они смотрят в пол и что-то бормочут про непонимание и недооценку (ну и про емакс)...
> Ура, наконец-то лисперы смогут таки взять и написать что-то полезное. А то
> сейчас на вопрос "А если ваш язык так офигенен, то почему
> на нём ничего не написано?" они смотрят в пол и что-то
> бормочут про непонимание и недооценку (ну и про емакс)...Да! Наконец-то, ядро можно переписать.
На Лиспе есть супер полезные вещи.
Например? Не важно даже если они узкоспециальные и по этой причине не на слуху. Расскажи.
> Например? Не важно даже если они узкоспециальные и по этой причине не
> на слуху. Расскажи.GNUS, Org mode, GNU Emacs.
Нехорошо. Вы читерите. Это всего лишь плагины к емаксу. Т.е. вместо трёх наименований вам следовало сказать лишь одно: emacs (и добавить, что костяк емакса написан на Си).
> Нехорошо. Вы читерите. Это всего лишь плагины к емаксу. Т.е. вместо трёх
> наименований вам следовало сказать лишь одно: emacs (и добавить, что костяк
> емакса написан на Си).А песочек не надо начть плавить, чтоб лисп-машину вытранзисторить? Раз- http://elpa.gnu.org/packages/ упо- http://melpa.org/ рись. Там даже редактор отдельно!
>А песочек не надо начть плавить, чтоб лисп-машину вытранзисторить?Я на некоторых форумах граммарнаци подрабатываю и с русским языком "на ты", но тут сдаюсь. Нихрена не понял:)
Но, судя по ссылке, это полный список лисп-программ? Эти 40-50 наименований из 100-строчников это всё, что родили лисперы? Ты лишь расстроил меня. Я думал, что в мире лиспа немного больше лиспа.
> Эти 40-50 наименований из 100-строчников это всё, что родили лисперы?Вам дали ссылку на melpa, в которой содержится 3000+ пакетов для Emacs, а Вы увидели лишь 40-50 наименований? Вы это, слегка косите на какой-то глаз.
Ну и из независимого от emacs - maxima, конечно.
Если в таком ключе, то и MathLab сюда же.
> Но, судя по ссылке, это полный список лисп-программ? Эти 40-50 наименований из
> 100-строчников это всё, что родили лисперы? Ты лишь расстроил меня. Я
> думал, что в мире лиспа немного больше лиспа.В мире лиспа слишком велико разнообразие. Вот есть lush (http://lush.sourceforge.net/) - специально для расчетов и работы с массивами (aka Vector), а вот (http://picolisp.com/wiki/?home) веб-фреймворк и СУБД в одном флаконе. Ну, и специально для аркадных игровых автоматов есть (https://en.wikipedia.org/wiki/Ypsilon_(Scheme_implementation))
> emacs (и добавить, что костяк
> емакса написан на Си).И компилируется GCC.
А теперь угадайте с трёх раз, кто там [gcc+emacs] автором первых версий был. Бают, что какой-то Ричард )
Да, интересно. На OCaml есть: unison. А на лиспе? Да и на каком именно лиспе?
maxima computer algebra system
>важно даже если они узкоспециальныеЧитить, так читить! Расширяются на 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+).
.
.
Единственная полезная вещь в лиспе -- это лисп. Истинно говорю тебе. Всё остальное, как правило, создаётся на коленке под конкретную задачу, и несмотря на то, что это в некотором смысле эссенция полезности, но крайне редко удаётся эту эссенцию распространить с одной success story на несколько.
Бывают исключения -- тот же emacs, например. Он полезен не только Столлману. Или weblocks -- если он ещё не загнулся, я не интересовался его судьбой уже несколько лет.А вообще, чтобы почувствовать, читай здесь: http://www.winestockwebdesign.com/Essays/Lisp_Curse.html
Если вкратце и основную суть, то... Лисп -- это прибежище для особо асоциальных кодеров, потому что в лиспе можно гораздо больше сделать не связываясь с социумом и не вербуя соратников. Таким образом можно найти офигеннейшие примеры кода, писанные на лиспе одиночками. Но коллективный проект, который годами тянет, пускай небольшое, но сообщество -- это большая редкость.Кстати, до кучи: http://www.posteriorscience.net/?p=206
lisp -- это для тех, кто пишет систему снизу-вверх, понимая её на всех уровнях. Но это прошлый век. Сегодня невозможно понимать, сегодня программы пишутся методом тыка. То есть, волки-одиночки-лисперы уже не имеют никаких шансов.В новости ведь упоминается проект, в котором автор пытается слезть с иглы lisp'а на C, но ему это не вполне удаётся, поэтому он начинает создавать суррогаты лиспа. Я знаю, это сложно: все языки выглядят жалкими подобиями lisp'а, с огромным количеством идиотских ограничений, которые превращают написание программ в вырезание гландов через жопу. Но со временем можно привыкнуть вырезать гланды через жопу. И автор сего лиспового синтаксиса для C тоже поймёт это со временем.
> И автор сего лиспового синтаксиса для C тоже поймёт это со временемОднако gcc переводит C в lisp (промежуточные формы). Редактор Crisp (grief, https://sourceforge.net/projects/grief/files/?source=navbar) имеет С-подобный язык макросов, который транслируется в lisp-формат и только потом выполняется. Так что LISP-синтаксис для языков (промежуточный язык) -- это класcика. И это то применение, которое широко используется.
PS: ваш коментарий понравился.
Не знаю правда, зачем писать С программы на Lisp. Есть openlisp реализация https://en.wikipedia.org/wiki/OpenLisp, которая транслирует Lisp в программу на C. Эта фича есть и для других версий Lisp. openLisp мне просто нравится больше.
Хотел поставить вам плюс, но после обновления страницы рейтинг комментария почему-то остаётся прежним, так что напишу тут: у вас получился прекрасный комментарий!Как программист тоже чувствую, что понимать, как работает программа, - прошлый век, и это грустно.
> Хотел поставить вам плюс, но после обновления страницы рейтинг комментария почему-то остаётся
> прежним,
> Как программист тоже чувствую, что понимать, как работает программа, - прошлый век,
> и это грустно.Как порогомисту раскрою страшную тайну работы плюсика: он плюсуется асинхронно. То есть "своевременно или чуть позже". Никакого "после обновления страницы".
Полностью разделяю Ваши чувства по поводу того, что Вы не понимаете, как работает программа с "плюсиком". Это так... прошло-веково и готично-баррочно.
А ещё оно может учитывать что ты аноним и считать твой голос за 0.1. Или банить по айпи голосование. Кто знает почему оно не работает, или, даже, видеть что ты аноним, а в user_agent у тебя винда и пропускать плюсик чтобы охранить сообщество!
> Как порогомисту раскрою страшную тайну работы плюсика: он плюсуется асинхронно. То есть "своевременно или чуть позже". Никакого "после обновления страницы".Я был залогинен, сидел из firefox-esr 45, linux. Нажал на плюсик, подождал 10 секунд, обновил страницу.
Как программист, я знаю, как работают кластерные системы и что с некоторой вероятностью обновлённый плюсик просто был отправлен не на тот мастер-сервер, с которого получаю информацию я. Хотя обычно такие системы пишутся так, чтоб пользователь, поставивший плюс, этот плюс видел: либо он в сессию заносится, либо в куку, либо переключается на мастер-сервер, в который записались данные.
Но как программист, я также понимаю, что с гораздо большей вероятностью мой плюс просто не был учтён по какой-то причине, включая (наряду с отключенной передачей referer или включенным uBlock) вероятные ошибки автора движка сайта. Поэтому решил выразить этот плюс автору письменно
И как пользователь должен сказать, что я НЕ ХОЧУ изучать исходный код каждого сайта, на котором нажимаю плюс (кстати, где можно посмотреть на исходники opennet?) лишь для того, чтобы понять, учтён мой плюс или нет.
> Полностью разделяю Ваши чувства по поводу того, что Вы не понимаете, как работает программа с "плюсиком". Это так... прошло-веково и готично-баррочно.
Готов поспорить, вы тоже не понимаете, как она работает, а лишь строите догадки на предположении, что ошибок в софте не бывает и авторы всегда тестируют свой код вообще во всех возможных условиях. Ведь это так современное и иновационно.
Поставил вам плюсик и заодно проверил, что сейчас оно работает, значит - баг плавающий. Плюсователь мог молча лечь под нагрузкой - выв плюсовали вечером :)
>> Как порогомисту раскрою страшную тайну работы плюсика: он плюсуется асинхронно. То есть "своевременно или чуть позже". Никакого "после обновления страницы".
> Я был залогинен, сидел из firefox-Первое правило "плюсик"-клуба: не обсуждай http://www.opennet.me/openforum/vsluhforumID4/323.html#1 плюсики.
Воторое правило "плюсик"-клуба: будь мужЫком, никогда #$%@... см. п.1.
> lisp -- это для тех, кто пишет систему снизу-вверхчё?? "снизу-вверх" - так пишут новички на бейсике! Или ассемблере, но у них выхода нет. Любой проект больше 1000 строк кода пишется сверху вниз.
> , понимая её на всех уровнях.
Ага. Первые 10 минут. А на завтра он приходит и сам не понимает собственный код, ибо наворотил "генераторов" по самые гланды, зато в 10 строк. Оно нам надо?
> Но это прошлый век. Сегодня невозможно понимать, сегодня программы пишутся методом тыка.
"Методом тыка" пишется Линукс, ибо только "тыком" новички и могут модифицировать чужой код. Любая нормальная программа пишется как обычно - проектированием архитектуры и разложением сложного в простое.
> То есть, волки-одиночки-лисперы уже не имеют никаких шансов.
Так асоциальные клоуны или волки? Вы уж определитесь... :) Я больше склоняюсь к "укуренный ЛИСпер" :)
> Так асоциальные клоуны или волки?Клоуны конечно же. Кругом одни клоуны. Не переживайте так. Примите галоперидольчику, и не нервничайте. Нет никаких волков.
> "снизу-вверх" - так пишут новички на бейсике!Объясняю специально для кодеров.
Когда вы пишете сверху вниз и выясняете, что вам нужно сложить три числа, вы пишете функцию, складывающую три числа "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]". Когда через месяц вам понадобится функция складывающая четыре числа, вы используете уже созданное и оттестированное.
> А вообще, чтобы почувствовать, читай здесь: http://www.winestockwebdesign.com/Essays/Lisp_Curse.htmlПочитал белорусский перевод - чуть не уссыкался :)
"Гэта эсэ яшчэ адна спроба прымірыць ўлада Lisp мова праграмавання з няздольнасцю Lisp супольнасці, каб прайграць іх загадзя А.І. зімовых дасягненняў. Без сумневу, Lisp быў уплывовым крыніцай ідэй нават у яго час адступлення. Той факт, плюс бляск розных архітэктур Lisp Machine, і ў цяперашні час Ліспе рэнесанс пасля больш чым дзесяці гадоў у пустыні, паказваюць, што Lisp партызаны павінны мець некаторыя падставы для іх самаздаволення. Тым не менш, яны не змаглі перавесці магутнасць Lisp ў рух з пераважнай імпульсу."
метнул бисер перед свиньёй, которая не слыхала про переполнение буфера