Подумалось тут. Есть ли такой язык\технология, который мог бы в рантайме, пользуясь шаблоном кода (один) и правилами обработки данных (много разных), получать код для обработки именно необходимых данных? потом в рантайме запустить полученный код, отработать и выдать результат?
Здравствуйте, Alexey Voytsehovich, Вы писали:
AV>Подумалось тут. Есть ли такой язык\технология, который мог бы в рантайме, пользуясь шаблоном кода (один) и правилами обработки данных (много разных), получать код для обработки именно необходимых данных? потом в рантайме запустить полученный код, отработать и выдать результат?
Наверно подойдет любой язык с мощным метапрограммированием например лисп.
Ну и другой подход Суперкомпиляция когда все это делается автоматом, гуглить рефал.
Здравствуйте, FR, Вы писали:
FR>Здравствуйте, Alexey Voytsehovich, Вы писали:
AV>>Подумалось тут. Есть ли такой язык\технология, который мог бы в рантайме, пользуясь шаблоном кода (один) и правилами обработки данных (много разных), получать код для обработки именно необходимых данных? потом в рантайме запустить полученный код, отработать и выдать результат?
FR>Наверно подойдет любой язык с мощным метапрограммированием например лисп.
а .Net или Embacadero Prism? Или даже так — по каким ключевым словам надо гуглить и проверять возможность такого в языке?
FR>Ну и другой подход Суперкомпиляция когда все это делается автоматом, гуглить рефал.
Здравствуйте, Alexey Voytsehovich, Вы писали:
AV>а .Net или Embacadero Prism? Или даже так — по каким ключевым словам надо гуглить и проверять возможность такого в языке?
По наличию функции eval (в .Net можно компилировать и выполнять сгенерированный в рантайме исходный код, пользуясь System.CodeDom.Compiler и рефлексией). В Lisp и Clojure eval принимает код не в виде строки, а в виде данных, поэтому, для генерации исполняемого в рантайме кода можно использовать все возможности Лиспа для обработки данных.
Здравствуйте, Alexey Voytsehovich, Вы писали:
AV>а .Net или Embacadero Prism? Или даже так — по каким ключевым словам надо гуглить и проверять возможность такого в языке?
Nemerle. http://rsdn.ru/forum/nemerle/
Есть мощьное метапрограммирование.
Компилятор можно запускать в рантайме.
Плюс статическая типизация, вывод типов и много других плюшек.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Alexey Voytsehovich, Вы писали:
AV>Подумалось тут. Есть ли такой язык\технология, который мог бы в рантайме, пользуясь шаблоном кода (один) и правилами обработки данных (много разных), получать код для обработки именно необходимых данных? потом в рантайме запустить полученный код, отработать и выдать результат?
это странное называется higher-order functions и является ключевой частью ФП
Здравствуйте, BulatZiganshin, Вы писали:
BZ>Здравствуйте, Alexey Voytsehovich, Вы писали:
AV>>Подумалось тут. Есть ли такой язык\технология, который мог бы в рантайме, пользуясь шаблоном кода (один) и правилами обработки данных (много разных), получать код для обработки именно необходимых данных? потом в рантайме запустить полученный код, отработать и выдать результат?
BZ>это странное называется higher-order functions и является ключевой частью ФП
ну радует хоть не чтото ненормальное в голову пришло
Здравствуйте, BulatZiganshin, Вы писали:
BZ>Здравствуйте, Alexey Voytsehovich, Вы писали:
AV>>Подумалось тут. Есть ли такой язык\технология, который мог бы в рантайме, пользуясь шаблоном кода (один) и правилами обработки данных (много разных), получать код для обработки именно необходимых данных? потом в рантайме запустить полученный код, отработать и выдать результат?
BZ>это странное называется higher-order functions и является ключевой частью ФП
Это есть почти во всех языках программирования. Я думаю, автор имел ввиду метапрограммирование в рантайме, что уже не является ключевой особенностью ФП.
BulatZiganshin wrote:
> это странное называется higher-order functions и является ключевой частью ФП
Нет, это не совсем оно, возможно это более частный случай, либо вообще
никак не связано с higher-order functions. Если конечно автор действительно
хочет в рантайме генерировать код и потом его исполнять.
Здравствуйте, MasterZiv, Вы писали:
MZ>BulatZiganshin wrote:
>> это странное называется higher-order functions и является ключевой частью ФП
MZ>Нет, это не совсем оно, возможно это более частный случай, либо вообще MZ>никак не связано с higher-order functions. Если конечно автор действительно MZ>хочет в рантайме генерировать код и потом его исполнять.
да. именно в рантайме сгенерировать и потом выполнить
Здравствуйте, Alexey Voytsehovich, Вы писали:
>>> это странное называется higher-order functions и является ключевой частью ФП
MZ>>Нет, это не совсем оно, возможно это более частный случай, либо вообще MZ>>никак не связано с higher-order functions. Если конечно автор действительно MZ>>хочет в рантайме генерировать код и потом его исполнять.
AV>да. именно в рантайме сгенерировать и потом выполнить
Здравствуйте, BulatZiganshin, Вы писали:
BZ>Здравствуйте, Alexey Voytsehovich, Вы писали:
>>>> это странное называется higher-order functions и является ключевой частью ФП
MZ>>>Нет, это не совсем оно, возможно это более частный случай, либо вообще MZ>>>никак не связано с higher-order functions. Если конечно автор действительно MZ>>>хочет в рантайме генерировать код и потом его исполнять.
AV>>да. именно в рантайме сгенерировать и потом выполнить
BZ>ну а HOF создают в рантайме не код, а функции
а чем тогда можно именно код генерировать? к примеру для .net есть чтото такое?
Здравствуйте, BulatZiganshin, Вы писали:
BZ>Здравствуйте, Alexey Voytsehovich, Вы писали:
AV>>а чем тогда можно именно код генерировать? к примеру для .net есть чтото такое?
BZ>а для тебя имеет значение — код создаётся или функции? проблема в скорости?
проблема в том что эта область мне совершенно не известна и каждое слово нет сбивает с толку
вы не могли бы ткнуть в инете на любой пример на дотнет который генерирует код\метод на лету и его выполняет?
AV>вы не могли бы ткнуть в инете на любой пример на дотнет который генерирует код\метод на лету и его выполняет?
var p = Expression.Parameter(typeof(int), "i");
var x = Expression.Lambda<Func<int, int>>(Expression.Multiply(Expression.Constant(2), p), new[] { p });
var mul2 = x.Compile(); // компилируемreturn mul2(10); // результат - 20