thumbnail of c0.png
thumbnail of c0.png
c0 png
(62.38 KB, 1282x712)
thumbnail of c1.png
thumbnail of c1.png
c1 png
(25.09 KB, 539x559)
thumbnail of c2.png
thumbnail of c2.png
c2 png
(87 KB, 922x922)
thumbnail of eto sonic?.jpg
thumbnail of eto sonic?.jpg
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 я повременил. Начал писать плохой код, мотивация пропала и я перестал писать плохой код.
Чего-то там с тензорными операциями сделал. Снова ввёл, пару часов пытался решить баг, которого не существует.