LINUX.ORG.RU

История изменений

Исправление dissident, (текущая версия) :

Например, когда компилятор встречает лямба выражение которое приводится к типу Expression<T> вместо фактической компиляции он генерирует код, который создаёт expression описывающий соответствующую лямбду. В момент выполнения созданный expression можно странслировать в другой язык, например в SQL. Получаем цепочку преобразований: C# -> Expression Tree -> SQL

Т.е. правильно ли я понимаю, что LINQ - это компромисс? Вместо того, чтобы компилировать лямбды прямо в целевой байткод (я не имею ввиду, что во время компиляции нету промежуточного этапа представления лямбд в виде AST, я имею ввиду, что конечным результатом работы компилятора является не байткод, а AST) они «компилируются» в AST и таки да, кладутся в DLL в виде громоздкого AST?

Если так то:

1. Так же ли работает IronPython? «Компилируется» ли он в DLL в виде AST?

2. Почему Groovy, Scala и прочие JVM языки не используют такое решение, а компилируются в байткод?

3. Почему в стандартной библиотеке Явы нету механизма представления конструкций языка в виде AST?

Исправление dissident, :

Например, когда компилятор встречает лямба выражение которое приводится к типу Expression<T> вместо фактической компиляции он генерирует код, который создаёт expression описывающий соответствующую лямбду. В момент выполнения созданный expression можно странслировать в другой язык, например в SQL. Получаем цепочку преобразований: C# -> Expression Tree -> SQL

Т.е. правильно ли я понимаю, что LINQ - это компромисс? Вместо того, чтобы компилировать лямбды прямо в целевой язык (я не имею ввиду, что во время компиляции нету промежуточного этапа представления лямбд в виде AST, я имею ввиду, что конечным результатом работы компилятора является не байткод, а AST, т.е. они «компилируются» в AST и таки да, кладутся в DLL в виде громоздкого AST?

Если так то:

1. Так же ли работает IronPython? «Компилируется» ли он в DLL в виде AST?

2. Почему Groovy, Scala и прочие JVM языки не используют такое решение, а компилируются в байткод?

3. Почему в стандартной библиотеке Явы нету механизма представления конструкций языка в виде AST?

Исправление dissident, :

Например, когда компилятор встречает лямба выражение которое приводится к типу Expression<T> вместо фактической компиляции он генерирует код, который создаёт expression описывающий соответствующую лямбду. В момент выполнения созданный expression можно странслировать в другой язык, например в SQL. Получаем цепочку преобразований: C# -> Expression Tree -> SQL

Т.е. правильно ли я понимаю, что LINQ - это компромисс? Вместо того, чтобы компилировать лямбды прямо в целевой язык, они «компилируются» в AST и таки да, кладутся в DLL в виде громоздкого AST?

Если так то:

1. Так же ли работает IronPython? «Компилируется» ли он в DLL в виде AST?

2. Почему Groovy, Scala и прочие JVM языки не используют такое решение, а компилируются в байткод?

3. Почему в стандартной библиотеке Явы нету механизма представления конструкций языка в виде AST?

Исправление dissident, :

Например, когда компилятор встречает лямба выражение которое приводится к типу Expression<T> вместо фактической компиляции он генерирует код, который создаёт expression описывающий соответствующую лямбду. В момент выполнения созданный expression можно странслировать в другой язык, например в SQL. Получаем цепочку преобразований: C# -> Expression Tree -> SQL

Т.е. правильно ли я понимаю, что LINQ - это компромисс? Вместо того, чтобы компилировать лямбды прямо в целевой язык, они «компилируются» в AST и таки да, кладутся в DLL в виде громоздкого AST?

Если так то:

1. Так же ли работает IronPython? «Компилируется» ли он в DLL в виде AST?

2. Почему Groovy, Scala и прочие JVM языки не используют такое решение, а компилируются в байткод?

Исходная версия dissident, :

Например, когда компилятор встречает лямба выражение которое приводится к типу Expression<T> вместо фактической компиляции он генерирует код, который создаёт expression описывающий соответствующую лямбду. В момент выполнения созданный expression можно странслировать в другой язык, например в SQL. Получаем цепочку преобразований: C# -> Expression Tree -> SQL

Т.е. правильно ли я понимаю, что LINQ - это компромисс? Вместо того, чтобы компилировать лямбды прямо в целевой язык, они «компилируются» в AST и таки да, кладутся в DLL в виде громоздкого AST?

Если так то:

1. Так же ли работает IronPython? «Компилируется» ли он в DLL в виде AST? 2. Почему Groovy, Scala и прочие JVM языки не используют такое решение, а компилируются в байткод?