Re[23]: СИНТАКСИС
От: Курилка Россия http://kirya.narod.ru/
Дата: 23.06.05 09:50
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Здравствуйте, Mamut, Вы писали:


СГ>>>Если в будущем, например, IBM или Intel соберется изобрести новый язык, то почему-бы им не взять в качестве синтаксической основы правильный синтаксис Modula/Oberon? Их язык от этого только выиграет.


M>>Кто сказал, что этот синтаксис — правильный? Только не надо ссылки на самого себе приводить. Требуется ссылка на строгое математическое доказательство правильности данного синтаксиса.


M>Как всегда, все приходится делать самому. Не знаю, увидят ли это сообщение в этой ветке, ну да ладно.


M>Syntax across languages


M>Некоторые варианты синтаксиса просто великолепны.


Thax, Mamut!
Интересная ссылочка, только вот из виртовских детищ только паскаль, ну, видимо, не интересно людям что там в оберонах всех этих творится...
Re[11]: Так Вы определитесь
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 23.06.05 09:55
Оценка: -1
Здравствуйте, Amidlokos, Вы писали:

A> Однако имеет смысл только для одной проверки. Ну двух. А если точек выхода десяток (по найденному, по обнаруженному битому, срочно по переключению мютекса и т.п.)?


Так Вы определитесь, что конкретно нужно. Приведите конкретный пример. Чтобы потом без всяких там, а вот если бы да кабы, то в носу бы выросли грибы...
Re[16]: LOOP
От: jazzer Россия Skype: enerjazzer
Дата: 23.06.05 09:59
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, Mamut, Вы писали:


M>>Любой цикл и условие в программе можно переписать с использованием только цикла while.


СГ>а его, в свою очередь, через LOOP:


а его, в свою очередь, через GOTO.
Но, видимо, чтоб неповадно было, из Оберона его убрали.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[16]: Яркий пример
От: Пацак Россия  
Дата: 23.06.05 10:00
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Если исполнить эту просьбу, то надо кратко ответить — "У Вас ошибки". Но Вы же наверняка потом спросите, а где именно у меня ошибки? Ведь так, да? Ладно, вместо того чтобы придираться, я сразу напишу по грамотному.


СГ>
СГ>LOOP
(скип)
СГ>END
СГ>


Просто замечательно. То есть любой while-цикл, который требует прерывания по break в обероне автоматически превращается в LOOP.
Есть цикл некий цикл:

while (! end_of_stream()) {
    prepare(...);
    ....
    foo = read();
    ... 
    boo = process(foo);
    .... 
}


Прога, содержащая его давно и нормально работает. Но в один прекрасный момент заказчик-юзер заявляет, что согласно новому протоколу чтение может быть прервано не только при end_of_stream(), но и при некотором сигнальном значении is_terminate_signal(boo). В итоге на С++ код (в общем случае) превращается в

while (! end_of_stream()) {
    ... 
    boo = process(foo);
    if (is_terminate_signal(boo)) break;
    .... 
}


что означает добавление одной (!) строчки. В обероне программист должен переделать WHILE на LOOP с двумя IF .. THEN EXIT END по одному на каждое условие. Безумно удобно, ничего не скажешь!
ИМХО единственное, чего можно добиться таким подходом — так это того, что программисты будут все циклы, кроме самых тривиальных писать через ж... ой то есть через LOOP. Попросту чтоб потом не заморачиваться с возможными переделками.
Ку...
Re[24]: СИНТАКСИС
От: Mamut Швеция http://dmitriid.com
Дата: 23.06.05 10:00
Оценка:
К>Интересная ссылочка, только вот из виртовских детищ только паскаль, ну, видимо, не интересно людям что там в оберонах всех этих творится...

Там еще Modula-3 мелькает иногда


dmitriid.comGitHubLinkedIn
Re[11]: Очередной яркий пример
От: alexku Россия  
Дата: 23.06.05 10:01
Оценка: 3 (1) +2
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, alexku, Вы писали:


A>>То есть, забыл скобки — получил глюк.


СГ>А что Вы можете предложить в замен?


СГ>TYPE Func: PROCEDURE(): Func;


СГ>VAR a: Func;


СГ>a — обозначает саму себя как процедурную переменную

СГ>a() — обозначает результат, который вернула процедура-функция после исполнения

СГ>Как иначе-то, может быть?


Это к вопросу о невозможности допустить ошибку в Обероне, если не понятно.
Re[10]: Open source
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 23.06.05 10:02
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

SJA>Здравствуйте, Сергей Губанов, Вы писали:


СГ>>http://www.rsdn.ru/Forum/Message.aspx?mid=899740&only=1
Автор: Сергей Губанов
Дата: 15.11.04


СГ>>Объяснение этому феномену на самом деле тривиальное...


SJA>Да-да. Совершенно тривиальное. Авторы отчаялись его кому-нибудь впарить, и открыли коды. Думали наверное кого-то завлечь беплатным сыром...


Да не бесплатности объяснение, а объяснение почему сборщик мусора в BlackBox работает в несколько раз быстрее чем сборщик мусора в .NET.
Re[18]: Яркий пример
От: Mamut Швеция http://dmitriid.com
Дата: 23.06.05 10:04
Оценка:
СГ>Уверяю Вас это было видно сразу же по тексту программы. Ведь активация процедуры-функции всегда помечается скобками () даже если список параметров пуст.

Это сыграло мое неполное знание синтаксиса языка. В общем, такое же, как и у вас, когда вы сетовали на оператор "-->" в C++


dmitriid.comGitHubLinkedIn
Re[25]: СИНТАКСИС
От: Курилка Россия http://kirya.narod.ru/
Дата: 23.06.05 10:05
Оценка: :))
Здравствуйте, Mamut, Вы писали:

К>>Интересная ссылочка, только вот из виртовских детищ только паскаль, ну, видимо, не интересно людям что там в оберонах всех этих творится...


M>Там еще Modula-3 мелькает иногда


А она ещё Виртовская? Я уже в этих клонах запутался, если честно, кто там что и куда — хрен разберёшь, зато синтаксис офигенный
Re[9]: Короче
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 23.06.05 10:07
Оценка:
Здравствуйте, Пацак, Вы писали:

П>А, и правда, совсем забыл!


Кстати, можно усовершенствовать:

LOOP a[i] := b[j];
IF b[j] # 0X THEN INC(i); INC(j) ELSE EXIT END
END

так короче.
Re[17]: Яркий пример
От: Mamut Швеция http://dmitriid.com
Дата: 23.06.05 10:08
Оценка: 2 (1) +1
П>что означает добавление одной (!) строчки. В обероне программист должен переделать WHILE на LOOP с двумя IF .. THEN EXIT END по одному на каждое условие. Безумно удобно, ничего не скажешь!
П>ИМХО единственное, чего можно добиться таким подходом — так это того, что программисты будут все циклы, кроме самых тривиальных писать через ж... ой то есть через LOOP. Попросту чтоб потом не заморачиваться с возможными переделками.

Это я так и и продемострировал
Автор: Mamut
Дата: 22.06.05
. Но мои потуги были наинаглейшим образом проигнорированы
Автор: Сергей Губанов
Дата: 23.06.05


dmitriid.comGitHubLinkedIn
Re[18]: Яркий пример
От: Пацак Россия  
Дата: 23.06.05 10:08
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Речь шла не о служебном слове BEGIN, а о самостоятельном блоке BEGIN ... END, которого в Обероне нет.


И чем же пара BEGIN ... END в объявлении процедуры менее самостоятельна, чем в цикле или условном операторе? Тем, что Вирт не догадался написать что-нибудь типа PROCEDURE .... BEGPROC ... END? Или наоборот IF condition BEGIN END?
Ку...
Re[10]: Короче
От: Пацак Россия  
Дата: 23.06.05 10:15
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Кстати, можно усовершенствовать:

СГ>LOOP a[i] := b[j];
СГ> IF b[j] # 0X THEN INC(i); INC(j) ELSE EXIT END
СГ>END
СГ>так короче.

Угу. А вот так — еще короче:

LOOP a[i] := b[j]; IF b[j] # 0X THEN INC(i); INC(j) ELSE EXIT END END


Но вот только до исходного

while (*dest++ = *src++) continue;


по краткости все равно не дотягивает, хоть убейся.
Ку...
Re[8]: Синтаксический оверхед
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 23.06.05 10:15
Оценка:
Здравствуйте, alexku, Вы писали:

A>В этом вашем примере assert(n <= -1) совершенно не имеет смысла, потому что значение n предсказуемо на 100% и всегда будет равно -1.


Это было бы так если бы использовался Modula/Oberon в которых из цикла WHILE нельзя выйти ни каким другим способом. В С# же был выход по break. Поэтому значение n на реальных данных всегда было больше нуля, а не то что больше -1. Ошибку я нашел просто случайно поглядев на исходник, а вовсе не от того что программа упала (она не падала) и я залезши в дебагер стал там чего-то крутить.
Re[18]: Яркий пример
От: qwertyuiop Российская Империя  
Дата: 23.06.05 10:16
Оценка: 3 (1) :)
Q>> какова его практическая польза

СГ>Его можно использовать для математического доказательства правильности алгоритмов. Об этом говорилось в самом начале (верификация).


Можно использовать... А если из цикла несколько выходов — то нельзя? Ну так это проблема ваших методов верификации и это не означает, что так нельзя писать программы или что они от этого станут хуже.

Мне это напомнило случай советских времен, когда какое-то НИИ разработало систему для автоматичекой пайки печатных плат. Правда у нее был маленький недостаток (как и у ваших методов верификации): она могла собирать плату только если на ней стояли все одинаковые элементы. В результате министерство издало приказ: электронная аппаратура должна разрабатываться так, чтобы могла собираться этой системой, то есть на одной плате должны быть только резисторы, на другой — только конденсаторы, на третьей микросхемы одного размера, на четвертой — другого и т.д. И все они должны вставляться в кросс-плату с одинаковыми разъемами.
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Re[21]: Синтаксический оверхед
От: alexku Россия  
Дата: 23.06.05 10:18
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:


СГ>Если в будущем, например, IBM или Intel соберется изобрести новый язык, то почему-бы им не взять в качестве синтаксической основы правильный синтаксис Modula/Oberon? Их язык от этого только выиграет.


А что от этого выиграют IBM и Intel? Похвалу Сергея Губанова?
Re[10]: Синтаксический оверхед
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 23.06.05 10:18
Оценка:
Здравствуйте, jazzer, Вы писали:

J>А в Обероне эти ассерты насильно впаривает компилятор, даже если они тебе здесь нафиг не нужны


Это Вы погорячились. После WHILE или REPEAT их впаривать просто не зачем, математика рулит...
Re[8]: Копирование чисел
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 23.06.05 10:31
Оценка: :)
Здравствуйте, Socrat, Вы писали:

S>Сравни:

S>
S>while (*a++ = *b++);
S>

S>и
S>
S>LOOP 
S>  a[i] := b[j]; 
S>  IF b[j] = 0X THEN EXIT END;
S>  INC(i); 
S>  INC(j)
S>END
S>


Можно еще короче:

LOOP a[i] := b[j];
IF b[j] # 0X THEN INC(i); INC(j) ELSE EXIT END
END

А инструкции с побочным эффектом опасны. Кроме того, код while (*a++ = *b++); вообще писать нельзя так как он не проверяет выход за границы и может привести к такой любомой сишной ошибке как переполнение буфера.

Надо писать хотя бы так:
LOOP
  IF (i < LEN(a)) & (j < LEN(b)) THEN
    a[i] := b[j];
    IF b[j] # 0X THEN INC(i); INC(j) ELSE EXIT END
  ELSE EXIT END
END


С другой стороны, массивы в Pascal/Modula/Oberon это есть обычные типы значения, так что для полного копирования одного массива в другой можно просто написать a := b. Что касается строк, то для работы с ними есть уже встроенные механизмы.
Re[22]: Синтаксический оверхед
От: Privalov  
Дата: 23.06.05 10:33
Оценка:
Здравствуйте, alexku, Вы писали:

A>А что от этого выиграют IBM и Intel? Похвалу Сергея Губанова?


У меня такое ощущение, что гте-то в комитете по стандартам открывается отдел стандартизации синтаксисов. Может, в этом все дело?
Re[15]: Синтаксический оверхед
От: alexku Россия  
Дата: 23.06.05 10:34
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Здравствуйте, Сергей Губанов, Вы писали:


СГ>>Ни кто не кричал что в Обероне не существует слова BEGIN.



P>

P>Где-то в середине 1970-тых годов был открыт реально необходимый и достаточный синтаксис (Modula-2, 1979 год)
P>[...]

P>Обратите внимание: слово "BEGIN" отсутствует вообще во всех инструкциях — оно лишнее.


P>А это
Автор: Сергей Губанов
Дата: 09.06.05
что?


Если видишь в стенке люк,
Не волнуйся, это глюк.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.