На этом.
Язык компилируется в Lua (поддерживаются версии 5.1, 5.2, 5.3 и даже возможно JIT).
Предупреждаю — этот язык является диалектом Lisp. Если ваш дед не оставил в кладовке пачку скобок, возможно у вас не получится на нем писать.
Из фич: pattern matching, прикольные циклы, фреймворк для тестов, красивые сообщения об ошибках.
Hello world на Urn:
(print! "Hello, world!")
Работает также арифметика в стиле лиспа:
(+ 2 (* 4 5))
Можно создавать функции:
(defun times-two (x)
(* x 2))
(print! (times-two 2))
(print! (times-two 3))
и макросы:
(defmacro show (x)
(print! "Compile-time" (pretty x))
`(progn
(print! "Run-time" ,(pretty x))
(print! "Value" ,x)))
------------------------------------
> (show (+ 2 3))
Compile-time (+ 2 3)
Run-time (+ 2 3)
Value 5
Можно использовать библиотеки из Lua:
(define bit32
:hidden
(require "bit32"))
(define & (.> bit32 :band))
(define ~ (.> bit32 :bnot))
и таблицы из Lua:
> { :foo 1
. :bar 2 }
out = {"bar" 2 "foo" 1}
Компилятор языка написан на Lua UPD: компилятор написан на Urn и скомпилирован в Lua; предлагаю энтузиастам поиграться с ним в OpenComputers и сделать отчет.
А я пойду дальше употреблять вещества.