Вот теперь я знаю, что есть такой замечательный язык — Оберон!!!
Оказывается, я стоьлко лет зря потратил на изучение этого отстойного С++ ! Какой же ужасный код я до этого писал! Все, буду учить Оберон! Плевать на плюсы! Куплю новую клавиатуру, чтобы на ней всегда были читенькие клавиши с великими русскими буквами Х и Ъ ! Правда, с тех пор, как мне показали что такое Visual Assist, у меня чистенькая только Ъ, а Х... х... херня все это.... бред потомственного паскалиста
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Privalov, Вы писали:
P>>Здравствуйте, Сергей Губанов, Вы писали:
СГ>>>Путаницы не возникает ни когда — любые две инструкции всегда разделяются разделителем.
P>>
P>>
P>>WHILE a DO x; y; z END
P>>
P>>То есть здесь z и END — одна инструкция?
СГ>1) Можно ответить: Да! Семантика этой инструкции: "Выполнить z и перейти к началу цикла WHILE". СГ>2) Можно ответить: END — это не инструкция, а часть составной инструкции WHILE DO END, ведь инструкции бывают как простыми так и составными.
Ой ладно, ребятки от конфликта "<>" (или <= не помню уже точно ) не могли избавиться в грамматике вот лупят контексты, для разрешения..
есть еще варианты для ткскть разрешения, end if, end loop и прочее,.. в данном случае конфликт разрешится сам собой ..
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
СГ>А, ну, тут прошу прощения, в принципе ни чем. Просто оборот речи. Смысл оборота — гиперболизация масштаба, дескать отличается не на чуть-чуть, а сильно.
Сергей, а вы знакомы с языком Eiffel? Он декларирует почти те же принципы, что и Оберон, только более проработанный, и конечно, более читаемый. Все возможности оберона он покрывает, AFAIK. Распространён и поддерживается достаточно широко.
MODULE BottlesOfBeers; (* Andrejs Jansons 27.10.95 *)
IMPORT Out;
PROCEDURE Start*;
VAR
bottles: INTEGER;
BEGIN
bottles := 99;
REPEAT
Out.Int(bottles, 2);
Out.String(" bottles of beer on the wall, ");
Out.Int(bottles, 2);
Out.String(" bottles of beer.");
Out.Ln;
Out.String("Take one down, pass it around, ");
DEC(bottles);
Out.Int(bottles, 2);
Out.String(" bottles of beer on the wall.");
Out.Ln
UNTIL bottles = 1;
Out.String("1 bottle of beer on the wall, one bottle of beer.");
Out.Ln;
Out.String("Take one down, pass it around,");
Out.String(" no more bottles of beer on the wall");
Out.Ln
END Start;
END BottlesOfBeers.
Eiffel:
class BEERS
creation
make
feature -- Creation
make is
local
i : INTEGER
b : STRING;
do
from i := 99 variant i until i <= 0 loop
if i = 1 then
b := " bottle";
else
b := " bottles"
end -- if
io.put_integer(i);
io.put_string(b);
io.put_string(" of beer on the wall, ");
io.put_integer(i);
io.put_string(b);
io.put_string(" of beer,");
io.new_line;
io.put_string("Take one down and pass it around, ");
i := i - 1;
io.put_integer(i);
io.put_string(b);
io.put_string(" bottles of beer on the wall.");
io.new_line;
end -- loop
io.put_string("Go to the store and buy some more,");
io.new_line;
io.put_string("99 bottles of beer on the wall.");
io.new_line;
end;
end -- class BEERS
В Эйфеле, например, побольше возможностей для ОО и DBC, если бы вы боролись за Эйфель, вам было бы немного легче отбиваться от нападок С++-ников и можно было бы даже иногда нападать. А пока единственный серьезный аргумент, это "язык для встроенных или реал-тайм систем", этого недостаточно для потеснения С++
О да!!!! Предлагаю присвоить господину Губанову звание почётного Петросяна RSDN!
Вот только ваши научные умозаключения содержат ряд ошибок в том, что касается необходимости и достаточности конструкций Pascal`я... Вот вам гораздо более компактные конструкции:
Цикл с проверкой условия в начале итерации
l1: call a ; a помещает результат в регистр cx: 0 - если false, 1 - если true
jcxz l2
call x
jmp l1
l2:
Цикл с проверкой условия в середине итерации
l1: call x
call a ; a помещает результат в регистр cx: 0 - если false, 1 - если true
jcxz l2
jmp l1
l2:
call y
Цикл с проверкой условия в конце итерации
l1: call b ;a помещает результат в регистр cx: 1 - если false, 2 - если true
call x
loop l1
Инструкция выполнения по условию
call a ;a помещает результат в регистр cx: 0 - если false, 1 - если true
jcxz l1
call x
l1:
Инструкция выполнения по условию с альтернативой
call a ;a помещает результат в регистр cx: 0 - если false, 1 - если true
jcxz l1
call x
jmp l2
l1: call y
l2:
Перерасход считайте сами, но если вы эти команды переведёте в бинарные коды, уверяю вас, они станут ещё компактнее и вообще будут записываться в одну строчку.
Так что как видите паскаль, не самый компактный язык! Вот только с компонентностью в ассемблере вы малость... эээ как бы это по цензурнее выразиться... а вот: ЗАПАРИТЕСЬ!
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Здравствуйте, Sheridan, Вы писали:
S>Здравствуйте, Курилка, Вы писали:
К>>Ну дак пиши на K тогда, что мозги-то компостировать?
S>Лучше на brainfuck или вообще на whitespace...
perl адназначна... вот где никакого оверхеда ... вот только фиг прочтёшь, что написано...
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Здравствуйте, Слава Шевцов, Вы писали:
СШ>Здравствуйте, Сергей Губанов, Вы писали:
СШ>do x() while(b);
Да как вы могли!!! Так расточительно использовать... эээ синтаксические конструкции... их же видать ограниченное число... вот как надо:
while(x(), b);
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Здравствуйте, Airat Burganov, Вы писали:
AB>По-моему, пора уже сказать для чего была затеяна дискуссия. Провокация удалась на славу. Кто не верит, что это провокация, читайте ответы автора — он же не внимает абсолютно никаким доводам — один против всех . Это однозначно удавшаяся шутка.
Глупость это, а не шутка.
... << RSDN@Home 1.1.4 beta 7 rev. 463>>
Re[3]: Синтаксический оверхед
От:
Аноним
Дата:
14.06.05 09:26
Оценка:
Здравствуйте, Demiurg, Вы писали:
D> Глупость это, а не шутка.
Здравствуйте, Mr. None, Вы писали:
СШ>>do x() while(b); MN>Да как вы могли!!! Так расточительно использовать... эээ синтаксические конструкции... их же видать ограниченное число... вот как надо: MN>
while(x(), b);
Надо вот так:
dowhile x b
Отдельные джигиты могут выразить функцию dowhile через комбинаторы SKI.
Здравствуйте, Сергей Губанов, Вы писали:
P>>Да, а что там с доказательством того что P>>
СГ>>>Где-то в середине 1970-тых годов был открыт реально необходимый и достаточный синтаксис (Modula-2, 1979 год)
P>>действительно необходимый и достаточный?
СГ>Это очень просто. При условии не наделять каким-либо дополнительным смыслом символы пробела, табуляции и новой строки кроме смысла и так натурально им присущим, все представленные в том сообщении отдельные инструкции являются минимально возможными.
СГ>Вот смотрите, заменим все служебные слова на символ "*" СГ>
СГ>REPEAT x UNTIL b = * x * b
СГ>
СГ>между каждой "пользовательской" лексемой стоит не более одной звездочки. Меньше одной звездочки поставить нельзя — мы договорились пробельные символы не перегружать. Значит минимум достигнут. А то что этого достаточно, следует из смысла рассматриваемых инструкций.
Фигня! Вот пример:
call x
call b ;b помещает результат в регистр cx: 0 - если false, 1 - если true
jcxz $-4 ; не помню сколько байт занимает команда call, но смысл поняте
Так как call x и call b семантически равны x() и b(), то расставляем ваши звёздочки:
x b *
о-па... не является ваш синтаксис минимальным...
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Здравствуйте, Banch, Вы писали:
B>Здравствуйте, Сергей Губанов, Вы писали:
СГ>>
СГ>>WHILE a DO x; y; z END
СГ>>
B>Людей, которые пишут так вот в одну строчку я на работу не возьму. B>Потому что прочесть этот код будет невозможно!
Прочесть-то может быть и можно, но вот отладчиком войти и посмотреть сколько итераций произойдёт и как функции будут вызываться — это проблематично... Но на оберонах новерно отладчики не нужны — баги сами отлавливаются и исправляются...
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
B>>Людей, которые пишут так вот в одну строчку я на работу не возьму. B>>Потому что прочесть этот код будет невозможно! MN>Прочесть-то может быть и можно, но вот отладчиком войти и посмотреть сколько итераций произойдёт и как функции будут вызываться — это проблематично... Но на оберонах новерно отладчики не нужны — баги сами отлавливаются и исправляются...
А это беда большинства отладчиков, которые расставляют точки следования по строкам, а не по отдельным выражениям или хотя бы инструкциям.
Контрпример — отладчик VB6. Он позволяет трассировать однострочные программы.
Здравствуйте, xBlackCat, Вы писали:
BC>Люди, а куда делся сам, так сказать, "виновник торжества"? А то как-то флейм начинает затихать. Скучно становится...
Во-во! А тут еще и Мораторий
BC>>Люди, а куда делся сам, так сказать, "виновник торжества"? А то как-то флейм начинает затихать. Скучно становится... A>Во-во! А тут еще и Мораторий
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Тогда не было интернета. Вот если бы все ковбои отметившиеся в этой ветке были бы собраны в одной комнате, то я бы конечно не рискнул войти в эту комнату запереть ее изнутри и сообщить присутсвующим что Си-образный синтаксис оказывается устарел 25 лет назад. А с интернетом, глядишь, по голове не настучат
Ничего. Осталось пару постов и шерифы, построят ковбоев свиньёй и начнут просев интренета квадратно гнездовым методом... С последующим праздничным линчеванием и сожжением на костре.
Здравствуйте, xBlackCat, Вы писали:
BC>Люди, а куда делся сам, так сказать, "виновник торжества"? А то как-то флейм начинает затихать. Скучно становится...
Здравствуйте, Сергей Губанов, Вы писали:
СГ>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо. СГ>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).
СГ>Давайте посчитаем количественно этот перерасход? СГ>Хочется понять на сколько он "минимален", так сказать. СГ> Резюме
СГ>Программа записанная в Си-образном синтаксисе содержит в разы, а не на проценты больше лексем и строчек кода чем это реально необходимо. Спрашивается, и как долго этот синтаксис еще будет существовать?
"Реально необходимо" — понятие субхективное. Например, мне на С писать гораздо удобнее, чем на Обероне, или что там у вас. Синтаксический оверхед не является самым важным параметром языка, от которого что-то зависит. Из этого исследования можно так же вывести, что языки с большим оверхедом более популярны, например
Re[2]: Синтаксический оверхед
От:
Аноним
Дата:
14.06.05 20:12
Оценка:
Здравствуйте, xBlackCat, Вы писали:
BC>Люди, а куда делся сам, так сказать, "виновник торжества"? А то как-то флейм начинает затихать. Скучно становится...