Подумалось тут. Есть ли такой язык\технология, который мог бы в рантайме, пользуясь шаблоном кода (один) и правилами обработки данных (много разных), получать код для обработки именно необходимых данных? потом в рантайме запустить полученный код, отработать и выдать результат?
Здравствуйте, 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
Здравствуйте, WolfHound, Вы писали:
WH>Nemerle. http://rsdn.ru/forum/nemerle/ WH>Есть мощьное метапрограммирование. WH>Компилятор можно запускать в рантайме. WH>Плюс статическая типизация, вывод типов и много других плюшек.
Плюс реально работает под дотнетом, а не сделан и забыт как большая часть диалектов лиспа адаптированных к дотнету.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Aleх, Вы писали:
AV>>>Подумалось тут. Есть ли такой язык\технология, который мог бы в рантайме, пользуясь шаблоном кода (один) и правилами обработки данных (много разных), получать код для обработки именно необходимых данных? потом в рантайме запустить полученный код, отработать и выдать результат?
A>Это есть почти во всех языках программирования. Я думаю, автор имел ввиду метапрограммирование в рантайме, что уже не является ключевой особенностью ФП.
Кстати, почему в рантайме? Автор вопроса сказал "потом в рантайме запустить полученный код". Это как раз отлично проходит под метопрограммирование во время компиляции и запуск результата в рантайме.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Я вот тоже не верю. Я знаю что они существуют, но так же знаю что они не способны решить всех проблем при программировании. VD>Автор вопроса выражается сумбурно, но похоже ему нужно метапрограммирование, а не функции высшего порядка, которые к слову, есть и в C#.
Там кривые.
Вообще, надо смотреть конкретную задачу, решат её HOF или нужна тяжёлая артиллерия в лице МП.
Здравствуйте, lomeo, Вы писали:
VD>>Автор вопроса выражается сумбурно, но похоже ему нужно метапрограммирование, а не функции высшего порядка, которые к слову, есть и в C#.
L>Там кривые.
Да ладно.
L>Вообще, надо смотреть конкретную задачу, решат её HOF или нужна тяжёлая артиллерия в лице МП.
+1 Но я надеюсь автор понимает что ему нужно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, lomeo, Вы писали:
L>"Кривые" неверное слово, каюсь. Неудобные.
Да обычные они. Не хуже чем в других языках. Там сам язык плохо приспособлен для функционального программировния, так как есть деление на expressions и statments, плюс сахара маловато конечно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, BulatZiganshin, Вы писали:
>>>> ну а HOF создают в рантайме не код, а функции MZ>>>Я бы так не сказал. L>>Почему? BZ>он не верит в существование first-class functions
Элементарный пример: пользователь вводит код с клавиатуры. Или сами данные являются произвольным кодом для исполнения. hof не помогут, нужен полноценный интерптетатор.
И hof далеко не обязательно что-либо вообще “создают в рантайме”, это просто абстракция такая.
Здравствуйте, Кодёнок, Вы писали:
Кё>Элементарный пример: пользователь вводит код с клавиатуры. Или сами данные являются произвольным кодом для исполнения. hof не помогут, нужен полноценный интерптетатор.
Как тут МП поможет? Этот пример по-моему вообще из другой оперы.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, WolfHound, Вы писали:
WH>>Nemerle. http://rsdn.ru/forum/nemerle/ WH>>Есть мощьное метапрограммирование. WH>>Компилятор можно запускать в рантайме. WH>>Плюс статическая типизация, вывод типов и много других плюшек.
VD>Плюс реально работает под дотнетом, а не сделан и забыт как большая часть диалектов лиспа адаптированных к дотнету.
Вменяемые люди не пользуются лиспами под дотнетом. Они берут современные реализации CL, работающие непосредственно на операционной системе, и компилирующие непосредственно в машинные коды, и потом берут библиотеку RDNZL и дергают дотнет прямо из лиспа.
Здравствуйте, Alexey Voytsehovich, Вы писали:
AV>Подумалось тут. Есть ли такой язык\технология, который мог бы в рантайме, пользуясь шаблоном кода (один) и правилами обработки данных (много разных), получать код для обработки именно необходимых данных? потом в рантайме запустить полученный код, отработать и выдать результат?
Common Lisp. Например, я недавно написал библиотеку Virgil, которая по спецификациям си-подобных типов(описанных в S-выражениях) автоматически генерирует код для маршалинга лисповских данных в "неуправляемую память" и обратно. Хотя основной упор там делается на кодогенерацию(ради эффективности маршалинга), спецификации типов могут также и интерпретироваться в рантайме(например в случае, когда спецификация типа в некоем конкретном случае при компиляции не известна).