Pull to refresh

Katahdin: метапрограммирование на грани фантастики

Reading time 2 min
Views 2.3K
Katahdin — это интерпретируемый язык программирования, в котором синтаксис и семантика могут изменяться во время исполнения. Чтобы идея стала ясна, сразу приведу пример с официального сайта. В примере определяется операция получения остатка от деления ("%" в C, «mod» в Pascal).
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 Статью вернули под другим именем. Ссылка исправлена.
Tags:
Hubs:
+46
Comments 93
Comments Comments 93

Articles