Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.227.161.226] |
|
Сообщ.
#1
,
|
|
|
Посоветуйте язык программирования, который позволяет:
а) Прямо во время выполнения менять исходный код программы человеком или самой же программой б) Непосредственно указать программе, что полученную/сформированную на некотором этапе работы программы простую строковую переменную нужно считать исходным кодом программы и выполнить его. К, примеру, в языке AutoHotKey есть функция eval, которая является директивой интерпретатору, что строка является выражением. А мне бы хотелось большего, чтобы строку можно было объявить не просто выражением, а фрагментом кода, содержащим операторы, выражения, объявления переменных и т.п. |
Сообщ.
#2
,
|
|
|
forth
|
Сообщ.
#3
,
|
|
|
python
|
Сообщ.
#4
,
|
|
|
Цитата Grumike @ forth Цитата shm @ python Спасибо. Погуглю про эти языки |
Сообщ.
#5
,
|
|
|
Про классику, что, забыли? LISP.
В FORTH возможность менять программу на лету несколько ограничена. Из-за стекового подхода к распределению памяти под программ и данные приходится внимательно следить за целостностью программы. Или смириться с постоянной утечкой памяти. В Python функции и классы являются такими же объектами, как и всё остальное, их можно объявлять, переобъявлять, удалять. Память распределяется и освобождается автоматом. Надо только не забывать указывать контекст исполнения. Для примера можно взглянуть реализацию функции namedtuple из модуля collections. Она генерирует текстовое описание класса, компилирует это описание и возвращает сгенерированный класс. В LISP функции формально вообще ничем от данных не отличаются. То есть там можно попросту сформировать структуру списков, соответствующую определению функции и выполнить её. Интерпретатор автоматически откомпилирует её (если поддерживает такую возможность). |
Сообщ.
#6
,
|
|
|
SmallTalk.
|
Сообщ.
#7
,
|
|
|
C#
|
Сообщ.
#8
,
|
|
|
Цитата Flex Ferrum @ C# Ugh really? Ну и что-либо скриптовое, js и т.п. А вообще, самомодифицируемость приветствуется на уровне внутренней модели, чтобы она была достаточно универсальна, что ее можно рассматривать как модификацию самой программы, тогда как реальный код неизменен. Нечто вроде виртуального процессора. А тогда писать на чем угодно. |