LINUX.ORG.RU

Свой Lisp на JavaScript

 ,


0

2

Если вам интересна тема разработки компиляторов/транслтяторов, то предлагаю вам поучаствовать в проекте по написанию Lisp на JS. Да, еще один Lisp да еще и на JS :) Естественно, целью проекта не является покорение олимпа языков, транслирующихся в JS, но вот процесс ради процесса - это то, что движет этот проект. Реализовано уже немало, но многое еще осталось: - система модулей; - interoperability с JS; - расширение стандратной библиотеки; - оптимизация производительности;

Если интересно, то вам сюда: https://github.com/daynin/tiny-lisp

а ещё lisp можно реализовать на бейсике, php, и (чтобы модно-молодёжно) например на F#. То есть предлагаю вам не останавливаться на достигнутом и двигаться дальше :-)

может быть хватит уже ? пилите какой-нить существующий лисп до уровня user-friendly

MKuznetsov ★★★★★ ()

Я хочу чтобы кто-нибудь сделал лисп для популярный платформ, только код пишется не s-exp, а xml. И чтобы представить его не лиспом, и типа таким модным интерпрайзным фреймворком. Чтобы реально могло пройти в мейнстрим. Все будут думать что это какой-нибудь Spring2, а по факту кошерный лисп.

;; что я несу? я нормален?

Debasher ★★★★★ ()
Последнее исправление: Debasher (всего исправлений: 1)
Ответ на: комментарий от MKuznetsov

пилите какой-нить существующий лисп до уровня user-friendly

Лисп как раз очень user-friendly в отличие от всякого говна для аутистов типа питухона или жопаскрипа.

anonymous ()
Ответ на: комментарий от Debasher

Я хочу чтобы кто-нибудь сделал лисп для популярный платформ, только код пишется не s-exp, а xml.

mv ./sbcl ./spring2

И поменять ридер с принтером, чтобы выплевывал и всасывал иксэмел. PROFIT!

Oxdeadbeef ★★★ ()

Да, видел вчера статью на хабре... Которая целиком посвящена токенизатору, написанному с использованием стандартной библиотеки. С обещанием остальное написать следующих сериях. Из всего проекта мне лично интересна только компиляция в JS. А еще после этой хабростатьи я подумал что все можно, и может накатаю свою про свои реализации Лиспа на Java и Haskell. Только постараюсь не размазывать Войну и Мир про токенизаторы.

Ivana ()
Ответ на: комментарий от Gentooshnik

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

Ivana ()
Ответ на: комментарий от monk

Да я не знаю, как реализуется cl:loop, но в дебри лезть нехрен. Суть такова, что лисперы, во всяком случае, современные, понимают метапрограммирование очень узко, со своей колокольни, типа это просто макросы, которые подхватываются препроцессором, и которые служат инструкциями для препроцессора, для модификации вложенного в них кода. Попросту говоря, это шаблонизатор, выражаясь современным языком. Но метапрограммирование заключается не в этом, а в рефлексии. ООП само по себе обладает этим свойством, но в обычных джаваскриптовских объектах было достаточно сложно установить кастомное поведение обработки сообщений, теперь данная проблема решена. Proxy — сам по себе объект, и на его основе можно строить объекты, схожие по интерфейсу с нативными, но имеющие иное поведение. Эти объекты получают сообщение в рантайме, никакой eval с вызовом препроцессора для этого не нужен. Это не идеальное решение, но многобещающее. А лисповские макгосы можно было и без них моделировать вот так:

 evaluator = function(f){parseAndEval(f)}
 evaluator(function(){/*crazy code here*/})

filequest ()
Ответ на: комментарий от filequest

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

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

anonymous ()
Ответ на: комментарий от anonymous

ты имеешь право на свое мнение. Но если ты с этим споришь, значит ты просто не понял суть макросов. Почитай на сайте picolisp, может допрет, что это такое, и чем они отличаются от fexpr's

filequest ()
Ответ на: комментарий от filequest

Дебил, ты в курсе что на Лиспе уже давно написана объектная система с метаобъектным протоколом в придачу? Твой «мощный инструмент метапрограммирования» всего лишь унылая библиотека на Лиспе.

anonymous ()
Ответ на: комментарий от monk

плохо, и не особо удобно, конечно то, что JS проверяет синтаксис перед исполнением, поэтому, какой попало синтаксис ты позволит себе писать не сможешь. К примеру, если я захочу запилить ленивую функцию, невозможно написать proxy.myMethod(x, y) придется писатьproxy.myMethod$x_y$, это хреново, да. Но терпимо.

filequest ()
Ответ на: комментарий от anonymous

Вот это реальный уровень лиспера: звуки из подворотни. От царей недалеко ушли, если ушли. Таким нужно еще что-то доказывать? Да они сами за себя все доказывают

anonymous ()

сказал лиспер из подворотни, закутавшись в рваное пальто от внезапного порыва холодного ветра. Он повзрослел, мамкиного борща уже не было, и приходилось лазить по помойкам в поисках пропитания. Он был очень зол из-за голода, и постоянно лезущих в голову мыслей о неудавшейся жизни, вперемежку с какими-то скобками, все это слипалось в холодный комок, и пронзало каким-то колючим неприятным холодом изнутри. Но было поздно, он понимал, что ничего уже не вернуть, и только злобно скалился на прохожих, временами выкрикивая бессвязные фразы: «эй, быдло, вы хоть понимаете, что такое макросы?!!!», «лисп не такой, он для других целей предназначен», «эй, чмыри, дискуссия закончена, ваша херота лиспу в подметки не годится, ставки сделаны, ставок больше нет, вы все проиграли!!!». Прохожие спешили, и не обращали внимания на беднягу. Начинался дождь, все спешили домой. Лиспер достал из кармана пальто кусок рваного полиэтилена и накрыл голову.

filequest ()

Если у тебя всё равно процесс ради процесса и тебя интересует в какой-то степени лисп, то какая разница, в какую сторону переводить?

У меня в проекте используются куски вот этого проекта: http://marijnhaverbeke.nl/cl-javascript/

Это реализация JavaScript на лиспе. Она характерна тем, что в 2009 году работала быстрее, чем обычный JavaScript. Правда, потом JavaScript разогнался и вырвался вперёд.

Присоединяйся к моему проекту. Вот сайт. А вот моя IDE https://www.youtube.com/watch?v=nMhwvZ56jHU

den73 ★★★★ ()
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от filequest

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

loz ★★★★★ ()
Ответ на: комментарий от loz

Во всем что ты перечислил, разница будет только в том, что оптимизации происходят во время компиляции. Но поскольку что JS что CL компилируются just in time, то есть, перекомпиляция может происходить в процессе выполнения, то это все также занимает время выполнения, хотя возможно и быстрей. Clos смотрел, сильно не вникал, но ничего сверхестественного не увидел. Мало того, это вообще с натяжкой можно назвать ООП. Особенно мне не понравилось то, что при изменении поля в классе он вместо того чтобы в дальнейшем использовать делегирование, тупо передрачивает все экземпляры, переписывая в них поля. То есть, кроме всего прочего, поля находятся в самих экземплярах! Крайне уродливое решение. Кто мог такое написать, не мог создать полноценную ООП-систему.

filequest ()