Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Динамическая компиляция

49K
21 июля 2009 года
VDIGIT
4 / / 21.07.2009
Народ, есть среди вас те кто занимался этим вопросом ?
29K
21 июля 2009 года
Ander Skirnir
109 / / 08.06.2009
Смотря на чём. Если C++ .net или C#, то есть кода дом и лямбды.
5
21 июля 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Ander Skirnir
Смотря на чём. Если C++ .net или C#, то есть кода дом и лямбды.

В Nemerle есть Nemerle.Evaluation.Evaluator, который вообще компилятор подгружает - аналог eval() в динамических языках.
http://habrahabr.ru/blogs/nemerle/48945/

29K
21 июля 2009 года
Ander Skirnir
109 / / 08.06.2009
Цитата: hardcase
В Nemerle есть Nemerle.Evaluation.Evaluator, который вообще компилятор подгружает - аналог eval() в динамических языках.
http://habrahabr.ru/blogs/nemerle/48945/



Только сейчас прочитал, что такое Nemerle и описание очень впечатлило. Но не совсем понятно, зачем в этом примере используют всякие eval'ы - разве, будь код близок к следующему, оно бы не скомпилило в ф-цию ?:

 
Код:
def function = x => x + 1.0 :> double->double;


Спрашиваю, потому что в лямбдах .net оно выглядит так:
 
Код:
Func<double,double> func = x => x + 1.0;
5
21 июля 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Ander Skirnir
не совсем понятно, зачем в этом примере используют всякие eval'ы - разве, будь код близок к следующему, оно бы не скомпилило в ф-цию ?

Потому что это типичный пример динамической компиляции.
На месте строки, определяющей функцию можно поставить любой исполнимый код (для многострочных строк - какой каламбур - использую нотацию шаблонизатора <# #> ):

Код:
using System;
using System.Console;
using Nemerle.Utility;
using Nemerle.Evaluation.Evaluator;

module Program {
   
    Main() : void {
        def text = EvaluateExpression(
        <#
            def s = System.Text.StringBuilder();
           
            foreach(n in [1 .. 5])
                _ = s.Append($"$n : '$(System.Console.ReadLine())' ");
           
            s.ToString()
        #>) :> string;
       
        WriteLine(text);
       
        _ = ReadLine();
    }
}


З.Ы. Класс скомпилировать Evaluator'ом вродебы нельзя... хотя теоретически там возможно всё - какнибудь покопаюсь в его кишках, там интересные вещи есть. :)
5
21 июля 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Ander Skirnir
в лямбдах .net оно выглядит так:
 
Код:
Func<double,double> func = x => x + 1.0;


В Nemerle тоже самое вяглядит несколько лаконичнее:

 
Код:
def func(x) { x + 1.0 }
Но речь все же шла о динамической компиляции.


Помимо честной динамической компиляции, вроде bltookit, существует также пост-процессинг сборок на уровне MSIL, осуществляемый в PostSharp - это практический потолок метапрограммирования средствами C#. С позиции макросов Nemerle эта "технология" уныла чуть более чем полностью.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог