Re[9]: Синтаксический оверхед
От: jazzer Россия Skype: enerjazzer
Дата: 22.06.05 14:30
Оценка:
Здравствуйте, moudrick, Вы писали:

M>Позвольте раз в жизни согласиться с Сергеем Губановым (отпишусь-ка я на всякий случай от этой ветки, а то страшненько :maniac:).

M>Ассерт тут по смыслу очень даже правильный.

Зависит от ситуации. Я вот не могу вспомнить реального случая, чтобы мне такой ассерт после цикла понадобился.

M>(вода поскипана)


Никто и не наезжал на ассерты вообще. Любой сишник, думаю, подтвердит, что ассерты рулят.

Другое дело, что программер ставит ассерты там, где ему надо.

А в Обероне эти ассерты насильно впаривает компилятор, даже если они тебе здесь нафиг не нужны: ну вот не собираешься ты использовать n дальше, и все тут (как обычно и бывает, кстати: это настолько частый вариант, что синтаксис С++ специально был расширен, позволяя объявлять переменные прямо в условиях if и while, и сократив видимость обявления в for), зато собираешься выйти из середины цикла без лишних плясок с условием цикла.

В результате из-за этого ненужного в большинстве случаев встроенного ассерта программист не может выразить свою мысль понятным способом при помощи цикла WHILE, а обречен извращаться с LOOP.
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[14]: Синтаксический оверхед
От: Privalov  
Дата: 22.06.05 14:32
Оценка: +2 :))
Здравствуйте, Mamut, Вы писали:

P>>Это, IMHO, стандартный метод превращения дискуссии во флейм. Вместо ответа по существу — выпячивание мелочей и игнорирование сути.


M>Какой-то ответ
Автор: Сергей Губанов
Дата: 22.06.05
там все же появился. Советую почитать. Я долго смеялся


Да, я видел. По-моему, даже отметился. Что-то насчет классиков. Правда, это не поможет...

P>>P.S. А BEGIN в Обероне существует! А кто-то кричал не своим голосом, что нет и что это устаревший синтаксис.


M>"А она все же вертится"



BEGIN видишь? А он есть! (c)
Re[15]: Яркий пример
От: Трурль  
Дата: 22.06.05 14:33
Оценка: :)
Здравствуйте, Mamut, Вы писали:


M>И, хотя это являтся оффтопиком для данной подветки, еще одно замечание:

M>
M>// С++
M>if(data != expectedData) // сравниваем две переменные, видно из кода

M>{* Oberon *}
M>IF data # expectedData THEN // сравинваем две переменные? 
M>                            // переменную и значение функции?
M>                            // значения двух функций?
M>


M>Наглядность языка? Где? Не вижу.

То есть в С++ разницу видно, а в Обероне нет? Странно. Может очки каие надо?
Re[7]: Синтаксический оверхед
От: qwertyuiop Российская Империя  
Дата: 22.06.05 14:35
Оценка: +1
СГ>Да это хорошо. Найдите ошибку в следующем си-образном коде (компилятор ее не найдет, так как формально программа корректна):

Большинство современных компиляторов выдают на такую строчку предупреждение
СГ>
СГ>    if(ВыполненоНекотороеУсловие2());
СГ>        return ВернутьНекотороеЗначениеОпределяемоеСледующимиПарамертами2(a, b, c, d, e, f, h);
СГ>
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Re[10]: Синтаксический оверхед
От: Трурль  
Дата: 22.06.05 14:37
Оценка:
Здравствуйте, jazzer, Вы писали:


J>Никто и не наезжал на ассерты вообще. Любой сишник, думаю, подтвердит, что ассерты рулят.


J>Другое дело, что программер ставит ассерты там, где ему надо.


J>А в Обероне эти ассерты насильно впаривает компилятор, даже если они тебе здесь нафиг не нужны: ну вот не собираешься ты использовать n дальше, и все тут (как обычно и бывает, кстати: это настолько частый вариант, что синтаксис С++ специально был расширен, позволяя объявлять переменные прямо в условиях if и while, и сократив видимость обявления в for), зато собираешься выйти из середины цикла без лишних плясок с условием цикла.


J>В результате из-за этого ненужного в большинстве случаев встроенного ассерта программист не может выразить свою мысль понятным способом при помощи цикла WHILE, а обречен извращаться с LOOP.


Если программист не может выразить свою мысль понятным способом на родном(?) языке, ему уже ничего не поможет.
Re[6]: Синтаксический оверхед
От: Amidlokos Россия  
Дата: 22.06.05 14:39
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Кстати, здесь
Автор: Mamut
Дата: 21.06.05
, за "задолбали", оказывается, могут наказать. Прошу Вас впредь быть поосторожнее.


В народе в таких случаях деликатно говорят "чья бы корова мычала".

А вообще — вишь как обидели г-на Губанова... Теперь на любое "фе" тут же тыкает носом в этот
Автор: Mamut
Дата: 21.06.05
пост. Очень сильно напоминает поведение оскорблённого подростка, который при любом более-менее подходящем случае стремится обозвать любого так же, как назвали его.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true
Re[16]: Яркий пример
От: Mamut Швеция http://dmitriid.com
Дата: 22.06.05 14:40
Оценка: 1 (1)
M>>Любой цикл и условие в программе можно переписать с использованием только цикла while. loop — это извращение, о котором написано здесь
Автор: Mamut
Дата: 22.06.05



P>Он не только оппонентов, он и классику не читает. Сейчас вряд ли найду, но эти положения у Вирта обсуждаются. Видимо, он и его не читал. О чем тогда еще говорить?


Не совсем Вирт, но все же. Начинаем читать отсюда:
A Case for Teaching Multi-exit Loops to Beginning Programmers &mdash; Buhr (1985). Занимательно чтиво. Если что, я вам его потицирую...


dmitriid.comGitHubLinkedIn
Re[10]: Синтаксический оверхед
От: Privalov  
Дата: 22.06.05 14:44
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Не надо быть прорицателем, чтобы понять, что реальная цель у аспиранта Страуструпа была защитить диссеру чтобы его взяли на работу.


О, на постсоветский НИИ похоже. Там надо защищать диссертацию, чтобы должность получить от завлаба или завсектором. Впрочем, у директора НИИ, где я работал, ученой степени не было.

Кстати, удачный пример, когда диссертационная работа получила такую реакцию общественности. Кстати, а изобретение Паскаля Виртом не преследовало те же цели?
Re[8]: Синтаксический оверхед
От: qwertyuiop Российская Империя  
Дата: 22.06.05 14:52
Оценка: +1
SAV>Плохое построение цикла. В идеале у цикла должен быть один вход (никаких goto центр_цикла и прочих извращений) и один выход (выход только по условию цикла или только по одному break при while(true) ).

Кто это сказал? Кто этот мудрец, скажите мне, я хочу в глаза ему посмотреть. Где этот идеальный академик, пишущий идеальные программы? Я хочу узнать сколько своих идеальных программ он написал за свою жизнь, что они выполняют и, главное, сколько продал?

К сожалению, я живу в реальном мире и пишу реальные программы с реальными циклами. А потому мне нужен брейк.

SAV> Кстати тут недавно было описание книги Совершенный код
Автор(ы): Стив Макконнелл

Опираясь на академические исследования, с одной стороны, и практический
опыт коммерческих разработок ПО — с другой, автор синтезировал из самых
эффективных методик и наиболее эффективных принципов ясное прагматичное
руководство. Каков бы ни был ваш профессиональный уровень, с какими бы
средствами разработками вы ни работали, какова бы ни была сложность вашего
проекта, в этой книге вы найдете нужную информацию, она заставит вас
размышлять и поможет создать совершенный код. Книга состоит из 35 глав,
предметного указателя и библиографии.
.


Название — супер
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Re[9]: Синтаксический оверхед
От: Centaur Россия  
Дата: 22.06.05 14:53
Оценка:
Здравствуйте, Кодт, Вы писали:

CX>>Вот если бы были клавиатуры, на которых каждая клавиша — это готовая лексема, тогда, возможно, что-то изменилось бы.


К>ZX Spectrum, БК-001, ещё какие-то модели микрош-ириш такой фичей обладали. Одна кнопка — одна лексема васика. У БК и Спектрум они даже подписаны были (соответственно, имели несколько шифт-клавиш ).


Да, но зато некоторые особо злые ключевые слова приходилось набирать последовательностью комбинаций — { Caps+Symbol; Caps+буква; }, что не совсем чтобы способствовало скорости А так вообще идея размещения каждого понятия на отдельной клавише в пределе ведёт к китайской иероглифической клавиатуре… бррр…
Re[19]: Синтаксический оверхед
От: CrystaX Россия https://crystax.me/
Дата: 22.06.05 14:59
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Да примерно так. Должна быть возможность глядя на программу понять опечатка в ней или так и надо. По крайней мере синтаксис должен быть таким чтобы минимизировать количество возможных односимвольных опечаток (как в данном случае ";" — односимвольная опечатка)


Кстати, кое-что еще добавлю. Насчет точки с запятой все современные компиляторы выдадут warning. Это не ошибка, но очень на нее похожа. Как это делается? Очень просто — скрещиванием фаз синтаксического и семантического анализа. Некрасиво? Да. Но реализуемо? Тоже да.
А естественные языки? Ведь написать корректную программу рабора фразы на английском (хотя бы) языке и получения точного ее смысла еще не удалось никому. Тем не менее это самый популярный язык в мире. А почему? Видимо, потому, что человеку важен не синтаксис.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[15]: Яркий пример
От: qwertyuiop Российская Империя  
Дата: 22.06.05 14:59
Оценка: +1
M>>>"Не плоди сущностей без необходимости" LOOP — такая вот ненужная сущность.
СГ>>Странно, а если нужно проверить условие прекращения итерации уже находясь внутри итерации, тогда как быть?
M>Вы издеваетесь? Посмотрите в практически любой другой язык программирования.
M>
M>while(cond)           
M>{                            
M>  if(another_cond)    
M>    break;                   
M>}                            
M>


M>Для for и do аналогично. Какие могут быть насчет этого есть проблемы?


Просто какой-то академик решил, что будет хорошо, если всегда на выходе из цикла cond будет ложным. Кому хорошо? Почему хорошо? Какая от этого практическая польза программисту? На это я так и не услышал ответа.
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Re[7]: Синтаксический оверхед
От: Mamut Швеция http://dmitriid.com
Дата: 22.06.05 15:07
Оценка:
S>>А еще типичная ошибка — вместо "==" в условии поставить "="...

СГ>Ну да, точно. Как-то забыл упомянуть. Спасибо что напомнили. За одно только это си-образный синтаксис не имеет права существовать...



Надо на РСДН срочно внести новую оценку. Такую:

"ыыыыыыыыыыыыыыыыыыыыыыыы. "

Просто смайлика мне уже не хватает.

Открою страшную тайну — в РНР есть даже оператор "===". Какой кошмар, не правда ли?
А еще, а еще в С++ есть тернарный оператор ?: — какой ужас, батюшки!

А уж за то, что С++ позполяет в десятки раз сократить количество кода только за счет использования скобок вместо THEN, BEGIN, END, DO — это вообще ужас. Расстрел без права переписки


dmitriid.comGitHubLinkedIn
Re[9]: Синтаксический оверхед
От: Mamut Швеция http://dmitriid.com
Дата: 22.06.05 15:10
Оценка: +1
СГ>1) Страуструп на момент придумывания им С++ был (еще совсем зелёным) аспирантом.

СГ>2) Лауреат премии Тьюринга Никлаус Вирт на момент создания Оберона был профессором и было ему где-то под пятьдесят.


СГ>Разница между первым "академическим проектом" аля курсовик и вторым Академическим проектом с большой буквы, огромна.


Первый используется в тысячах. если не десятках тысяч програмных продуктов по всему миру и является, по сути, самым успешным коммерческим языком на планете (по популярности — и только по популярности — с ним может поспорить только РНР, имхо).

А второй академический проект с большой буквы набрал с десяток последователей по всему миру? Ну ладно, сотню.

Действительно, разница огромна


dmitriid.comGitHubLinkedIn
Re[6]: Синтаксический оверхед
От: qwertyuiop Российская Империя  
Дата: 22.06.05 15:12
Оценка: +1
СГ>Это называется научный подход к программированию. Программирование, оказывается, тоже есть наука.
СГ>Кстати, здесь
Автор: Mamut
Дата: 21.06.05
, за "задолбали", оказывается, могут наказать. Прошу Вас впредь быть поосторожнее.


Ну а по сути можете что-нибудь ответить? Повторяю вопрос:

Ну уверены вы, что p после цикла ложно, и какая великая польза от этого? Чем это облегчает жизнь программисту? Кроме дурацких ограничений и отсутствия гибкости не вижу никаких отличий.

Только пожалуйста, без ссылок на авторитеты ("как известно") и без указаний на то, что это требует какая-то парадигма программирования. Хочу знать: зачем это мне, программисту.
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Re[7]: Синтаксический оверхед
От: jazzer Россия Skype: enerjazzer
Дата: 22.06.05 15:19
Оценка: +3
Здравствуйте, Сергей Губанов, Вы писали:

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


S>>А еще типичная ошибка — вместо "==" в условии поставить "="...


СГ>Ну да, точно. Как-то забыл упомянуть. Спасибо что напомнили. За одно только это си-образный синтаксис не имеет права существовать...


И соответствующее предупреждение компилятора:
"ComeauTest.c", line 4: warning: use of "=" where "==" may have been intended
     if(i = 1);
        ^


Скажи честно, тебе самому не надоело еще фигней заниматься?
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[9]: Синтаксический оверхед
От: jazzer Россия Skype: enerjazzer
Дата: 22.06.05 15:20
Оценка: -1
Здравствуйте, Сергей Губанов, Вы писали:

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


M>> С++, кстати, тоже начинался с академической разработки.


СГ>Академические проекты академическим проектам рознь.


СГ>1) Страуструп на момент придумывания им С++ был (еще совсем зелёным) аспирантом.


СГ>2) Лауреат премии Тьюринга Никлаус Вирт на момент создания Оберона был профессором и было ему где-то под пятьдесят.


СГ>Разница между первым "академическим проектом" аля курсовик и вторым Академическим проектом с большой буквы, огромна.


Ты вообще читаешь, что тебе пишут?
С++ не был академическим проектом!
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[8]: Интересно
От: Amidlokos Россия  
Дата: 22.06.05 15:31
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

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


C>>Плевать мне на теорию про три цикла. На _ПРАКТИКЕ_ (подчеркиваю

C>>специально) нужен break для нормального кода.

СГ>Мне даже интересно стало. Может покажете пример?


Пожалуйста. Из недавне-жизненного, пусть и "своими словами". Первое:

// Классика: проход по самописному связному списку с поиском
// нужного элемента
while (pItem->Next)
{
    if (CheckItem(pItem))
        break;
        
    pItem = pItem->Next;
}

// И здесь ещё обработка найденного pItem...


Второе:

// Цикл по всему массиву некоторых объектов.
for (DWORD i = 0; i < dwCount; i++)
{
    // Здесь ведётся определённая обработка _и учёт_ этих объектов.
    // Условия таковы, что обработка может закончиться где-то на середине
    // списка, а может и дойти до конца в зависимости от некоторого обнаруженного
    // условия. Т.е. объектов может быть и десять тысяч, но мы насчитаем нужное
    // количество интересующих нас уже за первую дюжину.
    WorkWithObject(pObjects[i]);
    
    if (CalculateStat() > SOME_VALUE)
        break;
}

// Здесь ещё продолжаем некоторую работу...


Теперь прошу Сергея представить версии без break. И не просто без break, а ещё и без уродства в духе
int Exit = 0;
while ((i < nCount) && !Exit)
{    
    if (Something(object[i]))
        Exit = 1;
        
    // И т.д.
    i++;
}


Или аналогично уродливых разновидностей с for-ом...
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true
Re[10]: Синтаксический оверхед
От: Mamut Швеция http://dmitriid.com
Дата: 22.06.05 15:34
Оценка:
J>Ты вообще читаешь, что тебе пишут?
J>С++ не был академическим проектом!
здесь

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++ 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"


История Виртовских языков.

Самый успешный Виртовский (Модула-2) и успешный Страуструповский (С++) языки были написаны для крупных исследовательских лабораторий крупнейших компаний Xerox и At&T, соответственно.

Сергею надо научиться поиском, что ли, пользоваться.


dmitriid.comGitHubLinkedIn
Re[9]: Интересно
От: Mamut Швеция http://dmitriid.com
Дата: 22.06.05 15:37
Оценка:
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-ом...


Это можно переписать с использованием LOOP, что будет не тем же самым как логически, так и синтаксически. А если использовать for, while, то придется вводить дополнительные логические пременные, то есть "уродства"


dmitriid.comGitHubLinkedIn
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.