Size: a a a

Compiler Development

2021 April 04

DF

Dollar Føølish in Compiler Development
А у сишарпа для такого компилятор небольшой класс колхозит на месте захвата
источник

МБ

Михаил Бахтерев... in Compiler Development
Динамичность особой роли не играет. Это механизмы для каррирования и замыканий. Окружение - это некоторая структура данных. Можно и классом оформить, если дригих средств нет под рукой.
источник

АП

Антон Пилипчук... in Compiler Development
MrSmith
Для отката обычно делают так, делаешь у парсера поле в которое сохраняешь позицию файла, потом если неверно пошло, устанавливаешь позицию лексера в него и идёшь по другой ветке
У меня лексический и синтаксический анализ независимы.

Результатом лексического анализа является последовательность токенов.

Ссылка на эту последовательность передаётся синтаксическому анализатору, который по ней перемещается и строит AST.

Я не представляю как в моём случае использовать подход о котором вы пишете.

я уже пробовал использовать LR(1), в моём случае сложность возрастает минимум на порядок. Возможно потому что у меня PEG.
источник

TS

Timur Safin in Compiler Development
[BRM]White Rabbit
был там, но те приняли раст
Это было 1 апреля
источник

卜根 in Compiler Development
Dollar Føølish
А у сишарпа для такого компилятор небольшой класс колхозит на месте захвата
но ведь классы появились из замыканий (записей активации), вот и совершили полный круг
источник

M

MaxGraey in Compiler Development
MaxGraey
Оптимизиций не бывает много. Да они бывают медленные иногда конфликтуют между собой (это можно решить тем же E-Graphs и здесь есть куда развиваться). Но нужно так же учитывать, что языки сейчас довольно высокоуровневые и стараются быть детерминированными и безопасными, поэтому появился новый класс оптимизаций и анализов например Shape Analysis, Escape Analysis, Bounds Check Elimination and Range Analysis. Ну и постоянно добавляются новые =)

Насчет более низкоуровневых оптимизаций. Например до сих пор я так и не увидел достаточно интерестных оптимизаций с плавающей точкой с более точной регуляций потери точности (fast-math честно говоря такое себе решение). Кое какие наработки есть в совокупности с Affine Arithmetics (AA) но вся эта тема до сих пор не раскрыта как мне кажется

Потом автовекторизация. LLVM и GCC худо-бедно автовекторизируют циклы и gather/scater операции, но относительно слабо справляются с редукциями
Вот кстати еще один пример того, что даже оптимизация условных переходов могла бы быть улучшена. Вручную оптимизированный вариант не имеет ветвлений только у LLVM
https://godbolt.org/z/WsPraGeeo

Ну и тот факт что ни один компилятор не додумался сам использовать подсчет лидирующих битов тоже говорит о том, что еще есть куда расти)
источник

[

[BRM]White Rabbit in Compiler Development
卜根
но ведь классы появились из замыканий (записей активации), вот и совершили полный круг
А в cil на верхнем уровне только классы/структуры/интерфейсы/делегаты/енамы существовать могут
источник

AK

Andrei Kurosh in Compiler Development
[BRM]White Rabbit
А в cil на верхнем уровне только классы/структуры/интерфейсы/делегаты/енамы существовать могут
Это не CIL, это CLI Metadata
источник

卜根 in Compiler Development
[BRM]White Rabbit
А в cil на верхнем уровне только классы/структуры/интерфейсы/делегаты/енамы существовать могут
гипотетически могли бы и замыкания 20го века тоже быть, они не верхнего уровня, они с методами ассоциированы, а методы, так уж и быть, могут лежать в якобы классах
источник

AK

Andrei Kurosh in Compiler Development
卜根
гипотетически могли бы и замыкания 20го века тоже быть, они не верхнего уровня, они с методами ассоциированы, а методы, так уж и быть, могут лежать в якобы классах
Зачем плодить сущности, которые отлично выражаются существующими возможностями?
источник

卜根 in Compiler Development
не отлично
источник

卜根 in Compiler Development
замыкания 20го века это просто ссылка на стек, это в них меньше сущностей
источник

AK

Andrei Kurosh in Compiler Development
Мы все еще про настоящий дотнет говорим или про какой-то абстрактный рантайм вашей мечты? В настоящем дотнете с первой версии были классы и методы, а лямбды с замыканиями добавились в 3.0, поэтому какими бы простыми ни были «замыкания 20 века», для рантайма это потребовало бы доработку, а существующая реализация не потребовала
источник

卜根 in Compiler Development
про записи активации, классы и умножение сущностей
источник

卜根 in Compiler Development
и что значит, добавились в 3.0? если это выразимо через классы 1.0, любой язык программирования может это использовать и в 1.0
источник

[

[BRM]White Rabbit in Compiler Development
Неожиданно, но оно и привязано к версии шарпов🌚
источник

卜根 in Compiler Development
а при чём здесь C#?
источник

[

[BRM]White Rabbit in Compiler Development
Ну, вы спросили, при чём тут рантайм, если это может быть реализовано на уровне языка. Ну я и ответил, что это и реализовано на уровне языка
источник

DF

Dollar Føølish in Compiler Development
Емнип дотнет 3.5 использует рантайм от 2.0
источник

DF

Dollar Føølish in Compiler Development
Так что лямбды а этом плане не требуют чего то особенного кроме дженериков
источник