Спасибо за ответ, за отсылку к Вирту. Я нашел этот фрагмент уже после того, как написал свою статью. И все-таки нашел в себе смелость уклониться от весомого мнения авторитета и попробовать по-своему - в порядке эксперимента.
Да, Struct, form (сокращение от format) и некоторые другие имена и меня тоже сбивали с толку. Особенно поскольку в Сообщении о языке четко сказано, что структуры, в противовес базовым типам - это записи и массивы (даже не процедуры).
В генераторе кода я обнаружил еще такой хитрый прием: вот есть, напр, у каждого объекта привязанная к нему запись .conval, а в ней - поля .intval и intval2. Мало того, что названия никак не намекают на смысл/назначение этих полей - так еще этот смысл кое-где меняется на ходу. Например, было в .intval позиция в тексте, а потом ее - хоп! - и "перепрятывают" в .intval2, а в .intval кладут что-то другое. И потом это другое путешествует по всему исходному коду: смотришь на .intval, и неизвестно, означает это позицию в тексте, или, скам, смещение в сегменте дескрипторов; чтобы понять, нужно делать анализ вызовов процедур. Причем, если obj.form = Comp и obj.comp = чегонибудь, то obj.conval.intval - это что-тоодно, а иначе - совсемдругое. И хотя это все отлажено и работает - понимать оч сложно. А программы-то пишутся для людей, не для ЭВМ...
Но, конечно, это все - мелкие пять копеек. CP2 продуман, логичен, четко декомпозирован, аккуратно написан и выверен, минималистичен и экономичен. Проштудировав весь анализатор и уже почти весь синтезатор кода, я не могу назвать ни одного критического замечания, кроме невнятных названий типов и полей - напротив, многому научился.
|