Есть небольшой прогресс. Laisi код u8 a := 5; func (u8,[u32 c0,f32e8 c1]) main := { u8 a := 8 + 5; }; преобразуется в репрезентованный laisi-байткод: u8 @0 := 0x5 func(u8,[u32 %0,f32e8 %1]) @1 := { %2 := 0x8 + 0x5; %3 := alloc u8 := %2; } То есть сложные операции разделяются на простые. После, этот байткод может быть послан в бекенд — компилятор для LLVM, а из LLVM в следующий бекенд — компилятор LLVM, который преобразует LLVM-биткод в машинный код и микрокод, а микрокод пойдёт в следующий бекенд — экзекутор микрокода в процессоре. Но я не сделал всё в операциях, если будет a := (5 + 3) + (8 - 2), то зачем выполнять последовательно (5 + 3), затем (8 - 2) и, наконец, результат0 + результат1 если выполнение в скобках можно распараллелить? А мой ЯП поддерживает параллельные инструкции. Это может быть полезно для всяких будущих VLIW-архитектур, а может быть и для современных SIMD-инструкций. Но вообще для SIMD-инструкций в моём ЯП подходят операции по типу a[:] := (b[:] + c[:])*d[:] - e[:] То есть загружаем в какой-нибудь xmm b, c и d, добавляем в b c, умножаем на d, загружаем e и отнимаем e от b. Повторить N/S + !!(N%S) раз, где N — количество субоперандов, S — размер регистра в элементах для данного типа. Но у меня нет XPренса по программированию с SIMD. Благодаря тому, что мой ЯП — набор переменных и экстернов, компиляцию тоже можно распараллелить. Когда перепишу icolaisi на laisi, надо будет сделать тип контекста в котором будут данные о локальных переменных. Сначала прочекать все глобальные переменные и начать компиляцию инструкций параллельно через each-конструкцию laisi. Чем больше ядер в процессоре или компьютеров в кластере, тем быстрее будет происходить компиляция, как и исполнение. Мне надо ещё придумать как кластеризовывать интепретацию laisi-код файлов, лучше бы узнать о уже готовых стандартах для пересылки данных для вычислений.