crypt of decay - urforth ещё пыхтит [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

urforth ещё пыхтит [Oct. 1st, 2020|05:37 am]
Previous Entry Add to Memories Tell A Friend Next Entry
[Tags|]

нашёл мощный баг в ассемблере (забыл, что imm8->imm32 делает sign extend, лол). к счастью, это особо нигде не проявлялось. также ассемблер считал, что «mov eax,imm8» лучше конвертировать в спецформу «imm32» для eax, а не оставлять imm8. не баг per se, просто можно команду короче сочинить.

перевёл почти все места, где сидели defer-хуки на scattered colon от Майка Гассаненко, это намного удобней.

: init-smth ... ;
..: init-smth some-init-code ;..
..: init-smth some-other-init-code ;..
( и так сколько угодно раз )


ошибки кидаются через throw, так что TLOAD/INCLUDE теперь может освободить память, куда прочитало файл, даже если что-то пошло не так. в честь чего перевёл всё, что использовало temp-pool, на обычный mmap. заодно добавил нормальный список директорий для поиска исходника.

также реализовал user area (в форте так называют TLS). через CLONE_SETTLS/set_thread_area, и регистр FS (потому что GS занят либцой, например). документация по этому делу отвратительная, в основном в виде: «а вот этот флаг нужен для библиотек, которые реализуют потоки. а тебе не нужен, потому что ты быдло.» кое-что пришлось угадывать, а кое за чем сходил в мусли. естественно, либца от факта, что на свете бывают потоки не через птреды, охуевает, и попытка сделать printf из фортового потока приводит к сегфолту. ну, не сильно и хотелось.

с удивлением обнаружил, что моя печаталка-парзилка флоатов делает раундтрип для f32. этих f32 немного, так что я тупо их циклом проверил. ну как «моя»… тупорылый парзер я сделал сам, а REPRESENT спиздил из другой системы, которая тоже его спиздила.

докинул два прнг в ядро (pcg32, bob jenkins' small), и ещё несколько в libs/ (включая ISAAC). хотел отправить исаака на розетту (временное помутнение разума), но там надо регистрироваться, так что не стал, и переписал его на асме.

также сделал кучу опций для метакомпилятора, включая возможность вырубить генерацию дебаг-инфы, отрубить TLS, и собирать статические бинарники. заодно добавил в мету простую работу со словарями, и поуносил разные куски в разные словари. (ужасно неудобно, кстати, писать об этом на русском: потому что dictionary и vocabulary — вещи разные, но не называть же второе «словарный запас»? а нормального термина никто так и не придумал.)

естественно, до написания кросс-компилятора на Z80, и создания Репла Мечты — так пока и не добрался. алсо, размышляю, форкать ли метакомпилятор и пилить отдельно Z80, или как-то получше его разбить и абстрагировать то, что ещё не, и вмонтировать кросс в то, что есть. тащемта, форк пока выглядит привлекательней.

также положил в libs/ две реализации ооп: очень простую, размером меньше килобайта, и посложнее, килобайт на десять, но с поддержкой приватных пространств имён и обращения к полям/методам внутри определений методов как к обычным форт-словам. реально это (ооп) нужно только чтобы делать всякие гуёвины, конечно. потом пригодится — когда сделаю бинды к иксам, например. более сложный вариант сделан через хук в interpret — но это не обязательно, на самом деле: можно было чисто стандартными wordlists обойтись. было бы даже покрасивей. но лень.

в связи с увеличившимся объёмом кода пересборка занимает примерно 230 мсек (примерно 150 без отладчика). всё ещё чуть быстрее, чем сборка минимальной l0-системы (даже без if/colon) фасмом. и не требует 30 мегабайт RAM.


ну да, я немного упоролся: вспомнил, что писать код может быть просто и весело. особенно если забить на идиотские мифы про «портабельность» и «кроссплатформенность».
Linkmeow!

Comments:
From:(Anonymous)
Date:October 4th, 2020 - 05:01 am
(Link)
dictionary - словарь, а vocabulary - лексикон %-)
ещё есть прямое заимствование: вокабуляр.

/ЧД/
[User Picture]
From:[info]ketmar
Date:October 4th, 2020 - 05:23 am
(Link)
>лексикон
какой отвратительный редактор!

спасибо, да.