Есть небольшой прогресс.
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-код файлов, лучше бы узнать о уже готовых стандартах для пересылки данных для вычислений.