Язык программирования Чкалов

Для примера, возмём простейшую программку:
@println(2)
А теперь разберём её по кусочкам. @ - это вызов, нативной функции. Функция должна быть записана в imports-table.txt. Если компилятор говорит "Error: Unimported function!", то её надо добавить. Но про это ниже. Далее, идёт собственно имя функции. println входит в стандартный import-table.txt. Так что беспокоится нам не о чём. Далее идёт, как и во всех ЯП, открывающая скобка, после чего следует аргумент функции. Заметим, что вместо 2 можно написать и 1+1, и даже (5+3)-6 - компилятор это превратит в соответствующий байт-код. Потом идёт закрывающая скобка. И всё! Сохраняем программу, в файл например demo.txt. Выполняем: ./chkc demo.txt demo.cvm. (в системе, должна быть установлена переменная среды CHKALOV, указывающая на каталог, где лежат chkc, chkvm и прочие. На Линухе это делается так: export CHKALOV=/root/c/ (у меня так)). Ну, посмотрим, что там нагенерировал компилятор. Например, hexdump'ом.
root@admin:~/c# hexdump demo.cvm -C
00000000  00 01 02 05 01 00 00 00  00 00 00 00 07 0e 00 00  |................|
00000010  00 00 00 00 00 73 74 64  63 6f 6e 2e 70 72 69 6e  |.....stdcon.prin|
00000020  74 6c 6e 0d 00 00 00 00  00 00 00 09 04 02 00 00  |tln.............|
00000030  00 00 00 00 00 11 0e 00                           |........|
00000038
root@admin:~/c#

Ой, сколько всяких непонятных буковок и символов... (C) Винни-Пух. Но не так уж они и страшны и вполне понятны. 00 01 02 05 - это magic'еское число, сигнатура. Далее идёт 01 и 7 байт нулей. Размер пула. Потом идёт 07 0e - размер строки "stdcon.println", после чего идут нули, собственно строка, а потом опять 8 байт размера байт-кода и начинается, собственно сам байт-код... 09 - это PUSH. Потом идёт 04 - тип LONG. И наше число 02 00 00 00 00 00 00 00. (да, по, сути, тип должен быть XSHORT, так как оно умещается в диапазон -128...127, но переезд на чистый Цы заставил меня захардкодить некоторые места (например, всем числам выставить тип LONG). К тому же, скоро вся эта костыльная система типов будет снесена куда подальше, и заменена более совершенной и экономичной. Так что нет смысла, её лечить перед смертью. Впрочем, я отвлёкся. Пойдём дальше. 11 - это CALL, потом идёт тип 0e (STR1, строка, точнее её индекс в пуле, который умещается в 0...255 - тут я не захардкодил), один байт 00 (индекс пула 0, самая первая строка), и... усё! А теперь запустим нашу программулину:
./chkvm demo.cvm
И... Тадааам!
root@admin:~/c# ./chkvm demo.cvm Readed: pool [0] as value stdcon.println ! t: 13 ! push! 2 root@admin:~/c#