И где так же правильно нативно реализован тип COMPLEX ? Сразу скажу, переопределение всей арифметики в приплюснутом Си не в счет, это костыли!
Вид для печати
Я ж не просто так привёл анекдот про Холмса: строка CALL SUB(1) на самом деле не делает ничего. То есть вообще НИ-ЧЕ-ГО. Если кто-либо что-либо и делает, то:
1. Процессор под управлением транслятора, генерируя объектный код.
2. Процессор под управлением оттранслированной и скомпонованной программы, исполняя её код. Естественно, система команд этого кода должна совпадать с системой команд процессора. Ещё более естественно, что от строки исходного текста в исполняемом коде не остаётся ничего, даже если исходник был на языке ассемблера, не говоря уже о ЯВУ.
Что же до фортрана, то в RT-11 (и её родителях) при передаче параметров он передаёт такой мощный блок этих параметров, что паскали и прочие ассемблеры нервно курят в сторонке. Начнём с того, что в разбираемом случае он передаёт подпрограмме две :) единицы. Кстати, именно из-за структуры этого блока длина имени подпрограммы фортрана ограничена 6-ю символами. И если мне не изменяет память (паскалеводы меня в случае чего поправят), то паскаль в RT11 требовал процессоров с плавающей арифметикой. Фортран же не только не требовал, но на процессоре 1801ВМ2 даже выполнял эти вычисления вчетверо быстрее паскаля. Правда, знающие люди сказали, что на оригинальном процессоре LSI-11 этих тормозов не было, но мой опыт работы ограничен только советскими ЧПУхами, а в них были только 1801ВМ1 да 1801ВМ2, да полная плата М2 от Электроники-60.
После ASCIZ ни разу нет выравнивания на границу слова. В первом разе это прокатило, поскольку получилась последовательность чётной длины. Во втором разе длина последовательности получилась нечётной, но поскольку это было в конце программы, то можно условно считать, что тоже прокатило. В любом случае транслятор поправил бы эту ошибку, от чего я и сказал не "ошибка", а именно "неряшливость". В 16-разрядной системе байтовая адресация - атавизм (вон, у 64-разрядного Крея и символьные, и целые, и плавающие, и комплексные данные имели разрядность 64 бита!), поэтому с ней надо быть поаккуратнее. Точно так же неряшливо товарищ задал и свой "сложный" вопрос, сложность которого заключается именно в неопределённости, расплывчатости, недосказанности его формулировки.Цитата:
в чём вы видите неряшливость кода?
вопрос был именно о Фортране и особенности передачи аргументов библиотечным процедурам и функциям.
Обычный абстрактный вопрос как дополнение к билету на экзамене )))
- - - Добавлено - - -
Приветствую, Олег! Редкий ты гость в нашем разделе )
Книгу обязательно для общего образования поизучаю - поскольку мне сама тематика интересна. Остальные разборки по Фортрану тут в общем то и связаны с ОС и оборудованием не совсем современным ) Там есть ключевой комментарий от form'а, в чем именно
уникальность реализации Фортрана для PDP ) Хотя - некоторые вещи не стареют и со сцены не спешат уходить )
А у ассемблера MACRO-11 каким блоком это ограничение вводится? ;)
Может все-таки дело в формате символьных таблиц стандартного OBJ файла для PDP-11?
В этом блоке ровно n+1 (где n - количество аргументов как указанных так и пропущенных) слов. Первое слово слово - количество аргументов, следующие - адреса (или -1 если аргумент пропущен). Все. К именам никакого отношения. К слову, такой способ передачи параметров ипользуется почти во всех реализациях фортрана, не только в RT-11. Почти - потому, что есть g77 в котором параметры передаются по сишному или около того, но его и фортраном-то назвать нельзя ибо он не умеет самое главное в фортране - отрабатывать фортрановский (!) символ форматирования :)
И, к слову, к чему поминать фортран для RT-11? Точно также все выглядит и в фортране для RSX. Можно скомпилировать в одной системе, перетащить результат в другую, и уже там собрать.
Это параметр генерации паскаля. Другое дело, что в союзе наверное никто никогда не видел дистрибутива паскаля для RT-11 (у меня его до сих пор нет - только для RSX).
UPD. Проверил тот паскаль, что у меня есть в RT-11 - без FPP все работает. Тест правда совсем простой - несколько действий с плавающей точкой.
После ASCIZ нету, но в данном конкретном случае есть - это обусловлено размером строки. XXX в коментарии для того и написано, что это "криво, но работает". Разумеется в живой программе если там была бы строка текста, после нее бы стоял .EVEN. Ставить же его после любой строки ну совершенно необязательно (например если она часть структур данных фиксированной длины). Именно так подобные вещи коментируют и в наше время (см исходники любой операционки и софта под нее).
Сложность видимо заключается в желании позанудствовать. Вопрос (а точнее - тоже позанудствую - упоминание вопроса) выглядел понятным для всех, кроме Вас ;)
я понимаю, что 77 Фортран на PDP наверное самый прогрессивный, но ведь
есть ещё более ранняя (или просто другая) реализация с римским номеров в названии iV как у него
там с системными вызовами (имеется в виду системная библиотека)? И в целом, надо бы кратко хотя
бы охарактеризовать обе реализации и совместимость (синтаксис) программ? Кстати в сети полно
по разному обоснованных рекомендаций Фортрана как "первого алгоритмического языка" вместо Бейсика или
Паскаля.
- - - Добавлено - - -
Глядя на объём всего F77 на диске RT-11 5.7 - для чисто флопов очень как-то громозко всё выглядит, с ЖД ничего не страшно (это я про УК-НЦ!).
- - - Добавлено - - -
F-IV компактнее, но видимо совсем совсем не актуальный???
- - - Добавлено - - -
В инете упоминается 77 и 90 синтаксис: 90 - это уже за пределами PDP видимо?
Библиотеке пофигу к какому фортрану ее подключить. Формат вызова одинаковый.
Да, F77 здоровенный и по большому счету в SJ/SB/FB фактически непригоден для компиляции больших программ - просто памяти не хватит.
У DEC F77 последняя реализация.
Честно говоря, ни разу не видел фортрановской программы, выходящей за рамки FIV :)
А тут еще неизвестно, кто виноват. Запросто может быть так, что, проектируя формат объектного модуля, инженеры DEC прикинули, что стандартному Фортрану 6-символьных внешних имен хватает, ну и нам хватит! Мы же, мол, не Систему-360 проектируем...
- - - Добавлено - - -
Если что, М2 - это цельнотянутая LSI-11/03, отличие лишь в корзиночном разъеме - в оригинале он дюймовый, у нас его сделали метрическим, с шагом ног 3.00 мм.
Фортран тут абсолютно непричем. Это ограничение формата OBJ. Пофигу фортран это, MACRO-11 или еще кто :)
Формат записи о символе в OBJ файле: два слова имени в RADIX-50, байт 0, байт 2 и еще одно слово просто так.
И никаких различий между маленькими и большими буковками. Если такое различие нужно - его нужно реализовывать обходными путями.
Естественно. Но, когда сочиняли этот формат OBJ, по фигу было, сколько слов в RAD50 отвести под это имя - 2, 3 или вообще плюнуть на этот RAD50 и забабахать строку ASCII произвольной длины до 255 символов. Однако выбрали 2 слова RAD50 и нельзя исключить влияние Фортрана, что мол Фортрану 6-символьных идентификаторов хватает, ну и нам хватит.
Более того, похоже, это началось еще раньше. Первый-то ассемблер был абсолютным, результат выдавал в виде LDA-файла. И фактическая длина меток (любых) в 6 символов как бы тоже не с Фортрана была позаимствована - из тех же соображений: Фортрану хватает, и нам хватит!..