1 (2019-02-21 04:20:13 отредактировано dtpxy)

Тема: Ошибки компиляции тестов

При компиляции test_math_parser.mash
Error: Invalid constant call "booltostr"

При запуске snake.vmc
Access violation

snake запустилась после компиляции с опцией /o-
не запускается при компиляции /o+ (default)

При запуске змеи обрабатывается только первое нажатие W или S
потом змея не управляемая.
По завершении в буфере консоли остается мусор AAAADDDD
----------------
Не знаю в чем причина (что-то не так с оптимизацией?)
mashc.exe snake.mash компиляция 5сек выходной файл 34Кб - рабочий
mashc.exe snake.mash /0+ компиляция 87сек выходной файл 87 Кб
при запуске Access violation

Windows 7 32-bit

Поделиться

2

Re: Ошибки компиляции тестов

dtpxy, спустя множество часов исследований статей на хабре и исходных кодов и презентации от автора языка, я понял следущее. booltostr - это метод в библиотеке bf (base functions), следовательно при твоей ошибке в примере просто была не подключена эта библиотека. Так как стек в svm - это массив из 256 элементов который может изменять размер, Access violation возникает из-за того что перегружается стек. Но у меня самого оооооооооооооочень часто такие ошибки даже если я вообще не буду использовать переменные. Про работу змейки я сам не разобрался (у меня вообще никакие клавиши не работают и в консоль ничего не выводится), но по ходу в буфере остаются названия нажатых клавиш (имхо). про опции компиляции вообще впервые слышу (надо попробовать).

Основатель организации World of Legends и создатель одноимённого языка

Сайт snaulX

Поделиться

3

Re: Ошибки компиляции тестов

Все просто. В один прекрасный день я захотел сделать язык лучше и переименовал booltostr() в b2s()....

Очень приятно что кому то интересен проект.
Поправлю немного.
Стек имеет почти неограниченный размер.
Работает чанками, т.е. чтобы не перевыделять постоянно память - как заполняется определенный размер - выделяется ещё блок на N элементов.

Странно конечно, но у меня змейка работает идеально :\
Ошибок сегментации не наблюдаю толком....

Возможно они могут появиться у вас, если вы неправильно объявляете переменные.
Т.е. в mash переменные хранят не сами значения, а указатели на них.
a ?= 10 -- присвоить а указатель на временное значение 10.
a ?= new(10) -- создать переменную, которая не будет удаляться сборщиком мусора и поместить указатель на неё в а.
a ?= b -- теперь a и b ссылаются на одно и то же значение.

a ?= new(10)
a = 20 -- изменение значения по указателю в а
rem a -- освобождение памяти (rem/free() использовать нужно только для таких значений, которые не соберет сборщик)

Поделиться

4

Re: Ошибки компиляции тестов

кстати у меня неожиданно на ноутбуке (win10 64bit) змейка заработала

Основатель организации World of Legends и создатель одноимённого языка

Сайт snaulX

Поделиться

5

Re: Ошибки компиляции тестов

а уже нет. Она то работает то нет. Я даже код смотрел (валиден). В чём может быть проблема?

Основатель организации World of Legends и создатель одноимённого языка

Сайт snaulX

Поделиться

6

Re: Ошибки компиляции тестов

RoPi0n пишет:

... сделать язык лучше и переименовал booltostr() в b2s()....

Не плохо бы сделать отдельную ветку по свежим измениям в компиляторе
и самом языке, и возможно обсуждением каких-либо идей...

Windows 7 32-bit

Поделиться