Re: Передача кода по сети
От: Аноним  
Дата: 09.08.10 20:20
Оценка:
Здравствуйте, Abyx, Вы писали:


A>Способы решения:

A>1. Передавать сборку (.dll).
A>Передаваемый код можно писать на любом языке. Простая реализация на принимающей и передающей стороне.
A>Однако, даже если передавать только секцию кода, то все равно она будет раз в 5 больше чем исходник.
A>Очевидно что одна строчка кода ЯВУ
A>Console.WriteLine("q")
A>компилируется в несколько инструкций MSIL и кучу метаданных.
Ну и что? А если исходиков десятки мегов? По моему это очень эффективное и простое решение.

A>2. Передавать исходник.

A>На принимающей стороне есть компилятор C#, встроенный в .NET, с его помощью можно скомпилировать исходник и потом запустить из памяти.
A>Однако исходник содержит большое количество избыточной информации — пробелы, длинные имена переменных. Отчасти с этим справится сжатие, но лучше написать обфускатор, который убирал бы пробелы и переименовывал переменные, имена методов и типов.
Это бузусловно гибко, но компиляция требует времени и соотвествующих библиотек на удаленной стороне

A>3. Передавать CodeDom.

A>Если язык С# — то нужен парсер, т.к. у CSharpCodeProvider не реализован метод Parse.
A>Лучше парсить исходник, выкидывать из него лишнюю информацию, передавать свой AST, и на принимающей стороне преобразовывать его в CodeDom
A>Если язык не С# — то надо включить в зависимости принимающей стороны компилятор и рантайм. Например для Boo это будет ~1Мб, что многовато.
AST надо строить, разбирать и еще экзекьютить, это не простая задача.

A>4. Передавать IL методов.

A>Это несколько ограничивает удобство написания кода, надо дизассемблировать и обрабатывать IL-код методов. Слишком сложно.
не для всех языков есть IL, а нужно общее решение.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.