LINUX.ORG.RU

Свой Lisp на JavaScript

 ,


0

2

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

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


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

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

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

То есть, кроме всего прочего, поля находятся в самих экземплярах

wat, а где они находиться должны по-твоему?

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

Ничего нового. Это со времен смоллтока так.

а как их поиск происходит

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

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

так ты напишешь ф-ю, которая принимает другую ф-ю (любую) и заменяет в ней все вхождения символа "-", которые связаны с арифметическом минусом, на «+», или соснул?

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

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

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

которые связаны с арифметическом минусом

Ты не подскажешь, а лисперы все такие идиоты? Вот, допустим, у тебя ест ф-ция block(x, x -(x)) до тех пор, пока не получен аргумент x она не «знает» какой это минус, арифметический или х*ческий, так как неизвестен тип аргумента. Данный символ может быть слотом любого типа, а у произвольного типа он может означать все что угодно.

Sequence + := method(x, .. x)
"foo" +("bar") // foobar

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

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

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

anonymous
()
Ответ на: комментарий от anonymous
Object clone do(
  a := 1
  Lobby closure := block(a + a)
)


test := block(closure,
   symbol := call message arguments at(1) asString
   closure scope hasSlot(symbol) and closure code containsSeq(symbol) // тут нужна более тонкая обработка, но для примера сойдет
)

test call(closure, a) print //true
test call(closure, b) print //false
filequest
()
Ответ на: комментарий от filequest

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

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

слушай, я не особо понимаю, что значит «с чем же связыванием». Символ а в моем примере, в контексте closure связан с 1. С чем еще он должен быть связан и где?

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

С чем еще он должен быть связан и где?

Например, я делаю новый контекст, в котором будет var a = ... (не важно что), тогда это будут разные а из разных контекстов и ф-я должна вернуть false.

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

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

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

Нет. Очевидно же, что до реального кода он не дорос. Только теория, только влажные фантазии.

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

этот код тривиален, я описал его этого достаточно. Это лишь небольшое расширение существующего кода. BTW от лисперов я так и не дождался аналога того кода который я запостил вначале. Слабо?

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

Конечно слабо, ведь макросы — не first-class, просто лишпик так не может, какая жалость.

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

этот код тривиален

Так мы его увидим? Да или нет?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.