Начал пилить транслятор в SLXI
Aug. 14th, 2013 03:08 amСобственно, наконец-то у меня дотянулись руки начать писать транслятор лисп-объектов в AST в SLXI.
Для тех кто всё пропустил - SLXI это кросс-интерпретатор моего лиспа, похожего на CL, написанный на C#
Ну так вот, какие TODO:
В SLXI(а конкретно, в классе LispObject) в первую очередь не хватает представлений для функций и для объектов ОО-системы.
Функций пока нет потому, что пока не определился, как они будут представляться, а именно - каким-либо байткодом, либо AST. Скорее всего AST, т.к. у SLXI задача состоит исключительно в том, чтобы забутстраппить будущий компилятор, написанный на самом лиспе, и мне дико лень тратить на сам кросс-интерпретатор излишне много усилий.
ОО-система же, естественно, будет похожа на CLOS, с некоторыми изменениями. В частности все объекты будут т.н. funcallable.
Кстати, в коде на гитхабе можно заметить, что такие вещи, как представление лексического окружения в трансляторе, представление переменных и деклараций, являются internal-объектами, грубо говоря C#-выми штуками. На самом деле, это временная мера; с введением ОО-системы они станут полноценными объектами, которые дадут пользователю лисп-системы возможность достаточно тонко управлять компиляцией на этапе раскрытия макросов.
Еще, как заметно, нету пока что и намека на парсер, т.е. reader. Нету потому, что он будет частью стандартной библиотеки. Считыватель будет очень расширяемым, настраиваемым, и вообще достаточно интересным. Про него подробнее тут: http://love5an.livejournal.com/377367.html
А вообще, есть много things to discuss об этом моем лиспе с представителями лисп-сообщества и интересующимися. В частности, надо будет продумать ОО-систему до конца, надо будет основательно поработать над стандартной библиотекой, ну и вот еще интересный вопрос про модульность - у меня вот уже давно висит идея сделать нормальную модульность лиспу, с блэкджеком и куртизанками, т.е. например наподобие как в .NET - со сборками(assembly), модулями и чем-то типа GAC. Еще интересный вопрос - IO-подсистема в стандартной библиотеке: сейчас мода на асинхронность(я вообще дико влюблен в async await в C#), и надо бы это как-нибудь красиво прикрутить. Вобщем, на одной из встреч надо будет эту тему поднять(ну и в интернете конечно буду писать про это всё).
Для тех кто всё пропустил - SLXI это кросс-интерпретатор моего лиспа, похожего на CL, написанный на C#
Ну так вот, какие TODO:
В SLXI(а конкретно, в классе LispObject) в первую очередь не хватает представлений для функций и для объектов ОО-системы.
Функций пока нет потому, что пока не определился, как они будут представляться, а именно - каким-либо байткодом, либо AST. Скорее всего AST, т.к. у SLXI задача состоит исключительно в том, чтобы забутстраппить будущий компилятор, написанный на самом лиспе, и мне дико лень тратить на сам кросс-интерпретатор излишне много усилий.
ОО-система же, естественно, будет похожа на CLOS, с некоторыми изменениями. В частности все объекты будут т.н. funcallable.
Кстати, в коде на гитхабе можно заметить, что такие вещи, как представление лексического окружения в трансляторе, представление переменных и деклараций, являются internal-объектами, грубо говоря C#-выми штуками. На самом деле, это временная мера; с введением ОО-системы они станут полноценными объектами, которые дадут пользователю лисп-системы возможность достаточно тонко управлять компиляцией на этапе раскрытия макросов.
Еще, как заметно, нету пока что и намека на парсер, т.е. reader. Нету потому, что он будет частью стандартной библиотеки. Считыватель будет очень расширяемым, настраиваемым, и вообще достаточно интересным. Про него подробнее тут: http://love5an.livejournal.com/377367.html
А вообще, есть много things to discuss об этом моем лиспе с представителями лисп-сообщества и интересующимися. В частности, надо будет продумать ОО-систему до конца, надо будет основательно поработать над стандартной библиотекой, ну и вот еще интересный вопрос про модульность - у меня вот уже давно висит идея сделать нормальную модульность лиспу, с блэкджеком и куртизанками, т.е. например наподобие как в .NET - со сборками(assembly), модулями и чем-то типа GAC. Еще интересный вопрос - IO-подсистема в стандартной библиотеке: сейчас мода на асинхронность(я вообще дико влюблен в async await в C#), и надо бы это как-нибудь красиво прикрутить. Вобщем, на одной из встреч надо будет эту тему поднять(ну и в интернете конечно буду писать про это всё).