crypt of decay - Post a comment [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

sxed, скриптодвижок Oct. 1st, 2022|03:09 pm

ketmar
поскольку оригинальное намерение «чуть-чуть подпилить, может потом вернуть во флайтгир» давно уже накрылось всеми возможными тазами, то я не вижу смысла больше тащить 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`.
Link Read Comments

Reply:
From:
(will be screened)
Identity URL: 
имя пользователя:    
Вы должны предварительно войти в LiveJournal.com
 
E-mail для ответов: 
Вы сможете оставлять комментарии, даже если не введете e-mail.
Но вы не сможете получать уведомления об ответах на ваши комментарии!
Внимание: на указанный адрес будет выслано подтверждение.
Username:
Password:
Subject:
No HTML allowed in subject
Message: