Size: a a a

2020 April 17

EG

Emmanuel Goldstein in rust_offtopic
Так у меня нет бинкода.
источник

EG

Emmanuel Goldstein in rust_offtopic
У меня есть struct Value, который представляет из себя значение моего лиспа
источник

p

polunin.ai in rust_offtopic
Хех
источник

EG

Emmanuel Goldstein in rust_offtopic
Я на него навешу #[derive(Serialize)] и вот мой бинкод
источник

p

polunin.ai in rust_offtopic
Я пытался дерево запускать, вышла хуйня. Хотя у меня другой немного кейс был.
источник

EG

Emmanuel Goldstein in rust_offtopic
(На самом деле, мне придётся тут в нескольких местах поизощряться, чтобы Serde работал правильно, но суть такова)
источник

p

polunin.ai in rust_offtopic
Сделал компиляцию в байт код и заебись стало, красиво
источник

DS

Doge Shibu in rust_offtopic
Emmanuel Goldstein
Всё, что можем выполнять заранее — выполняем заранее и дампаем получившийся AST в файл.
Так это partial evaluation, про него куча литературы и статей есть.
источник

p

polunin.ai in rust_offtopic
Doge Shibu
Так это partial evaluation, про него куча литературы и статей есть.
Это называется оптимизации🤔
источник

DS

Doge Shibu in rust_offtopic
polunin.ai
Это называется оптимизации🤔
Нет, оптимизации есть много разных.

Partial evaluation - одна из них, когда для данной функции мы фиксируем известные на этапе компиляции аргументы и делаем её специализированную версию под них
источник

DS

Doge Shibu in rust_offtopic
Практически все компиляторы сейчас это умеют, но в достаточно ограниченном объеме
источник

DS

Doge Shibu in rust_offtopic
Хочется, чтобы умели полностью
источник

EG

Emmanuel Goldstein in rust_offtopic
Я предполагаю следующий порядок исполения:
1. Берём на исполнение любое значение языка
2. Если оно помечено как raw, то оставляем как есть
3. Если оно не список, то оставляем как есть
4. Если оно помечено как sequential, то последовательно заменяем элементы списка на результаты их исполнения
5. В противном случае параллельно (в тредпуле) заменяем элементы списка на результаты их исполнения
6. Трактуем нулевой элемент полученного списка как функцию и применяем её к всем остальным элементам.
источник

А⚙

Антон ⚙️ in rust_offtopic
Alex Zhukovsky
откуда по-твоему скалисты на проектах появляются? Почкованием?
Да
источник

p

polunin.ai in rust_offtopic
Doge Shibu
Нет, оптимизации есть много разных.

Partial evaluation - одна из них, когда для данной функции мы фиксируем известные на этапе компиляции аргументы и делаем её специализированную версию под них
Если говорить про то что сказал Эмануил, это конст фолдинг, тут ничего запускать не надо
источник

А⚙

Антон ⚙️ in rust_offtopic
Emmanuel Goldstein
Мой концепт — выполнять как можно больше в фазе «прекомпиляции». Скажем, если у нас есть программа вида:
(+ 2 3 (parseInt (readLine))
то мы можем пройтись по всем её аргументам, сделав их сырыми:
(+ '2 '3 '(parseInt (readLine))
и выполнить макрос (+.optimize), который преобразует этот список в
(+ 5 (parseInt (readLine)))
Поздравляю, ты переизобрёл constant folding
источник

EG

Emmanuel Goldstein in rust_offtopic
Doge Shibu
Нет, оптимизации есть много разных.

Partial evaluation - одна из них, когда для данной функции мы фиксируем известные на этапе компиляции аргументы и делаем её специализированную версию под них
Я хочу дать возможность программисту определить для любой функции f макрос f.optimize, который принимает на вход список вида (f arg1 arg2 arg3) и возвращает новый список, которым будет заменён предыдущий.
источник

p

polunin.ai in rust_offtopic
Хрень какая-то
источник

AZ

Alex Zhukovsky in rust_offtopic
Антон ⚙️
Поздравляю, ты переизобрёл constant folding
это сложнее чем констант фолдинг
источник

AZ

Alex Zhukovsky in rust_offtopic
например цикл for от 0 до 5 заменить на анроллинг тела цикла, это не констант фолдинг внезапно
источник