Самоизменяющийся код? - PullRequest
2 голосов
/ 16 октября 2011

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

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

Ответы [ 2 ]

3 голосов
/ 16 октября 2011

Посмотрите на это:

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

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

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

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

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

О, я почти забыл, взгляните на метафизику и оценки на шумиху.

0 голосов
/ 16 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...