воскресенье, 12 марта 2023 г.

Снова буду переделывать

 Понял, что я опять делаю не так.

Допустим у нас есть выражение:

Integer myvar1 = Integer myvar2 = some_func param1 param2

И предположим, что вызов функции some_func вызывает ошибку из-за неправильного параметра param2

Если просто сперва создать переменные, а затем вызвать функцию, то получится, что исправив параметр, мы не сможем выполнить ту же самую строку, поскольку переменные уже созданы.

Значит необходимо сперва строку скомпилировать, а затем выполнить. То есть нужна виртуальная машина и псевдокод.

четверг, 9 марта 2023 г.

Сделал функцию calc_hash

 Сделал функцию calc_hash. Теперь она вызывается с параметром - строкой:

calc_hash "some text"

Возращаемый параметр имеет тип Hash и в данном варианте он помещается на стек.

Теперь хочу добавить переменные - чтобы можно было вызывать функцию так:

Hash myhash = calc_hash "some text"

При вызове функции параметр может быть обязательным или опциональным. Нужно только добавить значение по умолчанию.

Возвращаются значения у меня отдельным списком, так что их может быть несколько, и они тоже могут быть обязательными или опциональными. 

Пока это у меня ещё не сделано, но раз я собираюсь добавить присваивание значения переменной, то нужно будет это реализовать.

Таким образом в функции появляется оператор return со списком возвращаемых параметров.

Значит мне нужно сделать такой синтаксис:

Type1 var1 Type2 var2 Type3 var3 = some_func param1 param2 param3

И тогда, если функция возвращает несколько значений, а переменных меньше, то лишние значения надо либо игнорировать, либо помещать на стек. Наверное для совместимости лучше игнорировать. Ведь, если число результатов изменится, то это никак не повлияет на вызывающий код.