c0 png
(62.38 KB, 1282x712)
c1 png
(25.09 KB, 539x559)
eto sonic? jpg
(90.4 KB, 1280x720)
Недавно я осознал, в моей же архитектуре Иколайси слои абстрации перемешаны!
Слой парсинга напрямую обращается к слою препроцессинга (когда именованый тип или темплейты там).
Я уже где-то 5 лет программирую (поздно вошёл), а архитектуры нормальные так и не научился выдумывать. Теперь перед каждой разработкой ПО было бы неплохо сидеть, на бумажке писать. Надо научиться нормальные архитектуры, а то что я как дурак сижу?
Но в новой архитектуре, которую я придумал, тоже есть странности. Получается, и препроцессинг и большая часть парсинга находится на одном слое. Там они вызывают друг друга при темплейтировании/именованых типов и варят единый токенокод. Затем идёт второй слой абстракции, который берёт токенокод и преобразовывает снова в токенокод! Ну, ещё ошибка всякие выискивает... А надо заново преобразовывать, так как перед компиляцией всякие forы и тензорные операции (z[:][:] = x[:][:] + y[:][:]) преобразуются в while-цикл. Надо будет сделать возможность указывать, какие штуки преобразовывать в другие. То есть, векторные операции для условных интов и флоатов в вайл не надо, его можно через LLVM IR векторными операциями принять. Это когда операция большей размерности или это неэлементарный тип и каждый раз вызывается перегруженная функция.
Ну а третий слой абстракции просто компилирует токенокод в LLVM IR, а оттуда ELF, EXE, etcFF или в процесс (что я называет интерпретированием кода в процесс. Поэтому Иколайси — интерпретер-компилер оф лайси)
Ввёл почти ничего. typeof, например. Ради него и проивзодился прошлый переход на новую часть архитектуры. Когда, чтобы получить результирующий тип операнда, не его компилировать в LLVM IR.
Но всё-равно, выглядит странно. Чтобы получить тип члена, надо декларировать переменную. Бзе тайпофа не получится нормальные темплейты делать (даже liblaisiшные функции max, min, argmax, argmin).
С import я повременил. Начал писать плохой код, мотивация пропала и я перестал писать плохой код.
Чего-то там с тензорными операциями сделал. Снова ввёл, пару часов пытался решить баг, которого не существует.