суббота, 23 января 2021 г.

Сделал sizeof и глобальные переменные

 Немножко конечно трудно работать, когда тебе мешает ФСБ, но в этом году выборы, и ФСБ с прошлого лета пытается меня прессовать. Всё же кое-как удалось выкроить время и что-то поделать.

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

Помимо этого сразу понадобились модификаторы для функций и свойств классов. Добавил модификаторы Regular, Static, Abstract, Virtual.

Пока язык напоминал объектный Форт, статичные функции не требовались, поскольку я клал при вызове метода this на стек, и получались по сути обычные фортовские функции - берёт данные со стека, кладёт результат на стек.

Но в этой версии я решил использовать парадигму выделения объекта или класса. Поэтому какие-то функции получились статичными, какие-то регулярными.

Переменная PI типа Float

Возник вопрос, можно ли использовать имя переменной как параметр функции.

Переменная set Другая_переменная

Казалось бы, логично добавить такую возможность. Но сразу возникает вопрос: а что со свойствами объектов? Ведь это тоже переменная.

И сразу получается, что из функции get_param может происходить вызов другой функции (ведь у свойств есть метод get), а та может снова вызвать get_param и т.д. То есть код сразу станет нечитаемым, поскольку будет непонятно, где конец одного оператора и начало другого. Следовательно потребуется ввести ';' как оператор разделения операторов.

Но всё это было бы прекрасно, если бы функции не могли менять состояние стека или таблицы заголовков. А так получается, что ты сделал вызов параметра, и теперь все твои переменные могут стать невалидными. 

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

Теперь думаю переходить к определению функций.

Комментариев нет: