Кирилл> с системой типов Хиндли-Милнера
Вкратце распиши, а то гуглить некогда
...
А на счёт исключений - их реализовывать придётся, полагаю, в любом случае.
И надо думать над красивым синтаксисом аргументов слов. Первое, что в голову приходит - это использовать комментарий с параметрам, заданный де факто, но теперь сделать его обязательным по стандарту:
code forth
public static : str_repeat ( String:arg1 Integer:arg2 - String )
\ ...
;
Нужен набор модификаторов - public, private, static, final. По умолчанию, полагаю, нужно делать просто private.
Непонятно, что делать с режимом исполнения. Ибо делать два набора слов, для режима компиляции и для режима исполнения, ИМХО, бред. Как вариант - комиплировать введёную строку в анонимное слово и исполнять потом. Какие могут быть подводные камни?
Кстати, от Форта не так уж много остаётся... Например, мы не можем оперировать стеком вызывающего слова. Что, с одной стороны, нам больше не нужно, так как число аргументов фиксированное и в слово передаётся всё, что ему надо, с другой - это уже не совсем Форт
Даже синтаксис. В приведёном примере двоеточие выглядит уже не в тему... Так и напрашивается "static function str_repeat ..."
… чтобы понять рекурсию, нужно сперва понять рекурсию …