#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 и т.д.