sxed, скриптодвижок |
Oct. 1st, 2022|03:09 pm |
поскольку оригинальное намерение «чуть-чуть подпилить, может потом вернуть во флайтгир» давно уже накрылось всеми возможными тазами, то я не вижу смысла больше тащить nasal. не, nasal крутой, но один фиг с моими дополнениями он вырос с 300 кб до 700+, и уже нифига не совместим с оригиналом ни по апи, ни по синтаксису.
поэтому было принято волевое решение тупо написать новое скриптодвигло с нуля. от старого останется GC (который я один фиг полностью переписал, так что технически GC тоже новый), а всё остальное — заново. будет регистровая машина вместо стековой, возможно комбинированые хэшемассивы (как в Lua), и относительно оптимизирующий компилятор.
собственно, technical alpha уже празит код, оптимайзит AST, генерит более-менее плотный 3-op VM code, и даже его выполняет. естественно, будут нормальные вложеные функции и замыкания (парзер их уже понимает, и кодоген тоже). оно уже вполне в состоянии свернуть вот такое:
const a = 10, b = 69, c = a+b; if (с) 42; else if (b) 69; else 666;
до просто `42` (и не создавать локалы для констант вообще).
натурально, за счёт регистровой VM и отказа от хэшей для хранения локалов новое двигло будет значительно быстрее (иначе какой смысл было всё это затевать). не то чтобы скорость имела какое-то решающее значение, но приятно. опять же: испытаный в реальном проекте движок всенепременно пригодится где-то ещё.
а, и само собой — нормальный lexical scoping. чтобы любителям жабоскрипта было больнее, `var` остался, но теперь работает как `let` . |
|