Часть полного текста документа:О возможности универсального кода внутреннего представления программы Михаил Козлов Введение Статья Андерсона [1], которому, видимо, принадлежит сама идея схемной реализации языка программирования высокого уровня, появилась практически одновременно (1961г.) если не с зарождением этих языков (FORTRAN, 1949), то с выходом их "на широкую арену" (COBOL, 1959, ALGOL-60 как попытка "официального языка публикаций алгоритмов" и т.п.). В действительности же предыстория проблемы охватывает бoльшие временные интервалы, а сама проблема глубже, чем это может представиться на первый взгляд. Неслучайно строгое формулирование понятия алгоритма непосредственно предшествовало появлению первых вычислительных машин. Очевидно, что этот факт есть следствие тесной связи алгоритма с тем "субъектом", который этот алгоритм реализует. Поэтому первым строгим определением алгоритма явилось именно понятие машины (автомата) Тьюринга (1936г.). В отличие от этой чисто математической абстракции в основе подавляющего большинства когда-либо созданных до сих пор компьютеров лежит более богатая деталями схема, являющаяся всё же в том или ином смысле эквивалентным автомату Тьюринга определением алгоритма - фон Неймановская архитектура вычислительной машины (1945г.), с которой непосредственно связано представление вычислительных алгоритмов командными программами. Вывод, который можно извлечь из сказанного, состоит в некой нетривиальности взаимоотношения между "хардом" и "софтом". При этом использование алгоритмического языка высокого уровня можно рассматривать как моделирование более сложной машины средствами простой, что соответствует обычному понятию о "языковом процессоре". Ясно, что такая многоступенчатость делает компьютер более загадочным и недоступным, чем он представлялся изначально, и чем он является на самом деле. Среди практических попыток все же "образумить" и "очеловечить хард" можно выделить получившие некоторое распространение ЭВМ серии "Мир" (СССР) [2, 3] со схемной реализацией алголоподобного входного языка и "Систему 432" фирмы Intel [4], являющуюся, по-видимому, последним по времени (80-е годы) экспериментом в этом направлении. Однако в целом, как очевидно, эти попытки не оказались продуктивными. Наиболее существенные ограничения здесь состоят в значительном усложнении устройства языковой машины на всех уровнях ее функциональной схемы и заметном снижении ее быстродействия в сравнении с командным компьютером. При этом также утрачивается или значительно ослабевает одно из фундаментальных свойств компьютера - его универсальность. Хотя на языковой машине в принципе можно реализовать любой из существующих алгоритмических языков, своеобразная несовместимость многих из них может порождать значительную неэффективность работы программы, написанной на "чужом" языке. При этом также общая математическая "неудобность" алгоритма как абстрактного объекта вообще и достаточно обычная сложность алгоритмических проблем в частности уже давно привели к отказу от мысли об "универсальном" языке программирования либо ином подобном инструментальном средстве, которое могло бы быть одинаково пригодным и эффективным в решении любых задач, на схемную реализацию которого было бы не жалко тратить усилия. Тем не менее, в течение всего периода существования электронной вычислительной техники протекает процесс накопления практического опыта, одним из аспектов которого служит продолжающаяся отработка и самого понятия алгоритма и естественное развитие изначально искусственно созданного "языка компьютера" в его многообразных "диалектах". ............ |