Вы не читали?
СГ>Там не по теме. В этой ветке форума обсуждается си-образный синтаксис vs Modula/Oberon-образный. Если Вам охота какой-то другой синтаксис сравнить заводите другую ветку форума. Но такой популярности как эта ветка, она вряд ли добьется.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Mamut, Вы писали:
M>> А как процедуру с несколькими точкаи выхода не дано?
СГ>Я не понял вопроса.
M>>
M>>PROCEDURE
M>> IF cond1 THEN RETURN 1 END;
M>> IF cond2 THEN RETURN 2 END;
M>> IF cond3 THEN RETURN 3 END;
M>>END
M>>
M>>Или такое тоже не скомпилируется?
СГ>Такое — нет, скомпилируется вот такое: СГ>
СГ>PROCEDURE ProcName(): INTEGER;
СГ>BEGIN
СГ> IF cond1 THEN RETURN 1 END;
СГ> IF cond2 THEN RETURN 2 END;
СГ> IF cond3 THEN RETURN 3 END
СГ>END ProcName;
СГ>
Ну епт (все же начал материться ). Можете считать то, что я написал псевдокодом. Повторяю то, о чем говорилось в ветке:
SAV> Цикл должен быть вещью в себе (не знаю как это выразить, надеюсь эту фразу вы поймете правильно).
Выразить это можно используя процедуры. Цикл должен быть вещью в себе в том смысле, что его тело можно оформить как независимую процедуру, а в случае с несколькими выходами, как несколько независимых процедур.
Здравствуйте, Mamut, Вы писали:
M>"Не плоди сущностей без необходимости" LOOP — такая вот ненужная сущность.
Странно, а если нужно проверить условие прекращения итерации уже находясь внутри итерации, тогда как быть?
Наоборот, это WHILE и REPEAT выводятся из LOOP как частные случаи.
WILE a DO ... END можно понимать как сокращенную запись: LOOP IF a THEN ... ELSE EXIT END END,
REPEAT ... UNTIL b можно понимать как сокращенную запись: LOOP ... IF b THEN EXIT END END.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Если в самом синтаксисе нет возможности для отслеживания опечаток, то как компилятор их найдет? В этом смысле синтаксис первичен, а пользователи вторичны. А вот уже из всех возможных правильных синтаксисов, надо выбрать тот, который будет еще и максимально удобен пользователю. Вот в какой последовательности нужно идти, а не в обратной.
А компиляторы языков с C-like синтаксисом и не занимаются нахождением опечаток. Ответственность — на пользователе. Да, совершенства нет. Вы хотите обеспечить отсутствие опечаток? Ок, пишите на Обероне. Хотите добиться гибкости и выразительной силы, присущей C++? На нем и пишите. Хотите получить reflection, run-time проверки и мощь .NET Framework? Используйте C#. Проблемы нет. НО! Ничего не дастся бесплатно. Выигрываем в одном — теряем в другом. Для Вас важно никогда не делать опечатки? Пожалуйста, пишите на Обероне сколько угодно, я слова худого не скажу. Но так уж получается, что подавляющему большинству программистов гораздо более важны другие вещи — производительность, удобство в написании и сопровождении, прозрачная поддержка (на уровне языка) определенных концепций и т.д. Опечатки для них — наименьшее зло и они готовы с ним мирится, так как в конечном счете решить задачу получается гораздо быстрее и эффективнее. А самый большой грех в наш век — это неэффективность.
Поэтому и не выживают языки с правильным синтаксисом. Закон естественного отбора, если хотите. Ибо синтаксис — вовсе не самое важное в языке.
Здравствуйте, jazzer, Вы писали:
J>Правомерно, только если брать возможности среды, зафиксированные стандартом оберона (раз уж они неразделимы). J>Которые, соответственно, прошу в студию.
Опорная реализация подойдет? (reference design, стандарт de facto так сказать) Смотрите главный обероновый сайт. Там есть.
Здравствуйте, Mr. None, Вы писали:
СГ>>а почему не сам Оберон?
MN>Ну уж это звиняйте физически невозможно... Разве что только писать не листочке, потом в уме компилировать в инструкции процессора и вбивать руками их в файл... Другого способа не вижу...
Есть технология под условным названием "раскрутка", с помощью нее, например, Вирт создал Оберон. Заключается она в том, что сначала реализуется компилятор очень переочень маленького подмножества языка (например, на ассемблере, хотя Вирт брал Модулу, но это не принципиально). Затем пишется компилятор на этом подмножестве этого языка. Он компилирует сам себя. Вносятся расширения в язык. Компилятор переписывается, на языке с предыдущей итерации. И так далее. Процесс очень тяжелый. Но зато в результате появляется очень маленький и в тоже время очень мощный язык. Если ты сам себе не враг, то не добавишь в язык ничего лишнего, а добавишь как раз то что реально необходимо.
Здравствуйте, Сергей Губанов, Вы писали:
J>>Правомерно, только если брать возможности среды, зафиксированные стандартом оберона (раз уж они неразделимы). J>>Которые, соответственно, прошу в студию.
СГ>Опорная реализация подойдет? (reference design, стандарт de facto так сказать) Смотрите главный обероновый сайт. Там есть.
Нет. Нам стандарт de jure пожалста. Ну, тот которым все Оберонщики очень гордятся, что он маленький и компактный. Это должно быть там.
Здравствуйте, Sergey J. A., Вы писали:
SJA>Нет. Нам стандарт de jure пожалста. Ну, тот которым все Оберонщики очень гордятся, что он маленький и компактный. Это должно быть там.
Я читал. Нет там ничего. Ссылку навскидку не вспомню.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>... Но зато в результате появляется очень маленький и в тоже время очень мощный язык. Если ты сам себе не враг, то не добавишь в язык ничего лишнего, а добавишь как раз то что реально необходимо.
В результате получится язык, на котором очень легко скомпилировать самого себя. С чего должна получится мощность языка я не вижу.
Здравствуйте, Privalov, Вы писали:
SJA>>Нет. Нам стандарт de jure пожалста. Ну, тот которым все Оберонщики очень гордятся, что он маленький и компактный. Это должно быть там.
P>Я читал. Нет там ничего. Ссылку навскидку не вспомню.
Да я знаю, что там ничего нет. Разве в 30 страниц чего-нить можно описать, кроме синтаксиса.... Это, что бы уважаемый аффтар не соскочил. Хотя, всё равно ведь соскочит...
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Есть технология под условным названием "раскрутка",...
Дак ведь Си точно так же создавался. Интерпретатор Tiny C, за ним Small C, ну и т. д. Разумеется, речь идет об одной из реализаций. Даже об этом книга была выпущена. Этот самый Small C студентам на лабораторных по проектированию компиляторов давали работать.
А еще есть тест для компилятора: если он самого себя компилирует — значит, есть надежда.
Здравствуйте, Mr. None, Вы писали:
MN> или на что вы знаете ответ...
Я действительно отвечаю только на то на что ответить могу. Вообще-то это тавтология, так как нельзя ответить на то на что ответить не можешь.
MN>Четврётого варианта я не вижу.
Он есть.
1) Если компилятор + рантайм Оберона уже написан на чем-то, то переписать его на самом Обероне можно.
2) Потом, то первое выбрасываем и забываем.
3) В качестве того первого может выступать более урезанная и опасная версия самого Оберона.
4) Можно эту итерацию повторить очень много раз, каждый раз переписывая заново все на языке из предыдущей итерации.
Этот процесс создания компилятора+рантайма Никлаус Вирт назвал словом "раскрутка". Собственно, в результате раскрутки и был создан первый язык Оберон + его компилятор + операционная система Оберон.
MN>Варианты ответа 1 и 2 атоматически означают, что сам по себе GC не защищён и может содержать ошибки, следовательно ошибка в GC не будет перехвачена обероном и приложение таки упадёт, будь оно хоть трижды надёжным (не знаю зачем вообще я это объясняю — это должно быть понятно всем и так). Вариант 3 не говорит ни о чём, кроме того, что вы не знаете и всё.
Вы правы. По этому поводу Никлаус Вирт как раз и ругал все эти дебагеры. А имеено, он говорил, что существуют программы, которые нельзя дебажить — сборщик мусора, например. В его статье про создание Оберона он на этом специально акцентирует внимание. Сборщик мусора должен быть написан с особой тщательностью.
Но, дело в том, что по мере раскрутки, язык становится все более "правильным", так что начиная с какого-то витка раскрутки программировать становится все проще и проще. Вероятность сделать ошибку в сборщике мусора уменьшается по мере выполнения процесса раскрутки.
Здравствуйте, Mr. None, Вы писали:
MN>Ну продемонстрировали вы числа... И что? Я тоже много чисел знаю...
Так продемонстрируйте! Создайте новую ветку в форуме. Покажите числа. Кто знает, может быть народ тоже накинется их обсуждать. А может проигнорирует. Мои числа почему-то не проигноровали, хотя могли бы. Наверное мои числа получились числятее чем обычные.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Этот процесс создания компилятора+рантайма Никлаус Вирт назвал словом "раскрутка". Собственно, в результате раскрутки и был создан первый язык Оберон + его компилятор + операционная система Оберон.
Вау! Раскрутку оказывается святой Вирт придумал...
А вот лисперы почти полвека её используют и не знают сего факта — бедняги, однозначно...