мне кажется вот что:
1. логичнее (может быть) считать адреса аргументов и локальных с макушки стека (??? не уверен)
(тут могут быть варианты, если ВМ использует фреймы стека для контроля, например).
2. функция (может быть) должна выкидывать со стека аргументы (??? тоже не уверен)
3. язык, как мне кажется, перегружен "кривыми" условными символами -
все эти ":=", ";", "@" и прочие скобочки я бы постарался минимизировать...
Это потенциальный источник синтаксических ошибок, которые грозят перерасти в семантические
(что будет, если пользователь, например, поставит "=" вместо ":=" или напишет "n1" вместо "@n1"?)
Я бы также выкинул "объявления"... Тут надо смотреть на то, что хочется с типами получить...
Вот мне кажется, что нужно из си выкинуть некоторые символы:
"==" (по факту обычно применяется только в IF, WHILE итп, там, где по факту же редко применяется присваивание).
";" - компилятор почти всегда прекрасно может увидеть, где кончается одно выражение и начинается другое
(пробелом или переводом строки отделить, в крайнем случае применять только для явного разделения в одной строке, как двоеточие в бейсике).
объявления (и пользовательские типы), в крайнем случае использовать неявное преобразование к одному типу или вообще "универсальный" тип (да-да, я понимаю, что это отказ от современных концепций)
И (МОЖЕТ БЫТЬ) даже заменить открывающие-закрывающие фигурные скобки тупо отступом
(пусть пользователь будет генерить сразу красивый код, и не путается в скобочках),
хорошо бы, если бы это было поддержано редактором.
ну и стопудово нужен качественный функциональный препроцессор.
- Код: Выделить всё • Развернуть
fib(n)
if (n = 0) return 0
if (n = 1) return 1
return fib(n-1) + fib(n-2)
fib2(n)
if (n = 0) return 0
if (n = 1) return 1
n1 = 0
n2 = 1
while (n)
tmp = n2
n2 = n1 + n2
n1 = tmp
n = n - 1
return n2
В принципе и скобки в ИФах, вайлах итп - лишние
Добавлено спустя 9 минут 31 секунду:Ну а вообще, нужно конечно ориентироваться на предполагаемые проекты.
Широкомасштабируемый код, многократно используемые куски, библиотекарь (ну, чем черт не шутит)
или, скажем, динамическое связывание (не приведи господь)
сразу наложат ограничения на жесткую типизацию и т.п.