Нашел это в Blueprint
API:
public function dropMorphs($name, $indexName = null)
{
$this->dropIndex($indexName ?: $this->createIndexName('index', ["{$name}_type", "{$name}_id"]));
$this->dropColumn("{$name}_type", "{$name}_id");
}
Так просто $table->dropMorphs('location');
Запустите путем рассмотрения quines, затем в Макроассемблерах и затем законе и yacc, и гибком проводе и бизоне. Затем рассмотрите код самоизменения.
Вот Куайн (отформатированный, используйте вывод в качестве нового входа):
#include<stdio.h>
main()
{
char *a = "main(){char *a = %c%s%c; int b = '%c'; printf(a,b,a,b,b);}";
int b = '"';
printf(a,b,a,b,b);
}
Теперь, если Вы просто ищете вещи, программисты не могут сделать, ищут противоположность np-complete.
Это - один из фундаментальных вопросов Искусственного интеллекта. Лично я надеюсь, что это не возможно - иначе скоро я буду без работы!!!:)
не был бы это быть хорошим иметь класс, который мог сделать копию источника программы, которую это запускает, измените ту программу и добавьте метод к классу, что это и затем выполняет копию программы и оконечный самой
Нет почти никаких случаев, где это решило бы проблему, которая не может быть решена "лучшее" использование non-self-modifying код..
Тем не менее существуют некоторые очень общие (полезные) случаи кода, пишущего другой код.. Самое очевидное существо любое веб-приложение серверной стороны, которое генерирует HTML/Javascript (хорошо, HTML является разметкой, но это идентично в теории). Также любой сценарий, который изменяет среду терминалов обычно, производит сценарий оболочки, который является eval'd родительской оболочкой. wxGlade генерирует код к этому, создает базовые находящиеся в wx графический интерфейсы пользователя.
Шепелявость Lisp шепелявит шепелявость :p
При шутке, если Вы хотите код, который генерирует код для выполнения и Вы заставили время освобождать изучение его и повреждение Вашего ума с рекурсивным материалом, генерирующим больше кода, пытаться изучить шепелявость :)
(eval '(or true false))
Всегда было возможно записать генераторы кода. С технологией XML использование генераторов кода может быть существенным инструментом. Предположим, что Вы работаете на компанию, которая должна иметь дело с XML-файлами от других компаний. Это относительно просто для записи программы, которая использует синтаксический анализатор XML, чтобы проанализировать новый XML-файл и записать другую программу, которая имеет все функции обратного вызова, настроенные для чтения XML-файлов того формата. Необходимо было бы все еще отредактировать новую программу для создания этого характерным для потребностей, но время разработки, когда новый XML-файл (новая структура, новые имена) сокращен много при помощи этого типа генератора кода. По-моему, это - часть силы технологии XML.
Смотрите на цикл Langtom. Это - самый простой пример самовоспроизводящейся "программы".
Я делаю это в PHP.
Для сохранения настроек для класса я сохраняю локальную переменную названной $data
. $data является просто dictionary/hashtable/assoc-array (в зависимости от того, куда Вы происходите из).
При загрузке класса он включает php файл, который в основном определяет данные. Когда я сохраняю класс, он выписывает PHP для каждого значения данных. Это - медленный процесс записи (и в настоящее время существуют некоторые проблемы параллелизма), но это быстрее, чем свет для чтения. Настолько быстрее (и легче), чем использование базы данных.
Что-то вроде этого не работало бы на все языки. Это работает на меня в PHP, потому что PHP очень непрерывен.
Существует целый класс таких вещей под названием "Генераторы кода". (Хотя, компилятор также соответствует описанию, поскольку Вы устанавливаете его). И они описывают две области этих зверей.
Большая часть кода генерирует, примите некоторую форму ввода данных пользователем (большинство берет Схему базы данных), и исходный код продукта, который затем компилируется.
Более усовершенствованные могут произвести исполняемый код. С.NET существует целое пространство имен (Система. CodeDom) выделенный создаванию исполняемого кода. Эти объекты, можно взять C# (или другой язык) код, скомпилировать его и связать его в в настоящее время запускающую программу.
Динамические языки обычно не работают вполне, как Вы предполагаете, в этом у них нет шага абсолютно раздельной компиляции. Это не необходимо, чтобы программа изменила свой собственный исходный код, перекомпилируйте и запуститесь с нуля. Обычно новая функциональность скомпилирована и связана в на лету.
Язык Common LISP является очень хорошим языком для осуществления этого в, но существуют другие, где Вы можете созданный код и выполнять его прямо здесь. Как правило, это будет через функцию, вызванную "оценкой" или чем-то подобным. Perl имеет функцию "оценки", и языкам сценариев обычно свойственно иметь способность.
Существует много программ, которые пишут другие программы, такие как yacc или бизон, но у них нет того же динамического качества, которое Вы, кажется, ищете.
сделайте копию источника программы, которую он запускает, измените ту программу и добавьте метод к классу, что это и затем выполняет копию программы и оконечный самой
Можно также сгенерировать код, встроить его в библиотеку вместо исполняемого файла и затем динамично загрузить библиотеку, даже не выходя из программы, которая в настоящее время работает.
Относительно искусственного интеллекта смотрите на Эволюционные алгоритмы.
Уверенный это. Я записал эффект для Краски. СЕТЬ*, который дает Вам редактора и позволяет Вам писать графический эффект "на лету". При приостановке ввода, он компилирует его в dll, загружает его и выполняет его. Теперь, в редакторе, только необходимо записать фактическую функцию рендеринга, все остальное необходимое для создания dll записано редактором и отправлено в компилятор C#.
Можно загрузить бесплатно его здесь: http://www.boltbait.com/pdn/codelab/
На самом деле существует даже опция видеть весь код, который был написан для Вас, прежде чем это будет отправлено в компилятор. Справочный файл (связанный выше) говорит все об этом.
Исходный код доступен для загрузки с той страницы также.
*Краска. СЕТЬ является редактором бесплатной картинки, которого можно загрузить здесь: http://getpaint.net
Конечно, Вы можете! На самом деле при использовании динамического языка класс может изменить себя (или другой класс), в то время как программа все еще работает. Это может даже создать новые классы, которые не существовали прежде. Это называют метапрограммированием, и оно позволяет Вашему коду стать очень гибким.
Вы путаете/объединяете два значения слова "запись". Одно значение является физической записью байтов к носителю, и другой разрабатывает программное обеспечение. Конечно, у Вас может быть программа, делают первого, если она была разработана, чтобы сделать так.
Единственный путь к программе, чтобы сделать что-то, что программист явно не предназначал это, чтобы сделать, должно вести себя как живущее создание: видоизменитесь (включите сам по себе биты среды), и копируйте различных мутантов на различных уровнях (для предотвращения полного исчезновения, если мутация является терминальной).
Да возможно создать генераторы кода. Большую часть времени они берут ввод данных пользователем и производят действительный код. Но существуют другие возможности.
Сам изменение программ также возможны. Но они были более распространены в эру DOS.
При рассмотрении Функционального программирования, которое имеет много возможностей написать код, который генерирует дальнейший код, способ, которым язык как Lisp не дифференцируется между кодом, и данные являются значительной частью, он - питание.
Направляющие генерируют различную модель по умолчанию и классы контроллера из схемы базы данных, когда она создает новое приложение. Это довольно стандартно, чтобы сделать такого рода вещь с динамическими языками - у меня есть несколько битов PHP, вокруг которого генерируют php файлы, просто потому что это было простое решение проблемы, с которой я имел дело в то время.
Таким образом, это возможно. Что касается вопроса Вы спрашиваете, хотя - который, возможно, немного неопределенен - какая среда и язык - Вы использование? Что Вы ожидаете, что код сделает и почему он должен быть добавлен к? Конкретный пример может принести более непосредственно соответствующие ответы.
Да это, конечно, хотя, возможно, не в контексте Вы относитесь для проверки этого сообщения на t4.
Да, это - то, что большинство макросов Lisp делают (всего для одного примера).
Если Вы хотите узнать о пределах исчисляемости, читайте о проблеме остановки
В теории вычислимости проблема остановки является проблемой решения, которая может быть указана следующим образом: учитывая описание программы и конечного входа, решите, заканчивает ли программа работать или будет работать навсегда, учитывая которые вводят.
Alan Turing доказал в 1936, что общий алгоритм для решения проблемы остановки для всех возможных пар входных данных программы не может существовать