🔥

Тред (@shelajev)


ворри нот, так сказать! дерево в процессе соберет информацию (интепретатор конечно, не само дерево) и сначала пропагирует информацию про типы данных в программе там, стринги, инты и прочее, а потом выполнится частичное вычисление. pic.twitter.com/85SGPDV2bc
Частичные вычисления (partial evaluation) это очень крутая концепция, не новая, но крутая. Сейчас попробую на пальцах описать twitter.com/jsunderhood/st…

У программы есть 2 вида вводных данных, статические и динамические. Например конфигурация базы данных которая на старте задается - скорее статический (я знаю что можно поменять, но сейчас не про это), а ввод от пользователя - динамический.

Пусть у нас есть программа -- специализатор, которая может взять программу, ее статические вводные и выдать программу которая будет работать как же как оригинальная на любых динамических вводных. наподобие: f (s , d) = { ... } f' = spec ( f, s )f' (d) теперь равно f (s , d)

вот здесь с картинками хорошо объяснено: blog.sigfpe.com/2009/05/three-…

для тех кто не тыкает в ссылки, представим, что вот в примере выше - f - это интерпретатор, s - наш JS, d - инпут нашей программе на JS. Если есть spec -- то можно получить программу, которая будет смесью интерпретатора и JS кода -- это то, что происходит в рантайме в граальвм

потом эта смесь отдается джиту и все становится вменяемо быстро (или не становится, тут уж с какой стороны посмотреть на это)

если применить spec (spec, f) = то получится компилятор

но сейчас такого нет, тут нужно много новой работы проделать и научной и инженерной чтоб выяснить может ли такая конструкция взлететь для языков программирования используемых в индустрии. например JS.