Comments 35
Использую данныый метод для Eval javascript'а на стороне сервера, только сборку создаю в памяти
+1
Ну да, одна из штатных возможностей языка, так работает, например, XmlSerializer. Вкупе с будущим dynamic — простор открывается совершенно невообразимый.
Только пост почему-то не о чем.
Только пост почему-то не о чем.
+4
Маленькое уточнение: отнимите Full Trust, и посмотрите, что получится — компилятор сейчас не является управляемым компонентном (он COM-объект), поэтому в отсутствие спец.привилегий скомпилировать удастся чуть менее, чем никак. В отличие от Boo или Nemerle, например. Так что если у вас чужой хостинг, будьте внимательны с permissions при развертывании такого решения — некоторые хостеры могут просто не дать Full Trust.
А еще компилировать можно в память — если эта сборка больше никому не понадобится. А еще эмбеддить файлы внутрь сборки. А еще… Короче, ни о чем пост.
А еще компилировать можно в память — если эта сборка больше никому не понадобится. А еще эмбеддить файлы внутрь сборки. А еще… Короче, ни о чем пост.
+9
А еще любой топик или текст можно чем то дополнить. И что дальше?
Больше половины информации что я вижу в своих RSS (та информация, которая может меня заинтересовать в плане профессиональной направленности) — это та информация, о которой я уже знаю, но не забывайте что на планете не вы один, а несколько миллиардов человек, и некоторому проценту любая информация может быть полезна.
Так что какие то не понятные «А еще...» у вас получается. Если хотите дополнить данный топик, так я только буду рад и с удовольствием прочту.
Удачи!
Больше половины информации что я вижу в своих RSS (та информация, которая может меня заинтересовать в плане профессиональной направленности) — это та информация, о которой я уже знаю, но не забывайте что на планете не вы один, а несколько миллиардов человек, и некоторому проценту любая информация может быть полезна.
Так что какие то не понятные «А еще...» у вас получается. Если хотите дополнить данный топик, так я только буду рад и с удовольствием прочту.
Удачи!
+1
Пристыдили:)
Я написал важное дополнение про Full Trust.
Еще одно важное дополнение — начиная с .NET 3.5 SP 1 доступен .NET Client Profile — подмножество .NET FW; он относится к полноразмерному .net так же, как JRE относится к JDK. В настоящий момент туда включен компилятор csc, но пользоваться им нельзя (крайне не рекомендуется) — он может быть удален в будущей версии Client Profile.
Пруф
Я написал важное дополнение про Full Trust.
Еще одно важное дополнение — начиная с .NET 3.5 SP 1 доступен .NET Client Profile — подмножество .NET FW; он относится к полноразмерному .net так же, как JRE относится к JDK. В настоящий момент туда включен компилятор csc, но пользоваться им нельзя (крайне не рекомендуется) — он может быть удален в будущей версии Client Profile.
Пруф
+1
расскажите как компилировать в память…
дело в том, что он все равно пишет на диск временную сборку, а потом уже грузит в память
дело в том, что он все равно пишет на диск временную сборку, а потом уже грузит в память
0
Динамическая компиляция удобна когда есть часто изменяемый код. То есть таким образом мы используем код на C# как скрипт. Таким образом удобно вносить небольшие изменения на стороне заказчика без перекомпиляции всего проекта.
+1
CompilerResultsresults = provider.CompileAssemblyFromSource(compilerParams, source);Может всетаки stringsource?
+2
Интересен как раз «другой вопрос» — то самое «зачем». Первое, что приходит в голову — генетические алгоритмы и полиморфные вирусы. Понятно, что можно и без динамической компиляции. Но с ней как-то естественнее :)
А кто что ещё интересненькое в эту тему может предложить?
Типа… автоматическую оптимизацию кода в зависимости от среды и вообще по обстоятельствам :) Код сам для себя время от времени запускает профайлер, анализирует, где у него образовались ботлнеки, пытается заменить эти куски кода на альтернативные (опционально — скачивая библиотеки, подходящие по интерфейсам).
А кто что ещё интересненькое в эту тему может предложить?
Типа… автоматическую оптимизацию кода в зависимости от среды и вообще по обстоятельствам :) Код сам для себя время от времени запускает профайлер, анализирует, где у него образовались ботлнеки, пытается заменить эти куски кода на альтернативные (опционально — скачивая библиотеки, подходящие по интерфейсам).
0
У нас используются клиентские скрипты, которые содержат бизнес-логику. Служба поддержки на стороне заказчика имеет инструмент для того, чтобы «подкрутить» функционал (добавить кастомную валидацию, скрыть поля ввода) и т.п. Так как у нас толстый клиент на WinForms, такое решение вполне устраивает всех.
Тот сценарий, что вы рассказали, называется PGO (profile guided optimization), и пока что вне среды разработки он доступен в зачаточном состоянии (ниже уровнем, на этапе jit-компиляции IL — «горячие» и «холодные» участки).
Тот сценарий, что вы рассказали, называется PGO (profile guided optimization), и пока что вне среды разработки он доступен в зачаточном состоянии (ниже уровнем, на этапе jit-компиляции IL — «горячие» и «холодные» участки).
+2
Я, конечно же, подозревал (и надеялся), что что-то подобное реализовано или реализуется. Идейка ведь на поверхности. Другое дело, что реализация далеко не проста или не слишком-то эффективна пока что, раз так мало случаев применения.
Спасибо за наводку, теперь буду знать, как оно называется. Во всяком случае, в одной из своих ипостасей.
А вообще было бы интересно дожить до того времени, когда единожды установленные на моём компе программы будут менять код со временем. Не просто потому, что авторы обновили версию, а по более интеллектуальным и избирательным принципам. Приспосабливаясь к среде, приспосабливаясь ко мне — без участия админа. Хотя бы и в сторону сокращения функционала — ведь жалкие проценты использую.
Спасибо за наводку, теперь буду знать, как оно называется. Во всяком случае, в одной из своих ипостасей.
А вообще было бы интересно дожить до того времени, когда единожды установленные на моём компе программы будут менять код со временем. Не просто потому, что авторы обновили версию, а по более интеллектуальным и избирательным принципам. Приспосабливаясь к среде, приспосабливаясь ко мне — без участия админа. Хотя бы и в сторону сокращения функционала — ведь жалкие проценты использую.
+1
а) к примеру — вы пишите некое приложение (автоматизирующая бизнес область или нет), которое позволяет создавать методы для Domain объектов или функции, которые с ними работают. И в итоге вы предоставляете некий функционал, при помощи которого пользователь (в данному случае администратор системы) может создавать данные функции (не обязательно на C#) — главное что вы их запросто можете преобразовать в C# код, скомпилировать и положить предположим в dll рядом и потом вызывать.
б) создаете проект, чем то похожий на sql-ex, только на c#, чем не вариант?
б) создаете проект, чем то похожий на sql-ex, только на c#, чем не вариант?
+1
а) Сборка на заказ (типа плагинов, в данном случае). Что-то где-то вспоминается, что некоторые так целые дистрибутивы собирают. Поставил галочки через web-интерфейс — сгенерился архив лично для тебя, качай. Даже админ не нужен.
б) С базами данных редко дело имел, а гуглиться разное всякое. Так что не знаю, «чем не вариант» :)
б) С базами данных редко дело имел, а гуглиться разное всякое. Так что не знаю, «чем не вариант» :)
+1
sql-ex.ru/ — это проект для обучения sql, вы пишите код, на сервере проверяется.
+1
Я компилирую поисковые запросы в предикаты и фильтрую коллекции объектов, так организован поиск в моих программах.
Например, для музыкального плеера — это самый простой способ сделать автоматический плейлист — просто скомпилируй поисковый запрос в предикат и применяй его при изменениях в коллекции треков.
Только я использую Linq Expression Trees, а не предложенный метод. Linq Expression Trees в свою очередь используют класс DynamicMethod, наверное.
Например, для музыкального плеера — это самый простой способ сделать автоматический плейлист — просто скомпилируй поисковый запрос в предикат и применяй его при изменениях в коллекции треков.
Только я использую Linq Expression Trees, а не предложенный метод. Linq Expression Trees в свою очередь используют класс DynamicMethod, наверное.
+2
Также мне кажется, предложенный метод с предикатами можно использовать для Linq to SQL и Entity Framework — библиотеки смогут успешно преобразовать типизированный предикат в SQL-выражение, что позволит пользователю делать эффективные запросы к БД (выполняемые на стороне сервера БД) в стиле Google.
Я пока работал с коллекциями обычных объектов и не экспериментировал с поиском в БД.
Вообще, я имел в виду, что запрос, введённый пользователем, типа «time:<5m AND rating:>3» преобразовывается в скомпилированный типизированный делегат: (Track track) => track.Time < TimeSpan.FromMinutes(5) && track.Rating > 3;
Если Track — это одна из сущностей из БД, то предикат можно обратно преобразовать в SQL и сделать выборку на стороне сервера, а не фильтровать всю коллекцию объектов на стороне клиента, как если бы запрос не компилировался.
Я пока работал с коллекциями обычных объектов и не экспериментировал с поиском в БД.
Вообще, я имел в виду, что запрос, введённый пользователем, типа «time:<5m AND rating:>3» преобразовывается в скомпилированный типизированный делегат: (Track track) => track.Time < TimeSpan.FromMinutes(5) && track.Rating > 3;
Если Track — это одна из сущностей из БД, то предикат можно обратно преобразовать в SQL и сделать выборку на стороне сервера, а не фильтровать всю коллекцию объектов на стороне клиента, как если бы запрос не компилировался.
+3
UFO just landed and posted this here
То что вам это не нужно, это ещё не значит, что это не нужно другим. Я вот представляю, как это можно использовать.
Спасибо автору топика!
Спасибо автору топика!
+2
у вас питон мозга, уважаемый
+5
Вы мне, наверное, не поверите, но существуют программы, которые несколько более сложны, чем ваш хелловорлд. И если технология есть — ей найдется применение. Хуже, когда задача есть, а решить ее красиво нечем.
P.S. Ну так, для справки — на IronPython, который для .net, ваш хелловорлд будет выглядеть идентично. Так что вы не путайте теплое с мягким.
P.S. Ну так, для справки — на IronPython, который для .net, ваш хелловорлд будет выглядеть идентично. Так что вы не путайте теплое с мягким.
+1
А вам приходилось писать что-то кроме Хелловорлда, мне кажется нет, судя по тому как вы рассуждаете? У многих технологий уже есть занятая ими ниша, и это происходит обычно не потому что она (технология) хорошо пропиарена, а потому что она лучше других справлятся с возложенной на нее задачей или делает это на требуемом/достаточном уровне. Питон — хорошая технология, но есть задачи где его применения как минимум неуместно, что к примеру является следствием его скорости работы, которая не сравнится со скоростью работы .NET приложений.
0
UFO just landed and posted this here
Ну не будут на питоне полностью игры писать, куски логики — да, но не полноценные игры. Полноценные графические приложения тоже не будут писать ибо есть проблемы с многопоточностью и опять таки с прозводительностью. Приложения на .NET по скорости работы весьма адекватны, под Windows единственная альтернатива это С++, но страдает скорость разработки.
+1
Стоит прочитать топик более внимательно.
+1
Вы чем недовольны? Вот я вам динамически компилирую и запускаю Hello-World на C#. Что не устраивает?
Кстати, я сначала думал, что в топике именно об этом способе пойдет речь! Автор, надо было упомянуть и другие способы динамической компиляции!
DynamicMethod meth = new DynamicMethod("", null, null); ILGenerator il = meth.GetILGenerator(); il.EmitWriteLine("Hello, World!"); il.Emit(OpCodes.Ret); Action hello = (Action) meth.CreateDelegate(typeof(Action)); hello();
Кстати, я сначала думал, что в топике именно об этом способе пойдет речь! Автор, надо было упомянуть и другие способы динамической компиляции!
+2
Автору спасибо за труд. Наткнулся на статью через гуглопоиск. Изложенное пригодится мне для реализации моего проекта
0
Only those users with full accounts are able to leave comments. Log in, please.
Динамическая компиляция кода в C#