История изменений
Исправление MOPKOBKA, (текущая версия) :
Ну не за один и не на ассемблере. На Питоне можно в 500 строк уложиться. На ассемблере, вероятно, только какая-то часть влезет.
Ну я описываю то что сделал я, эти примеры как раз мой компилятор/интерпретатор выполняет, у меня немного другая логика в for next, отличная от ANS. Ну и совместимость с ANS не нужна, половина слов бесполезные, другие хочется сделать по другому, и словарь можно заменить на dq(2) для имени + пару бит на флаги, и еще один dq(1) для адреса, не знаю зачем нужны переключаемые словари, их можно не делать, итд.
Я еще отказался от шитого кода, мне он показался сложным, поэтому тела всех слов, включая определяемые пользователем, это машинный код x86_64.
Forth прикольный язык для маленьких задач. А если есть десяток переменных, то их туда-сюда замучаешься по стеку передвигать. Удобнее всё-таки произвольный доступ.
В Forth есть переменные, но наверное все же речь про большое количество значений на стеке, так вот, их не должно быть больше ~16, а значений с которыми работают слова в текущий момент, не должно быть больше 3-4, как так сделать советов много но универсального нету, например если мы работаем с математикой то хорошо бы завести отдельный стек для векторов что бы они не мешали обычным данным, к тому же операции со стеком векторов можно отдельно написать оптимизированными, и получится даже удобнее, ну и устройство x87 так и просит вынести float-числа в отдельный стек, хотя тут спорно, стоит ли его использовать. Ну и слова типа PICK лучше вообще не добавлять.
Исправление MOPKOBKA, :
Ну не за один и не на ассемблере. На Питоне можно в 500 строк уложиться. На ассемблере, вероятно, только какая-то часть влезет.
Ну я описываю то что сделал я, эти примеры как раз мой компилятор/интерпретатор выполняет, у меня немного другая логика в for next, отличная от ANS. Ну и совместимость с ANS не нужна, половина слов бесполезные, другие хочется сделать по другому, и словарь можно заменить на dq(2) для имени + пару бит на флаги, и еще один dq(1) для адреса, не знаю зачем нужны переключаемые словари, их можно не делать, итд.
Я еще отказался от шитого кода, мне он показался сложным, поэтому тела слов это машинный код x86_64.
Forth прикольный язык для маленьких задач. А если есть десяток переменных, то их туда-сюда замучаешься по стеку передвигать. Удобнее всё-таки произвольный доступ.
В Forth есть переменные, но наверное все же речь про большое количество значений на стеке, так вот, их не должно быть больше ~16, а значений с которыми работают слова в текущий момент, не должно быть больше 3-4, как так сделать советов много но универсального нету, например если мы работаем с математикой то хорошо бы завести отдельный стек для векторов что бы они не мешали обычным данным, к тому же операции со стеком векторов можно отдельно написать оптимизированными, и получится даже удобнее, ну и устройство x87 так и просит вынести float-числа в отдельный стек, хотя тут спорно, стоит ли его использовать. Ну и слова типа PICK лучше вообще не добавлять.
Исправление MOPKOBKA, :
Ну не за один и не на ассемблере. На Питоне можно в 500 строк уложиться. На ассемблере, вероятно, только какая-то часть влезет.
Ну я описываю то что сделал я, эти примеры как раз мой компилятор/интерпретатор выполняет, у меня немного другая логика в for next, отличная от ANS. Ну и совместимость с ANS не нужна, половина слов бесполезные, другие хочется сделать по другому, и словарь можно заменить на dq(2) для имени + пару бит на флаги, и еще один dq(1) для адреса, не знаю зачем нужны переключаемые словари, их можно не делать, итд.
Forth прикольный язык для маленьких задач. А если есть десяток переменных, то их туда-сюда замучаешься по стеку передвигать. Удобнее всё-таки произвольный доступ.
В Forth есть переменные, но наверное все же речь про большое количество значений на стеке, так вот, их не должно быть больше ~16, а значений с которыми работают слова в текущий момент, не должно быть больше 3-4, как так сделать советов много но универсального нету, например если мы работаем с математикой то хорошо бы завести отдельный стек для векторов что бы они не мешали обычным данным, к тому же операции со стеком векторов можно отдельно написать оптимизированными, и получится даже удобнее, ну и устройство x87 так и просит вынести float-числа в отдельный стек, хотя тут спорно, стоит ли его использовать. Ну и слова типа PICK лучше вообще не добавлять.
Исправление MOPKOBKA, :
Ну не за один и не на ассемблере. На Питоне можно в 500 строк уложиться. На ассемблере, вероятно, только какая-то часть влезет.
Ну я описываю то что сделал я, эти примеры как раз мой компилятор/интерпретатор выполняет, у меня немного другая логика в for next, отличная от ANS. Ну и совместимость с ANS не нужна, половина слов бесполезные, другие хочется сделать по другому, и словарь можно заменить на dq(2) для имени + пару бит на флаги, и еще один dq(1) для адреса, не знаю зачем нужны переключаемые словари, их можно не делать, итд.
Forth прикольный язык для маленьких задач. А если есть десяток переменных, то их туда-сюда замучаешься по стеку передвигать. Удобнее всё-таки произвольный доступ.
В Forth есть переменные, но наверное все же речь про большое количество значений на стеке, так вот, их не должно быть больше ~16, а значений с которыми работают слова в текущий момент, не должно быть больше 3-4, как так сделать советов много но универсального нету, например если мы работаем с математикой то хорошо бы завести отдельный стек для векторов что бы они не мешали обычным данным, к тому же операции со стеком векторов можно отдельно написать оптимизированными, и получится даже удобнее, ну и устройство x87 так и просит вынести float-числа в отдельный стек, хотя тут спорно, стоит ли его использовать.
Исправление MOPKOBKA, :
Ну не за один и не на ассемблере. На Питоне можно в 500 строк уложиться. На ассемблере, вероятно, только какая-то часть влезет.
Ну я описываю то что сделал я, эти примеры как раз мой компилятор/интерпретатор выполняет, у меня немного другая логика в for next, отличная от ANS. Ну и совместимость с ANS не нужна, половина слов бесполезные, другие хочется сделать по другому, и словарь можно заменить на dq(2) для имени + пару бит на флаги, и еще один dq(1) для адреса.
Forth прикольный язык для маленьких задач. А если есть десяток переменных, то их туда-сюда замучаешься по стеку передвигать. Удобнее всё-таки произвольный доступ.
В Forth есть переменные, но наверное все же речь про большое количество значений на стеке, так вот, их не должно быть больше ~16, а значений с которыми работают слова в текущий момент, не должно быть больше 3-4, как так сделать советов много но универсального нету, например если мы работаем с математикой то хорошо бы завести отдельный стек для векторов что бы они не мешали обычным данным, к тому же операции со стеком векторов можно отдельно написать оптимизированными, и получится даже удобнее, ну и устройство x87 так и просит вынести float-числа в отдельный стек, хотя тут спорно, стоит ли его использовать.
Исправление MOPKOBKA, :
Ну не за один и не на ассемблере. На Питоне можно в 500 строк уложиться. На ассемблере, вероятно, только какая-то часть влезет.
Ну я описываю то что сделал я, эти примеры как раз мой компилятор/интерпретатор выполняет, у меня немного другая логика в for next, отличная от ANS.
Forth прикольный язык для маленьких задач. А если есть десяток переменных, то их туда-сюда замучаешься по стеку передвигать. Удобнее всё-таки произвольный доступ.
В Forth есть переменные, но наверное все же речь про большое количество значений на стеке, так вот, их не должно быть больше ~16, а значений с которыми работают слова в текущий момент, не должно быть больше 3-4, как так сделать советов много но универсального нету, например если мы работаем с математикой то хорошо бы завести отдельный стек для векторов что бы они не мешали обычным данным, к тому же операции со стеком векторов можно отдельно написать оптимизированными, и получится даже удобнее, ну и устройство x87 так и просит вынести float-числа в отдельный стек, хотя тут спорно, стоит ли его использовать.
Исправление MOPKOBKA, :
Ну не за один и не на ассемблере. На Питоне можно в 500 строк уложиться. На ассемблере, вероятно, только какая-то часть влезет.
Ну я описываю то что сделал я, на примерах как раз мой интерпретатор выполняет, у меня немного другая логика в for next, отличная от ANS.
Forth прикольный язык для маленьких задач. А если есть десяток переменных, то их туда-сюда замучаешься по стеку передвигать. Удобнее всё-таки произвольный доступ.
В Forth есть переменные, но наверное все же речь про большое количество значений на стеке, так вот, их не должно быть больше ~16, а значений с которыми работают слова в текущий момент, не должно быть больше 3-4, как так сделать советов много но универсального нету, например если мы работаем с математикой то хорошо бы завести отдельный стек для векторов что бы они не мешали обычным данным, к тому же операции со стеком векторов можно отдельно написать оптимизированными, и получится даже удобнее, ну и устройство x87 так и просит вынести float-числа в отдельный стек, хотя тут спорно, стоит ли его использовать.
Исходная версия MOPKOBKA, :
Ну не за один и не на ассемблере. На Питоне можно в 500 строк уложиться. На ассемблере, вероятно, только какая-то часть влезет.
Ну я описываю то что сделал я, на примерах как раз мой интерпретатор выполняет, у меня немного другая логика в for next, отличная от ANS.
Forth прикольный язык для маленьких задач. А если есть десяток переменных, то их туда-сюда замучаешься по стеку передвигать. Удобнее всё-таки произвольный доступ.
В Forth есть переменные, но наверное все же речь про большое количество значений на стеке, так вот, их не должно быть больше ~16, а значений с которыми работают слова в текущий момент, не должно быть больше 3-4, как так сделать советов много но универсального нету, например если мы работаем с математикой то хорошо бы завести отдельный стек для векторов что бы они не мешали обычным данным, к тому же операции со стеком векторов можно отдельно написать оптимизированными, и получится даже удобнее.