Сергей Губанов wrote:
> M>"Не плоди сущностей без необходимости" LOOP — такая вот ненужная > сущность. > Странно, а если нужно проверить условие прекращения итерации уже > находясь внутри итерации, тогда как быть?
while(true)
{
int action=...;
if (action==action_exit)
break;
};
Трурль wrote:
> M>И, хотя это являтся оффтопиком для данной подветки, еще одно замечание: > M> > >M>// С++ >M>if(data != expectedData) // сравниваем две переменные, видно из кода > >M>{* Oberon *} >M>IF data # expectedData THEN // сравинваем две переменные? >M> // переменную и значение функции? >M> // значения двух функций? >M> > > M>Наглядность языка? Где? Не вижу. > То есть в С++ разницу видно, а в Обероне нет? Странно. Может очки каие > надо?
В языке С данный код трактуется _однозначно_: сравение значений двух
переменных. В Обероне, где "соптимизирован" выхов функциий без
аргументов — уже непонятно.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, jazzer, Вы писали:
J>>Потому что он создавался именно для облегчения программирования на С (как и С по отношению к асму, кстати). J>>Цель сугубо практическая. J>>И обкатывался язык не на теоремах, а в руках действующих программистов на С. J>>Почитай D&E.
СГ>Не надо быть прорицателем, чтобы понять, что реальная цель у аспиранта Страуструпа была защитить диссеру чтобы его взяли на работу.
Правильно, не надо быть прорицателем, надо книжку почитать.
В 1979 году у Страуструпа уже была степень Ph.D., защищенная в Кембридже. http://www.research.att.com/~bs/bio.html
В 78-м году он начал работу по использованию идиом Симулы в С.
И это был "С с классами", а не С++, которым мы пользуемся сейчас.
Это был даже не С++, каким он был в 83-м.
When was C++ invented?
I started work on what became C++ in 1979. The initial version was called "C with Classes". The first version of C++ was used internally in AT&T in August 1983. The name "C++" was used late that year. The first commercial implementation was released October 1985 at the same time as the publication of the 1st edition of The C++ Programming Language. Templates and exception handling were included later in the 1980's and documented in The Annotated C++ Reference Manual and The C++ Programming Language (2rd Edition).
The current definition of C++ is The ISO C++ Standard described in The C++ Programming Language (3rd Edition).
You can find a more complete timeline and more detailed explanations in The Design and Evolution of C++.
Why did you invent C++?
I wanted to write efficient systems programs in the styles encouraged by Simula67. To do that, I added facilities for better type checking, data abstraction, and object-oriented programming to C. The particular projects that prompted this work had to do with distributing operating system facilities across a network. The more general aim was to design a language in which I could write programs that were both efficient and elegant. Many languages force you to choose between those two alternatives.
The specific tasks that caused me to start designing and implementing C++ (initially called "C with Classes") had to do with the design of a distributed operating system.
You can find more detailed explanations in The Design and Evolution of C++.
Mamut wrote:
> J>Ты вообще читаешь, что тебе пишут? > J>С++ *не был *академическим проектом! > здесь <http://www.planetpapers.com/Assets/1847.php> > Stroustrup began C++ in 1978 as a project writing a “simulator for > described computer systems” for his Ph.D. at the Computing Laboratory > at Cambridge.
Это был _не_ С++ — это был "C with classes".
> здесь <http://www.hitmill.com/programming/cpp/cppHistory.html> > C++ was written by Bjarne Stroustrup at Bell Labs during 1983-1985. > C++ is an extension of C. Prior to 1983, Bjarne Stroustrup added > features to C and formed what he called "C with Classes"
В 1983 году Страуструп опубликовал свое детище и начал его "рекламу". Он
четко определил границы языка, обозначил цели языка: "you pay as you
go", "обратная совместимость с С" и "быть практичным". С этого момента,
собственно, и начался отсчет языка С++.
С++ не был академическим проектом — в его разработке участвовала широкая
community, Страуструп получал постоянный feedback от пользователей (чем
в большой мере и обусловлен успех С++), и т.п.
Сравните с Виртом — он чего-то несколько лет пишет, а потом дарит всему
миру свое новое изобретение (естественно, ломая обратную совместимость).
Сергей Губанов wrote:
> C>Угу, поэтому все академические разработки весьма успешно загибаются. > Между прочим, Java и .NET есть коммерческие реализации идей > опробованных на оберонах.
Это только свидетельства того, что только практики могут превратить
невнятную теоретическую идею в нормальную реализаци.
ЗЫ: кстати, а что там у Оберонов-то новое? GC известен с 68 года,
система пакетов в Обероне содрана с Ады (причем содрана не польностью —
выдраны генерики). Больше инноваций в Обероне незаметно.
Здравствуйте, Cyberax, Вы писали:
C>Mamut wrote:
>> J>Ты вообще читаешь, что тебе пишут? >> J>С++ *не был *академическим проектом! >> здесь <http://www.planetpapers.com/Assets/1847.php> >> Stroustrup began C++ in 1978 as a project writing a “simulator for >> described computer systems” for his Ph.D. at the Computing Laboratory >> at Cambridge.
C>Это был _не_ С++ — это был "C with classes".
Я просто некорректные цитаты привел. Я не в качестве опровержения это приводил В общем, jazzer хорошо сказал
Здравствуйте, Кодт, Вы писали:
К>ZX Spectrum, БК-001, ещё какие-то модели микрош-ириш такой фичей обладали. Одна кнопка — одна лексема васика. У БК и Спектрум они даже подписаны были (соответственно, имели несколько шифт-клавиш ). К>МИР (Машина Инженерных Расчётов), насколько я слышал, тоже (свой собственный язык программирования).
А ты японскую печатную машинку видел? Ту, что для составления совсем официальных документов, которые обязательно нужно на японском писать? Вообще-то они вполне английским обходятся для официальных документов, но есть небольшая категория таких, что только по японски можно.
Рассказываю: стоит этакий гроб на ножках размером (если сверху смотреть) приблизительно метр на метр. По нему ездит станина со ступенчатой передачей, а по станине в направлении, перпедикулярном направлению движения станины, ездит хреновина килограмма на два весом с рукояткой. Тетка (японская секретарша) сначала выставляет станину на нужный ряд, потом по станине двигает эту байду (не знаю даже как ее назвать) до нужного места, после чего хрясь по рукоятке! Готово, один иероглиф напечатан. Теперь для следующего иероглифа выполняем процедуру с самого начала. Там, конечно, далеко не все иероглифы, только те, что обычно требуются для официального письма. Но все же! Они приблизительно 5х5 мм, следовательно там их помещается ~40000. Я когда это первый раз увидел — охренел просто. И именно тогда я оценил простоту и рациональность латинского и кириллического алфавитов.
Курилка wrote: > Здравствуйте, Сергей Губанов, Вы писали: > > СГ>Я для этого что-ли ошибку-то тут засвечивал? Я ее тут засвечивал для > того чтобы показать, что в Modula/Oberon-образном синтаксисе ошибки > таких сортов невозможны. > > Доказательства в студию!
Не знаю, как в Обероне (не к добру вечный CAPS LOCK), но в Паскаль
тяжело написать if a>3 then; begin writeln(); end; — должен ругнуться.
И при этом if a then b() else c(); — точка с запятой только в конце
простого if-блока, то есть желания поставить не возникает (что тоже
плюс). Просто сам на этом в Си налетал (Точка с запятой после if — это
не только знак пунктуации, но и два, три часа безуспешной отладки в
первый раз!!).
СГ>Так ведь я же и написал, что именно в этом-то и состяла моя ошибка.
Это-то понятно. Непонятно только, как этот факт может продемонстрировать преимущемтва Оберона. Ведь там тоже есть операция декремента — DEC(x), кажется? Если ее воткнуть на место x--, то Вы ошибетесь точно так же. Или эта операция не возвращает значения и потому не может использоваться в выражениях? В таком случае это отсутствие гибкости которым не следует хвалиться.
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, qwertyuiop, Вы писали:
Q>>Оберон же фактически заставляет программиста всегда использовать составной оператор, заключаа его между THEN и END. И это хорошо?!
СГ>Да это хорошо. Найдите ошибку в следующем си-образном коде (компилятор ее не найдет, так как формально программа корректна): СГ>
Найдет и не пропустит. Во-первых, отругается на выделенное полужирным ("empty controlled statement"). Во-вторых, отругается на выделенное курсивом и назовёт его наподобие "unreachable code" — "недостижимым кодом" (т.к. перед ним всегда, получается, вываливаемся по return).
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true
Здравствуйте, Сергей Губанов, Вы писали:
СГ>1) Страуструп на момент придумывания им С++ был (еще совсем зелёным) аспирантом. СГ>2) Лауреат премии Тьюринга Никлаус Вирт на момент создания Оберона был профессором и было ему где-то под пятьдесят.
Намекаешь, что он к тому времени уже выжил из ума как большинство профессоров?
Здравствуйте, Трурль, Вы писали:
M>>Наглядность языка? Где? Не вижу. Т>То есть в С++ разницу видно, а в Обероне нет? Странно. Может очки каие надо?
Вызов функции в C++ всегда обозначен скобками: somebody(). Скобок нет — переменная. "Виртовский бесскобочный" синтаксис не указывает на то, что это за такое somebody в коде встретилось.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true
Q>>как научный работник умело подтасовывает данные.
СГ>Действительно я ошибся. Не по злому умыслу, простите. Привык для получения оверхеда делить большее число на меньшее. Сожалею об этом.
Да-да, конечно... В своей кандидатской тоже такими методами не брезговали?
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Здравствуйте, Amidlokos, Вы писали:
СГ>>Мне даже интересно стало. Может покажете пример?
A>Пожалуйста. Из недавне-жизненного, пусть и "своими словами". Первое:
A>
A>// Классика: проход по самописному связному списку с поиском
A>// нужного элемента
A>while (pItem->Next)
A>{
A> if (CheckItem(pItem))
A> break;
A> pItem = pItem->Next;
A>}
A>// И здесь ещё обработка найденного pItem...
A>
Даже неловко как-то. Ну ладно.
Кстати, можно заодно вопрос: а если в самом начале pItem = NIL?
Думается, лучше проверить. Получаем:
WHILE (pItem # NIL) & ~CheckItem(pItem) DO pItem := pItem.Next END;
А почему на Си++ нельзя сделать так же?
while (pItem && !CheckItem(pItem))
p = pItem->next;
A>Второе:
A>
A>// Цикл по всему массиву некоторых объектов.
A>for (DWORD i = 0; i < dwCount; i++)
A>{
A> // Здесь ведётся определённая обработка _и учёт_ этих объектов.
A> // Условия таковы, что обработка может закончиться где-то на середине
A> // списка, а может и дойти до конца в зависимости от некоторого обнаруженного
A> // условия. Т.е. объектов может быть и десять тысяч, но мы насчитаем нужное
A> // количество интересующих нас уже за первую дюжину.
A> WorkWithObject(pObjects[i]);
A> if (CalculateStat() > SOME_VALUE)
A> break;
A>}
A>// Здесь ещё продолжаем некоторую работу...
A>
Бог мой, какая трудная задача!
IF dwCount > 0 THEN i := 0;
REPEAT
WorkWithObject(pObject[i]);
INC(i)
UNTIL (i = dwCount) OR (CalculateStat() > SOME_VALUE)
END;
Может быть, Вам не нравится, что переменная i видна за пределами конструкции?
Извольте, могу спрятать ее в локальной процедуре (на всякий случай напомню, что локальные процедуры могут встраиваться)
PROCEDURE WorkWithObjects;
VAR i: INTEGER;
BEGIN
FOR i := 0 TO dwCount DO
WorkWithObject(pObject[i]);
IF CalculateStat() > SOME_VALUE THEN RETURN END
END
END WorkWithObjects;
...
WorkWithObjects;
A>Теперь прошу Сергея представить версии без break. И не просто без break, а ещё и без уродства в духе A>
A>int Exit = 0;
A>while ((i < nCount) && !Exit)
A>{
A> if (Something(object[i]))
A> Exit = 1;
A> // И т.д.
A> i++;
A>}
A>
A>Или аналогично уродливых разновидностей с for-ом...
Да-да, Сергей, не делай так, как Amidlokos!
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Здравствуйте, Пацак, Вы писали:
П>Здравствуйте, AVC, Вы писали:
AVC>>По виду — типичный планировщик задач.
П>ХЗ что это — из головы придумал. У меня на работе даже сишного компилера нет, если честно.
AVC>>Не могу понять, зачем постоянно проверяется наличие в очереди элементов? Они ведь в цикле не удаляются.
П>Учитывая принцип "черного ящика" — мы не можем это сказать. Можем сказать лишь что они не удаляются в этом цикле этой программы.
Очень мило.
Вы предлагаете написать код, но не формулируете ни его смысла, ни условий его эксплуатации.
Я не знаю происхождения Вашего кода, но сдается мне, что "принципу черного ящика" (интересно, каков он в Вашем понимании?) он определенно не соответствует.
Например, поиск первого свободного элемента (процесса?) и его активизация не являются атомарной операцией. Глюк?
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Здравствуйте, Mamut, Вы писали:
M>И, хотя это являтся оффтопиком для данной подветки, еще одно замечание: M>
M>// С++
M>if(data != expectedData) // сравниваем две переменные, видно из кода
M>{* Oberon *}
M>IF data # expectedData THEN // сравинваем две переменные?
M> // переменную и значение функции?
M> // значения двух функций?
M>
M>Наглядность языка? Где? Не вижу.
M>Просьба к коду не придираться
Да Бог с ним, с кодом; какая разница, ведь Вы просто не знаете языка.
И в Си++, и в Обероне в данном случае сравниваются переменные.
И вызов функции, и ее определение требуют круглых скобок, даже если функция вызывается без параметров.
В Си++, например, напротив, конструктор без параметров не должен иметь скобок, чтобы компилятор не принял его за прототип функции.
Понимаете, в чем закавыка. Я программирую как на Си++, так и на Обероне. (Оберон мне нравится больше, но для того, что я хочу Вам сказать, это не имеет значения.)
В то же время ни Вы, ни большинство других "оппонентов" (какими они зачастую себя только воображают) Оберона не знают и на нем не пишут.
Отсюда беспрерывные "откровения" вроде Вашего (со сравнением переменных) или уж откровенно глупого "оказывается, в Обероне есть BEGIN!!!". О перлах вроде "мне нас**ть на принципы структрного программирования" я уж и не говорю.
Я отношусь к Вам с уважением и часто с удовольствием читаю Ваши посты.
Поэтому мне жаль видеть Вас среди людей, которые, зная горячность Сергея (Губанова), нарочно "заводят" его, имитируя непонимание даже очевидных вещей, а затем откровенно издеваются над ним.
Видели бы вы все себя со стороны!
Попробуйте сами объяснить для себя присутствие столь многих и столь заведомо необъективных и даже откровенно злых людей на этом форуме, если эта тема так им неинтересна, если Оберон — такой уж плохой язык?
Можете рассматривать это как "открытое письмо".
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Евклидовое пространство является частью ее формулировки (что такое Сбитень? Это Першин. А что такое Першин? Это сбитень.) Но для кого она правильна?
Что такое этот пост Сергея Юрьевича Губанова? Это скрытая реклама!
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true