Как стек. Один на другом. Нижний о верхнем ничего не знает.
>За исключением, как я полагаю, тех, что подходят лучше.
Такой язык должен иметь высокоразвитые средства метапрограммирования, и в первую очередь, у такого языка сама структура программы должна быть объектом языка, причем представляться она должна в самой общей форме, потому как какая-либо специализация внесет ограниченность в возможности метапрограммирования. Таким образом, этот язык должен быть лиспом. Возможно, в будущем появятся лиспы лучше CL, пока же таких нет.
>Как контролировать распространение изменений в Лиспе?
Самый лучший вариант это многоуровневые макросы и DSL, естественно.
Задача должна быть описана на самом верхнем уровне, самым высокоуровневым DSL, непосредственно описывающим саму задачу в ее терминах. Этот DSL должен компилироваться в нижележащий DSL, работающий, например, с абстракциями доступных программных средств, и так далее. И вот когда мы изменяем спецификацию задачи, на верхнем уровне, изменения автоматически распространяются на нижележащие слои, без непосредственной работы с ними. Верификация происходит на всех уровнях слоях DSL, естественно. Если DSL не принимает какую-либо "форму", он кричит нам об ошибке, при компиляции.
Это не может полностью защитить от ошибок в логике, но в отличие от типизации, это уменьшит шанс возникновения логических ошибок, за счет сужения сущностей, с которыми мы работаем, за счет максимальной специализации кода под задачу.
no subject
Как стек. Один на другом. Нижний о верхнем ничего не знает.
>За исключением, как я полагаю, тех, что подходят лучше.
Такой язык должен иметь высокоразвитые средства метапрограммирования, и в первую очередь, у такого языка сама структура программы должна быть объектом языка, причем представляться она должна в самой общей форме, потому как какая-либо специализация внесет ограниченность в возможности метапрограммирования. Таким образом, этот язык должен быть лиспом. Возможно, в будущем появятся лиспы лучше CL, пока же таких нет.
>Как контролировать распространение изменений в Лиспе?
Самый лучший вариант это многоуровневые макросы и DSL, естественно.
Задача должна быть описана на самом верхнем уровне, самым высокоуровневым DSL, непосредственно описывающим саму задачу в ее терминах. Этот DSL должен компилироваться в нижележащий DSL, работающий, например, с абстракциями доступных программных средств, и так далее. И вот когда мы изменяем спецификацию задачи, на верхнем уровне, изменения автоматически распространяются на нижележащие слои, без непосредственной работы с ними. Верификация происходит на всех уровнях слоях DSL, естественно. Если DSL не принимает какую-либо "форму", он кричит нам об ошибке, при компиляции.
Это не может полностью защитить от ошибок в логике, но в отличие от типизации, это уменьшит шанс возникновения логических ошибок, за счет сужения сущностей, с которыми мы работаем, за счет максимальной специализации кода под задачу.