Katahdin — это интерпретируемый язык программирования, в котором синтаксис и семантика могут изменяться во время исполнения. Чтобы идея стала ясна, сразу приведу пример с официального сайта. В примере определяется операция получения остатка от деления ("%" в C, «mod» в Pascal).
В частности можно описать на Katahdin все конструкции какого-нибудь существующего языка. В результате мы получим интерпретатор этого языка. Таким образом уже реализованы Fortran и Python.
С помощью Katahdin можно легко совмещать в одной программе код на нескольких языках. И, более того, можно подгружать модули для работы с разными языками динамически. Я не могу с ходу придумать практического применения для таких возможностей, но изучить их однозначно стоит. Вот пример.
class ModExpression : Expression {
pattern {
option leftRecursive;
a:Expression "%" b:Expression
}
method Get() {
a = this.a.Get...();
b = this.a.Get...();
return a - (b * (a / b));
}
}
В частности можно описать на Katahdin все конструкции какого-нибудь существующего языка. В результате мы получим интерпретатор этого языка. Таким образом уже реализованы Fortran и Python.
С помощью Katahdin можно легко совмещать в одной программе код на нескольких языках. И, более того, можно подгружать модули для работы с разными языками динамически. Я не могу с ходу придумать практического применения для таких возможностей, но изучить их однозначно стоит. Вот пример.
import "fortran.kat";
import "python.kat";
fortran {
SUBROUTINE RANDOM(SEED, RANDX)
INTEGER SEED
REAL RANDX
SEED = 2045*SEED + 1
SEED = SEED - (SEED/1048576)*1048576
RANDX = REAL(SEED + 1)/1048577.0
RETURN
END
}
python {
seed = 128
randx = 0
for n in range(5):
RANDOM(seed, randx)
print randx
}
В общем, язык очень интересный, хотя и не понятно пока, как его можно применять на практике. Проект, к сожалению, сейчас не развивается, так как единственный активный разработчик не имеет возможности продолжать работу над проектом.
Ссылки
UPD Статья в википедии удалена. Обидно.
UPD2 Статью вернули под другим именем. Ссылка исправлена.