Цитата Сообщение от valker Посмотреть сообщение
Программа на Бейсике которая сама себя модифицирует - это не Бейсик?


В программировании, как области инженерии, оптимальные решения всегда являются компромиссными.

На мой взгляд, можно определить плюсы и минусы каждого из подходов (Бейсик и Ассемблер), а также выработать пути по взаимному использованию друг-друга. Если вызов ассемблерной процедуры из Бейсика не составляет сложностей : RANDOMIZE USR ..., то вот обратные вызовы, на мой взгляд практически нигде не используются. А ведь сколько открывается возможностей: Ассемблерная программа может динамически создать Бейсик программу, положить её в нужное место памяти, настроить системные переменные и вызвать Бейсик интерпретатор.
10 LET A = VAL "A"
20 PRINT A
30 POKE <адрес строки 10 + смещение до символа "А" >, RND*255
40 GOTO 10

Да, это - Бейсик. Хотя требующий уже знания устройства интерпретатора. Что не есть классический случай его применения. Но ладно, согласен.

10 POKE <адрес символа "А" в строке 20>,201
20 REM A
30 RANDOMIZE USR <адрес первого символа в строке 20>

А это - не Бейсик. Это - программирование на Бейсике машкода, т.е. асм!

Не, ну конечно, и это можно назвать Бейсиком, но просто потому, что Бейсик и Ось объединены вместе. Ведь не скажешь же, если написать RANDOMIZE USR 40000 и запустится какая-нить мегадема, что это написано на Бейсике!

Далее. Оптимальные решения не всегда являются компромиссными (под компромиссом понимается баланс скорость работы/длина кода). Во многих демах, как известно, в изобилии встречается развернутый цикл, т.е. просто повторяется пара команд, вместо помещения в цикл. Тут никакого компромисса нет - все сделано ради лишних тактов - программа длинней не бывает. В системной же утилите, оси, резидентной процедуре, вирусе - упор делается на минимальный размер кода. Хотя естесственно, чаще бывает компромисс.

И про обратные вызовы - используется. Так, я использовал это в своей оси NK-DOS - именно, как ты описал.