Здравствуйте, Павел Кузнецов, Вы писали:
>> Ущербно само требование предварительной декларации.
ПК>Всегда? Требование любых предварительных объявлений?
ПК>Даже предварительного объявления переменных?
Если объявление и инициализация совмещены — это удобно. C#, PHP... где ещё я это видел...
Особенности компиляции/компоновки С/С++ не позволяют так делать, ну значит, планида у них такая
Здравствуйте, Трурль, Вы писали:
AVK>>Добавлю что преимущество однопроходных компиляторов имеет место быть для первого варианта. Т>Думаю, лет 20 назад Вы бы не были столь категоричны.
Здравствуйте, VladD2, Вы писали:
VD>В "классике", при рассуждениях о скорости компиляции, проходом называют именно считывание/запись файла.
Не знаю, что такое "классика", но вполне себе классический 6-проходный компилятор PL/1 считывал исходный файл только один раз.
Возражение по процедуре ведения. VD>Блин, ну, зачем говорить о том, что слабо знаете?
Почему Кодту позволительно использовать термин "многопроходный компилятор", а Трурля за то же самое обвиняют в некомпетентности?
Здравствуйте, AndrewVK, Вы писали:
AVK>>>Добавлю что преимущество однопроходных компиляторов имеет место быть для первого варианта. Т>>Думаю, лет 20 назад Вы бы не были столь категоричны.
AVK>Даже 10 лет назад не был бы. А что?
Разрабатывая Оберон, Вирт учитывал, что ему придется писать компилятор и для какой машины. А вот авторы Component Pascal вполне могли бы снять ограничения, раз уж их язык все равно несовместим с Обероном.
Здравствуйте, Трурль, Вы писали:
Т>Разрабатывая Оберон, Вирт учитывал, что ему придется писать компилятор и для какой машины. А вот авторы Component Pascal вполне могли бы снять ограничения, раз уж их язык все равно несовместим с Обероном.
Здравствуйте, Трурль, Вы писали:
Т>Возражение по процедуре ведения. VD>>Блин, ну, зачем говорить о том, что слабо знаете? Т>Почему Кодту позволительно использовать термин "многопроходный компилятор", а Трурля за то же самое обвиняют в некомпетентности?
Я не видел где он применял этот термин. Может там разница была не принципиальна. Ты же начал рассуждать о скорости. И тут разница очень велика. Ты ведь заранее оссоциировал многопроходность с тормозами. А в случае "проходов" по AST — это не так. Именно по этому в серьезных книгах для прохода по AST используется отедьный термин.
Иначе моно дорассуждаться до того, что С++-компилятор быстрее C#-пного, так как первый однопроходный, а второй многопроходный, ведь С++ требует предеклараций и пасит код в прямом порядке.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Павел Кузнецов, Вы писали:
>>> Ущербно само требование предварительной декларации.
ПК>>Всегда? Требование любых предварительных объявлений?
ПК>>Даже предварительного объявления переменных?
К>Если объявление и инициализация совмещены — это удобно. C#, PHP... где ещё я это видел... К>Особенности компиляции/компоновки С/С++ не позволяют так делать, ну значит, планида у них такая
В процессе парсинга C++ кода приходится определять классы имён. Имя может быть именем переменной, типа или шаблона. Не определив класс имени нельзя распарсить выражение -- возникают синтаксические неопределённости. Это одна из главных причин необходимости предварительных деклараций. А так же причина появления в языке ключевого слова typename.
Здравствуйте, Шахтер, Вы писали:
К>>Если объявление и инициализация совмещены — это удобно. C#, PHP... где ещё я это видел... К>>Особенности компиляции/компоновки С/С++ не позволяют так делать, ну значит, планида у них такая
Ш>В процессе парсинга C++ кода приходится определять классы имён. Имя может быть именем переменной, типа или шаблона.
... или вообще именем пространства имён.
Ш>Не определив класс имени нельзя распарсить выражение -- возникают синтаксические неопределённости. Это одна из главных причин необходимости предварительных деклараций. А так же причина появления в языке ключевого слова typename.
Можешь привести пример, как класс имени влияет на синтаксический анализ (не на семантику)?
Здравствуйте, Кодт, Вы писали:
К>Тот факт, что Стандарт С++ занимает несколько сотен страниц, говорит не о сложности языка, а о тщательной проработке технической документации.
В прошлую пятницу я был свидетелем одной милой сцены.
Один наш сотрудник, почтенный доктор наук, принес результаты тестов, подтверждающие, что для наших задач за глаза хватает 32-битного float. Т.е. встраивать в процессор поддержку double нет никакой нужды.
На радостях все разговорились, разоткровенничались. В частности, наш доктор наук заявил, что Си++ — "замечательный язык". Правда, быстро выяснилось, что у него перегрузка некоторых операторов приводит не к тем результатам, которые ожидались. (В тестах ему пришлось обойтись без этой перегрузки.) Программисты стали разбираться. Возникло какое-то затруднение. Чтобы помочь ребятам (и вспомнив о тщательной проработке стандарта Си++) я "подкинул" им электронную копию стандарта Си++.
Через четверть часа они все еще ходили по перекрестным ссылкам, а в конце концов, утомившись, и вовсе оставили это занятие...
Тут у меня возник "крамольный" вопрос: уж не слишком ли тщательно был составлен стандарт Си++?
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Здравствуйте, AVC, Вы писали:
К>>Тот факт, что Стандарт С++ занимает несколько сотен страниц, говорит не о сложности языка, а о тщательной проработке технической документации.
AVC>В прошлую пятницу я был свидетелем одной милой сцены. AVC>Один наш сотрудник, почтенный доктор наук, принес результаты тестов, подтверждающие, что для наших задач за глаза хватает 32-битного float. Т.е. встраивать в процессор поддержку double нет никакой нужды. AVC>На радостях все разговорились, разоткровенничались. В частности, наш доктор наук заявил, что Си++ — "замечательный язык". Правда, быстро выяснилось, что у него перегрузка некоторых операторов приводит не к тем результатам, которые ожидались. (В тестах ему пришлось обойтись без этой перегрузки.) Программисты стали разбираться. Возникло какое-то затруднение. Чтобы помочь ребятам (и вспомнив о тщательной проработке стандарта Си++) я "подкинул" им электронную копию стандарта Си++. AVC>Через четверть часа они все еще ходили по перекрестным ссылкам, а в конце концов, утомившись, и вовсе оставили это занятие... AVC>Тут у меня возник "крамольный" вопрос: уж не слишком ли тщательно был составлен стандарт Си++?
А в чём было затруднение то ?
А то у меня кроме вопроса о тщательности составления стандарта возникает и вопрос о квалификации ваших программистов....
Здравствуйте, Sergey J. A., Вы писали:
SJA>А в чём было затруднение то ?
Не имел времени вникнуть. (Как Вы думаете, если бы у меня было время, ограничился бы я пересылкой стандарта Си++?) Что-то связанное с подбором кандидатов на перегрузку.
Так что я занимался работой и со стороны наблюдал эту сценку. Она меня умилила, вот я и рассказал о ней.
SJA>А то у меня кроме вопроса о тщательности составления стандарта возникает и вопрос о квалификации ваших программистов....
Ну, конечно, куда им до Вас!
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Здравствуйте, AVC, Вы писали:
AVC>Здравствуйте, Sergey J. A., Вы писали:
SJA>>А в чём было затруднение то ?
AVC>Не имел времени вникнуть. (Как Вы думаете, если бы у меня было время, ограничился бы я пересылкой стандарта Си++?) Что-то связанное с подбором кандидатов на перегрузку. AVC>Так что я занимался работой и со стороны наблюдал эту сценку. Она меня умилила, вот я и рассказал о ней.
Из Вашей истории совершенно ничего не ясно. Была ли непонятность в стандарте или это программеры просто не догнали. Я знал одного "программера" который не смог понять protected mode процессора. Может станем утверждать, что protected mode только запутывает программиста и вообще, стоит вернуться к real mode ?
Вполне возможно, что там был нетривиальный пример. Но мне то откуда знать ?
SJA>>А то у меня кроме вопроса о тщательности составления стандарта возникает и вопрос о квалификации ваших программистов....
AVC>Ну, конечно, куда им до Вас!
Насчёт себя я ничего не утверждал. Однако я хотя бы держу под рукой стандарт и Страуструпа.
Кодт,
> Ш>В процессе парсинга C++ кода приходится определять классы имён. Имя может быть именем переменной, типа или шаблона.
> ... или вообще именем пространства имён.
> Ш>Не определив класс имени нельзя распарсить выражение -- возникают синтаксические неопределённости. Это одна из главных причин необходимости предварительных деклараций. А так же причина появления в языке ключевого слова typename.
> Можешь привести пример, как класс имени влияет на синтаксический анализ (не на семантику)?
Допустим, есть два выражения языка, a и b.
Тогда:
a * b;
Если a — выражение, обозначающее типа, то результирующая синтаксическая конструкция — объявление, иначе — произведение двух выражений. При этом, в зависимости от того, чем является a, в качестве выражения b разрешены разные виды выражений. Например, если a — тип, то в качестве выражения b конструкция вида c + d не разрешена, и т.п.
Еще:
a(b);
Если a — имя типа, то результирующая синтаксическая конструкция — объявление переменной, если имя объекта — вызов перегруженной функции operator(), если имя функции — вызов функции. При этом, снова-таки, в зависимости от того, чем является a, в качестве b разрешены разные выражения. Например, если a — встроенный тип, то в качестве b выражения вида [i]c, d[i] не разрешены.
Это все примеры разных синтаксических конструкций, которые на одном из этапов разбора просто выглядят одинаково. Они порождают разные деревья разбора. И именно для возможности проверки синтаксиса в подобных случаях в шаблонах было введено typename.
Конечно, можно
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
AVC,
> В прошлую пятницу я был свидетелем одной милой сцены. <...> > Через четверть часа они все еще ходили по перекрестным ссылкам, а в конце концов, утомившись, и вовсе оставили это занятие...
А никто не говорил, что будет легко
> Тут у меня возник "крамольный" вопрос: уж не слишком ли тщательно был составлен стандарт Си++?
Если серьезно, то сам язык C++ во многих моментах преизрядно сложен. Сложность стандарта — отражение этого момента. Собственно говоря, сложность данного языка является и его сильной (не сама по себе, а в результате выразительности, которая эту сложность вызывает), и его слабой стороной (очень долгий период обучения).
P.S. Пусть ваши программисты заходят на rsdn.cpp, там им сравнительно быстро и весьма квалифицированно помогут разобраться.
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Sergey J. A.,
> AVC> Через четверть часа они все еще ходили по перекрестным ссылкам, а в конце концов, утомившись, и вовсе оставили это занятие... > AVC> Тут у меня возник "крамольный" вопрос: уж не слишком ли тщательно был составлен стандарт Си++?
> А в чём было затруднение то ? > А то у меня кроме вопроса о тщательности составления стандарта возникает и вопрос о квалификации ваших программистов....
Не стоит так категорично... Сложность C++, порожденная стремлением к выразительности языка, зачастую приводит к тому, что полное понимание происходящего даже во внешне простых случаях требует от программиста, действительно, глубокого знания языка, чего часто не нужно (или достигается значительно быстрее) при работе с другими языками.
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Не стоит так категорично... Сложность C++, порожденная стремлением к выразительности языка, зачастую приводит к тому, что полное понимание происходящего даже во внешне простых случаях требует от программиста, действительно, глубокого знания языка, чего часто не нужно (или достигается значительно быстрее) при работе с другими языками.
Посыпаю голову пеплом. Был несколько пьян, и категоричен
Здравствуйте, Sergey J. A., Вы писали:
SJA>Из Вашей истории совершенно ничего не ясно. Была ли непонятность в стандарте или это программеры просто не догнали. Я знал одного "программера" который не смог понять protected mode процессора. Может станем утверждать, что protected mode только запутывает программиста и вообще, стоит вернуться к real mode ? SJA>Вполне возможно, что там был нетривиальный пример. Но мне то откуда знать ?
Я вовсе не критикую стандарт Си++. Сложность языка и стандарта, должно быть, вытекает из задач, которые были поставлены разработчиками языка. Критиковать язык можно лишь на такой основе. (Я хотел раньше, чтобы именно так критиковали Оберон.)
"Цель" моей "зарисовки с натуры" другая: применить "остраннение" (термин литературоведа В.Шкловского), посмотреть на ситуацию со стороны. Хотя бы и так, как Холстомер у Л.Н.Толстого наблюдал оперное пение.
А ситуация такая. Действительно компетентный специалист в своей области (для нас особо ценный, как специалист по психоакустике) непременно хочет кодировать именно на Си++, языке действительно трудном и требующем изрядного навыка. Приобретение такого навыка требует значительного времени. (Здесь где-то назывался срок 3 года?)
Оправданно ли употребление Си++ в такой ситуации?
Ведь у нас все программисты (кроме меня, грешного; я, на свою беду, просто прикладной математик) — специалисты в своих областях: физики, аппаратчики и т.д.
Им, кроме стандарта языка, надо держать в голове кучу других стандартов.
А тут еще такой изощренный язык.
Разумно ли это?
В этом и состоит мой вопрос.
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Здравствуйте, Павел Кузнецов, Вы писали:
>> Через четверть часа они все еще ходили по перекрестным ссылкам, а в конце концов, утомившись, и вовсе оставили это занятие... ПК>А никто не говорил, что будет легко
Меня со стороны даже заинтриговал этот процесс "хождения по ссылкам".
Написано что-то вроде см. пункт xxx. Ребята лезут туда. Там пара предложений и сакраментальное "см. пункт yyy". И так далее,
for (;;) ;
Оговорюсь, что это не критика Си++, это, скорее, просто смешная ситуация.
Но некоторые эпизоды собственной жизни, связанные с Си++, не могу забыть.
Вот еще один, "на вскидку".
Прихожу я первый раз на свою предыдущую работу (в начале 1997 года). И что я вижу? Все (человек шесть) программисты сидят в отладчике Watcom C++.
Ну, у меня сразу волосы дыбом...
ПК>Если серьезно, то сам язык C++ во многих моментах преизрядно сложен. Сложность стандарта — отражение этого момента. Собственно говоря, сложность данного языка является и его сильной (не сама по себе, а в результате выразительности, которая эту сложность вызывает), и его слабой стороной (очень долгий период обучения).
Именно. У каждого языка, заслуживающего внимания, есть свои сильные и слабые стороны.
ПК>P.S. Пусть ваши программисты заходят на rsdn.cpp, там им сравнительно быстро и весьма квалифицированно помогут разобраться.
Спасибо! Это может и правда пригодиться, а то доктора наук что-то совсем "расшалились", им непременно перегрузку операторов подавай!
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Шахтер, Вы писали:
К>>>Если объявление и инициализация совмещены — это удобно. C#, PHP... где ещё я это видел... К>>>Особенности компиляции/компоновки С/С++ не позволяют так делать, ну значит, планида у них такая
Ш>>В процессе парсинга C++ кода приходится определять классы имён. Имя может быть именем переменной, типа или шаблона. К>... или вообще именем пространства имён.
Ш>>Не определив класс имени нельзя распарсить выражение -- возникают синтаксические неопределённости. Это одна из главных причин необходимости предварительных деклараций. А так же причина появления в языке ключевого слова typename.
К>Можешь привести пример, как класс имени влияет на синтаксический анализ (не на семантику)?