Тема: Про стек виртуальной машины

Здравствуйте!вы писали про стек ВМ так - По сути это простой массив указателей и переменная для хранения индекса вершины стека.Я Си изучал , немного своим ЯП занимаюсь , я делал стек как стек чисел т.е. объявлял примерно так
float steck[256] , там складывал числа , т.е. это операндовый стек (стек для операндов) , а у вас элемент стека имеет тип указатель на обьект в памяти , даже если это просто числа ?

Поделиться

2

Re: Про стек виртуальной машины

Стоит понимать, что ЯП имеет динамическую типизацию и приведение типов -> каждая переменная это структура, состоящая из указателя на блок памяти и переменную enum-типа - тип данных по указателю, нужно это все для быстрого определения и приведения типов, для выполнения разного рода операций.
В стеке лежат указатели на объекты, в т.ч. и на объекты из других ЯП при возврате таковых из импортируемых методов. То, как с ними будет обращаться ВМ зависит от выполняемых опкодов.

Поделиться

3 (2019-01-06 00:38:42 отредактировано muhamedj_kosta_UkuvchiLan)

Re: Про стек виртуальной машины

Спасибо! Я скачал с GitHub 2 проекта mash-lang, где я могу найти  эти структуры, и эти структуры наследуют "указателя на блок памяти и переменную enum-типа" от базового класса как в других ЯП или нет?  Я просто C/C++/Python изучал. Похоже они лежат в mash-lang\lang?

Поделиться

4

Re: Про стек виртуальной машины

/runtime/svm/svm_mem.pas -> TSVMMem (Базовый объект памяти).
/runtime/svm/svm_core.pas -> TStack (Основной стек).
Тип объявлен как class, т.к. с классами ведется работа (передача/обращение) по неявным указателям. Это удобно.

Рекомендую к прочтению:
https://habr.com/post/435202/

Язык больше похож на смесь Object Pascal & Ruby.

Поделиться

Re: Про стек виртуальной машины

Здравствуйте! Посмотрите ) https://github.com/kosta2222/proj_VoiceDecoderExecute

Поделиться