2008-02-19

Extendable languages investigation

Небольшое исследование расширяемых языков и смежных областей.

Упор на Java.


Java Syntactic Extender (JSE)
http://people.csail.mit.edu/jrb/jse/
http://jse.sourceforge.net/examples/index.html
макропроцессор. преобразует .jse файлы в .java с помощью спец java классов.
использует преобразования синтаксического дерева разбора. code quotes.

SQLJ
http://www.sqlj.org/
препроцессор. синтаксическое расширение java для работы с SQL.
Проверяет коррестность запросов и типов на этапе компиляции.
Немного похожая функциональность есть в стандарте jdbc4 (sql в аннотациях),
но там нет проверок при компиляции.

JastAdd
http://jastadd.cs.lth.se/web/
Java-based compiler compiler system.
используют:
Jast Extensible Java Compiler (JastAddJ)
support Java 1.4, 1.5
модульность
доп проверки
Java non-null types tools
Вычисление метрик кода
PicoJava
простой ОО язык

OJ, OpenJava
http://openjava.sourceforge.net/
Metaobject Protocol for Java
Class-Based Macro System for Java
генерирует класы в runtime.
не развивается (последний релиз 2001г)

XLR: Extensible Language and Runtime
http://xlr.sourceforge.net/
простой язык с возможностями расширения синтаксиса.
своя виртуальная машина.

MPS, Meta Programming System
http://www.jetbrains.com/mps/
набор инструментов для создания языков предметной области и связи их с IDE Idea
(редакторы, дополнение кода, навигация, сквозной сефакторинг и пр).
свободно доступен по EAP. исходный код закрыт.
(набирают студентов в Питере для стажерства)

ANTLR, ANother Tool for Language Recognition
http://antlr.org/
аналог JavaCC, LL(k)
GUI - ANTLR Works, ANTLR Studio (аналоги редактора граматик MPS)

JavaCC, Java Compiler Compiler, The Java Parser Generator
https://javacc.dev.java.net/
LL(k)

Scala
http://www.scala-lang.org/
Объектно-функциональный статически-типизируемый язык. Компилируется в java и dotnet.
Расширяемость за счет "синтаксического сахара" и замыканий:
object method subject {..} == object.method(subject)(closure)

Groovy, JSR241
http://groovy.codehaus.org/
диманический язык, с компиляцией в JVM. Часто используется для расширения основной программы.
есть реализация MOP - meta object protocol, позволяющая легко создавать миниязыки:
http://www.ibm.com/developerworks/ru/library/j-pg09205/index.html?ca=drs-ru
(по моему это должен уметь любой динамический язык :))

Nemerle
http://nemerle.org/
объектно-функциональный статически-типизируемый язык. Компилируется в dotnet.
типо-безопасные "гигиеничные" макросы и квази-цитирование.

Lisp
самый расширяемый язык по многим источникам.


Links:
http://en.wikipedia.org/wiki/Extensible_programming
http://feeds.feedburner.com/~r/robjsoftwaredotorg/~3/195098913/growable-language-manifesto.html

No comments:

About Me

Ekaterinburg, Ural, Russia