Цитата:
Так что "строгость, простота и контроль" относятся к требованию Оберона иметь у процедуры фиксированное количество параметров. Это весьма разумное требование само по себе, но нам оно мешает потому, что вызов процедуры Asm.Code - это программа на ассемблере и параметры - это операторы ассемблера.
Посмотрите, какой механизм процедур с переменным числом параметров у Си. Чтобы извлечь очередной параметр нужно вручную указывать его тип, через макросы передвигать указатель по стеку. Компилятор никак не контролирует ни количество параметров, ни их размер. Вот уж где бескрайний простор для ошибок! Вот чего в Обероне быть не должно!
"Имя процедуры однозначно задает количество параметров"-это наиболее простой принцип. Если бы это было не так, то пришлось бы вводить понятия "профиль процедуры", описывать синтаксис "необязательный параметр", вводить функцию, сообщающую число параметров и пр. Из этого принципа появляется возможность контролировать при вызове соответствие имени процедуры и фактически указанное количество параметров, что выловит некоторые ошибки.
А много ли мы теряем из-за такой строгости? Нет. Если у процедуры может по смыслу быть разное количество параметров, то создайте несколько процедур. А внутри эти процедуры могут вызывать друг друга или вызывать некую общую, скрытую внутри модуля. Если процедура - это некое действие, то иное количество параметров означает немного иное действие.
Простота описания ЯП, простота компилятора, возможность контроля - всё это перевешивает "экономию на именах процедур". Стоит ли нам отходить от этого принципа? Пусть процедура с мультипараметром имеет достаточно ясную и строгую семантику. Но это расширение ЯП Оберон (пусть для системных нужд, но чего лукавить, расширяя Ofront, мы фактически расширяем ЯП, который транслируется Ofront-ом). А внесение фичей в сам язык (тем более новых, не опробованных в родственных компиляторах) - это крайнее средство, к которому нужно прибегать, если иное не сработало и если это расширение сулит значительную выгоду.
Для чего же мы это затеяли, какую значительную выгоду купим введением несовместимого, эзотерического диалекта ? "Так ещё чище асм-код будет смотреться"
Zorko писал(а):
Олежка, прошу не обижаться, но мне эта фишка кажется излишней.
Так не только не обижаюсь, Олежка, но и согласен!
Эти мультипараметры - не более чем "синтаксический сахар", причем "слащавый". Впрочем, Asm.Code4 - тоже сахар. Но здесь хотя бы не нужно расширять ЯП и реализовать можно за 5 минут и накладных расходов практически никаких. А мультипараметры когда еще напишем, когда еще отладим. Но тем не менее, по мне так и
Код: "OBERON"
Asm.Code(' PUSH HL ');
Asm.Code(' LD HL,#0h4000 ');
Asm.Code(' LD (HL),#1 ');
Asm.Code(' INC H ');
достаточно наглядно. Повтор имен процедуры слева и
); справа сливаются в некий узор, который может и не будет отвлекать внимание, если привыкнуть (как багет не мешает изучению картины, а занавес просмотру спектакля). Тем более, если редактор выделяет текстовые константы особой раскраской.
Трудно писать каждый раз "Asm.Code("? Так есть буфер обмена, есть контекстная замена, есть автоматический ввод ключевых слов. Можно подумать над каким-то специальным средством IDE, для сокрытия повторяющихся имен процедуры (или замены их на ---"---). Внешний вид кода - это дело редактора IDE, а не синтаксиса и семантики ЯП (в данном случае). Если мы пишем на ассемблере, то главное - это операторы ассемблера, а Asm.Code( - это техническое обрамление.
ИТАК. Процедуры с мультипараметром - фича малополезная, а учитывая сложность реализации и несовместимость ЯП, так и вовсе вредная. Полезность может быть только в том, что дан повод 1)для полезной дискуссии про "Oberon-way" 2)для изучения Ofront.
Если кто-то реализует процедуры с мультипараметром и продемонстрирует великую полезность для чего-то еще, тогда может и будет повод к этому вернуться.
Хотя не представляю пока эту "великую полезность". Задание константного массива или иной структуры, например, где в каждой строке не одна текстовая константа а разное количество параметров, поэтому как-то тут мультипараметры сильно лучше? Вряд ли...
Вообщем, моё мнение -
мультипараметрами заниматься не нужно. Прошу прощения за провокацию
