Самоизменяющийся код?

#language-agnostic #input #runtime #self-modifying

#не зависит от языка #ввод #время выполнения #самоизменяющийся

Вопрос:

Я хотел бы сделать следующее. Я объявил структуру в своей программе, и во время выполнения, когда программа выполняется, если есть пользовательский ввод, я должен иметь возможность создать другую новую структуру / отредактировать эту структуру в своем коде. Как мы можем это сделать? Это что, «самоизменяющийся код»? Пожалуйста, уточните .Пожалуйста, приведите несколько примеров.Спасибо

Позвольте мне дать представление о том, что я хочу сделать, у меня есть «Структура / класс» под названием «student», который содержит переменные типа «int roll_no» и «int reg_no». Если пользователь хочет добавить новую переменную, такую как «имя символа», во время выполнения, как это можно сделать?

Комментарии:

1. Это возможно, но зависит от используемого вами языка. Используете ли вы C, PHP и т.д.? Кроме того, вы собираетесь создавать новый код на основе пользовательского ввода? Если это так, вам нужно быть очень осторожным с тем, что вы принимаете, особенно через Интернет, по соображениям безопасности. Возможно, если вы сможете показать свой вариант использования, вы сможете получить более точный совет.

2. Я использую C , возможно ли это на C? И какой язык будет удобен для самоизменяющегося кода? Как насчет Python? Это будет автономная система

3. насколько я знаю, самый простой способ для C / C — сгенерировать код, скомпилировать его в библиотеки и затем загрузить во время выполнения. Однако python или любой другой динамический язык — гораздо лучший выбор для этого.

4. @Niranjan, с C вы можете использовать tcc или, что лучше, LLVM для генерации кода во время выполнения. Оба они очень просты в использовании.

Ответ №1:

Взгляните на это:

http://bracha.org/Site/Talks.html

Говорят о рефлексии, которая, вероятно, то, что вы хотите — рефлексия — это не только самоанализ (который большинство разработчиков уже знает), но и изменение значения языковых конструкций и манипулирование кодом во время выполнения.

Лучшие языки для такого рода вещей, вероятно, ruby и smalltalk.

Если ваш язык не поддерживает эти возможности, у вас все еще есть возможность использовать генерацию кода — что возможно практически на любом языке программирования, но это намного проще в динамических с поддержкой «eval». Например, такого рода вещи возможны даже в C / C , но в ваше приложение должен быть встроен компилятор.

Java тоже хороший выбор (спасибо загрузчикам классов и множеству библиотек для манипулирования байт-кодом)

О, я почти забыл, взгляните на lisp и метациркулярную оценку.

Ответ №2:

Похоже, вам не нужно изменять существующий код, а скорее создавать какой-то новый код во время выполнения. Это легко сделать в любой среде, где ваш компилятор присутствует во время выполнения. Это верно для .NET, для сред на основе JVM, различных Lisps и т.д.