Действительно ли возможно написать код для написания кода?

Нашел это в 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');

9
задан GEOCHET 3 March 2009 в 22:38
поделиться

21 ответ

Запустите путем рассмотрения 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.

13
ответ дан 4 December 2019 в 05:52
поделиться

Это - один из фундаментальных вопросов Искусственного интеллекта. Лично я надеюсь, что это не возможно - иначе скоро я буду без работы!!!:)

0
ответ дан 4 December 2019 в 05:52
поделиться

не был бы это быть хорошим иметь класс, который мог сделать копию источника программы, которую это запускает, измените ту программу и добавьте метод к классу, что это и затем выполняет копию программы и оконечный самой

Нет почти никаких случаев, где это решило бы проблему, которая не может быть решена "лучшее" использование non-self-modifying код..

Тем не менее существуют некоторые очень общие (полезные) случаи кода, пишущего другой код.. Самое очевидное существо любое веб-приложение серверной стороны, которое генерирует HTML/Javascript (хорошо, HTML является разметкой, но это идентично в теории). Также любой сценарий, который изменяет среду терминалов обычно, производит сценарий оболочки, который является eval'd родительской оболочкой. wxGlade генерирует код к этому, создает базовые находящиеся в wx графический интерфейсы пользователя.

1
ответ дан 4 December 2019 в 05:52
поделиться

Шепелявость Lisp шепелявит шепелявость :p

При шутке, если Вы хотите код, который генерирует код для выполнения и Вы заставили время освобождать изучение его и повреждение Вашего ума с рекурсивным материалом, генерирующим больше кода, пытаться изучить шепелявость :)

(eval '(or true false))
1
ответ дан 4 December 2019 в 05:52
поделиться

Всегда было возможно записать генераторы кода. С технологией XML использование генераторов кода может быть существенным инструментом. Предположим, что Вы работаете на компанию, которая должна иметь дело с XML-файлами от других компаний. Это относительно просто для записи программы, которая использует синтаксический анализатор XML, чтобы проанализировать новый XML-файл и записать другую программу, которая имеет все функции обратного вызова, настроенные для чтения XML-файлов того формата. Необходимо было бы все еще отредактировать новую программу для создания этого характерным для потребностей, но время разработки, когда новый XML-файл (новая структура, новые имена) сокращен много при помощи этого типа генератора кода. По-моему, это - часть силы технологии XML.

1
ответ дан 4 December 2019 в 05:52
поделиться

Смотрите на цикл Langtom. Это - самый простой пример самовоспроизводящейся "программы".

2
ответ дан 4 December 2019 в 05:52
поделиться

Я делаю это в PHP.

Для сохранения настроек для класса я сохраняю локальную переменную названной $data. $data является просто dictionary/hashtable/assoc-array (в зависимости от того, куда Вы происходите из).

При загрузке класса он включает php файл, который в основном определяет данные. Когда я сохраняю класс, он выписывает PHP для каждого значения данных. Это - медленный процесс записи (и в настоящее время существуют некоторые проблемы параллелизма), но это быстрее, чем свет для чтения. Настолько быстрее (и легче), чем использование базы данных.

Что-то вроде этого не работало бы на все языки. Это работает на меня в PHP, потому что PHP очень непрерывен.

1
ответ дан 4 December 2019 в 05:52
поделиться

Существует целый класс таких вещей под названием "Генераторы кода". (Хотя, компилятор также соответствует описанию, поскольку Вы устанавливаете его). И они описывают две области этих зверей.

Большая часть кода генерирует, примите некоторую форму ввода данных пользователем (большинство берет Схему базы данных), и исходный код продукта, который затем компилируется.

Более усовершенствованные могут произвести исполняемый код. С.NET существует целое пространство имен (Система. CodeDom) выделенный создаванию исполняемого кода. Эти объекты, можно взять C# (или другой язык) код, скомпилировать его и связать его в в настоящее время запускающую программу.

1
ответ дан 4 December 2019 в 05:52
поделиться

Динамические языки обычно не работают вполне, как Вы предполагаете, в этом у них нет шага абсолютно раздельной компиляции. Это не необходимо, чтобы программа изменила свой собственный исходный код, перекомпилируйте и запуститесь с нуля. Обычно новая функциональность скомпилирована и связана в на лету.

Язык Common LISP является очень хорошим языком для осуществления этого в, но существуют другие, где Вы можете созданный код и выполнять его прямо здесь. Как правило, это будет через функцию, вызванную "оценкой" или чем-то подобным. Perl имеет функцию "оценки", и языкам сценариев обычно свойственно иметь способность.

Существует много программ, которые пишут другие программы, такие как yacc или бизон, но у них нет того же динамического качества, которое Вы, кажется, ищете.

2
ответ дан 4 December 2019 в 05:52
поделиться

сделайте копию источника программы, которую он запускает, измените ту программу и добавьте метод к классу, что это и затем выполняет копию программы и оконечный самой

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

2
ответ дан 4 December 2019 в 05:52
поделиться

Относительно искусственного интеллекта смотрите на Эволюционные алгоритмы.

2
ответ дан 4 December 2019 в 05:52
поделиться

Уверенный это. Я записал эффект для Краски. СЕТЬ*, который дает Вам редактора и позволяет Вам писать графический эффект "на лету". При приостановке ввода, он компилирует его в dll, загружает его и выполняет его. Теперь, в редакторе, только необходимо записать фактическую функцию рендеринга, все остальное необходимое для создания dll записано редактором и отправлено в компилятор C#.

Можно загрузить бесплатно его здесь: http://www.boltbait.com/pdn/codelab/

На самом деле существует даже опция видеть весь код, который был написан для Вас, прежде чем это будет отправлено в компилятор. Справочный файл (связанный выше) говорит все об этом.

Исходный код доступен для загрузки с той страницы также.

*Краска. СЕТЬ является редактором бесплатной картинки, которого можно загрузить здесь: http://getpaint.net

2
ответ дан 4 December 2019 в 05:52
поделиться

Конечно, Вы можете! На самом деле при использовании динамического языка класс может изменить себя (или другой класс), в то время как программа все еще работает. Это может даже создать новые классы, которые не существовали прежде. Это называют метапрограммированием, и оно позволяет Вашему коду стать очень гибким.

2
ответ дан 4 December 2019 в 05:52
поделиться

Вы путаете/объединяете два значения слова "запись". Одно значение является физической записью байтов к носителю, и другой разрабатывает программное обеспечение. Конечно, у Вас может быть программа, делают первого, если она была разработана, чтобы сделать так.

Единственный путь к программе, чтобы сделать что-то, что программист явно не предназначал это, чтобы сделать, должно вести себя как живущее создание: видоизменитесь (включите сам по себе биты среды), и копируйте различных мутантов на различных уровнях (для предотвращения полного исчезновения, если мутация является терминальной).

2
ответ дан 4 December 2019 в 05:52
поделиться

Да возможно создать генераторы кода. Большую часть времени они берут ввод данных пользователем и производят действительный код. Но существуют другие возможности.

Сам изменение программ также возможны. Но они были более распространены в эру DOS.

2
ответ дан 4 December 2019 в 05:52
поделиться

При рассмотрении Функционального программирования, которое имеет много возможностей написать код, который генерирует дальнейший код, способ, которым язык как Lisp не дифференцируется между кодом, и данные являются значительной частью, он - питание.

Направляющие генерируют различную модель по умолчанию и классы контроллера из схемы базы данных, когда она создает новое приложение. Это довольно стандартно, чтобы сделать такого рода вещь с динамическими языками - у меня есть несколько битов PHP, вокруг которого генерируют php файлы, просто потому что это было простое решение проблемы, с которой я имел дело в то время.

Таким образом, это возможно. Что касается вопроса Вы спрашиваете, хотя - который, возможно, немного неопределенен - какая среда и язык - Вы использование? Что Вы ожидаете, что код сделает и почему он должен быть добавлен к? Конкретный пример может принести более непосредственно соответствующие ответы.

3
ответ дан 4 December 2019 в 05:52
поделиться

Да это, конечно, хотя, возможно, не в контексте Вы относитесь для проверки этого сообщения на t4.

3
ответ дан 4 December 2019 в 05:52
поделиться

Да, это - то, что большинство макросов Lisp делают (всего для одного примера).

4
ответ дан 4 December 2019 в 05:52
поделиться

Получите голову вокруг этого: теория вычислимости.

4
ответ дан 4 December 2019 в 05:52
поделиться

Уверенный это. Это - то, как много вирусов работает!

8
ответ дан 4 December 2019 в 05:52
поделиться

Если Вы хотите узнать о пределах исчисляемости, читайте о проблеме остановки

В теории вычислимости проблема остановки является проблемой решения, которая может быть указана следующим образом: учитывая описание программы и конечного входа, решите, заканчивает ли программа работать или будет работать навсегда, учитывая которые вводят.

Alan Turing доказал в 1936, что общий алгоритм для решения проблемы остановки для всех возможных пар входных данных программы не может существовать

14
ответ дан 4 December 2019 в 05:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: