Коллективное письмо Страуструпу
От: Kluev  
Дата: 16.05.16 21:31
Оценка: +1 :))) :))) :))) :))) :))) :))) :)))
С требованием о закрытии проекта. Язык в котором за тридцать с чем-то лет не сделали опережающее описание для вложенных классов не имеет права на существование.
Re: Коллективное письмо Страуструпу
От: antropolog  
Дата: 16.05.16 21:48
Оценка: +4 -2
Здравствуйте, Kluev, Вы писали:

K>С требованием о закрытии проекта. Язык в котором за тридцать с чем-то лет не сделали опережающее описание для вложенных классов не имеет права на существование.


и ещё тридцать лет не сделают. Это одна из немногих встроенных защит от говнокода.
Re: Опережающее описание для вложенных классов
От: Qbit86 Кипр
Дата: 16.05.16 21:54
Оценка:
Здравствуйте, Kluev, Вы писали:

K>С требованием о закрытии проекта. Язык в котором за тридцать с чем-то лет не сделали опережающее описание для вложенных классов не имеет права на существование.


В мире есть ещё языки, где хоть кого-то волнует «опережающее описание для вложенных классов»?
Глаза у меня добрые, но рубашка — смирительная!
Re[2]: Опережающее описание для вложенных классов
От: Kluev  
Дата: 16.05.16 22:01
Оценка: +2
Здравствуйте, Qbit86, Вы писали:

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


K>>С требованием о закрытии проекта. Язык в котором за тридцать с чем-то лет не сделали опережающее описание для вложенных классов не имеет права на существование.


Q>В мире есть ещё языки, где хоть кого-то волнует «опережающее описание для вложенных классов»?


А в мире еще есть языки в которых интерфейс к гландам предоставляется строго через задницу?
Я имею ввиду использование препроцессора для доставки деклараций конпелятору.
Re[3]: Интерфейс к гландам
От: Qbit86 Кипр
Дата: 16.05.16 22:11
Оценка: -1
Здравствуйте, Kluev, Вы писали:

K>А в мире еще есть языки в которых интерфейс к гландам предоставляется строго через задницу?


Так а где подписываь петицию?
Глаза у меня добрые, но рубашка — смирительная!
Re: Коллективное письмо Страуструпу
От: alpha21264 СССР  
Дата: 16.05.16 23:18
Оценка: +3
Здравствуйте, Kluev, Вы писали:

K>С требованием о закрытии проекта. Язык в котором за тридцать с чем-то лет не сделали опережающее описание для вложенных классов не имеет права на существование.


Ты можешь не пользоваться им. А ему (и страусу и языку) будет по прежнему плевать на тебя. А остальным пользоваться не мешай.

Течёт вода Кубань-реки куда велят большевики.
Re: Коллективное письмо Страуструпу (КУ)
От: SaZ  
Дата: 16.05.16 23:55
Оценка: 50 (10) +1 -4 :))) :))) :))) :))) :))) :))) :)
Здравствуйте, Kluev, Вы писали:

K>С требованием о закрытии проекта. Язык в котором за тридцать с чем-то лет не сделали опережающее описание для вложенных классов не имеет права на существование.


Не знаю, где первоисточник, поэтому просто процитирую:

  Тыц
Пацаны, я тут короче сидел за монитором и попытался скомпилить какую-то шнягу из буста, не помню какую, но внезапно компилятор сказал мне «интернал еррор» много раз. И тут я вдруг задумался — какое же говно c++! <[ апплодисменты в зале ]>

Представляете, пацаны, он дает мне stdio и iostream, и я должен выбирать. А как я выберу, это же так сложно, прямо глаза разбегаются! А вдруг я использую и первое, и второе? Совсем беспредел же получится, пацаны, видите какой говно-язык? <[ зал продолжает рукоплескать ]>

А стандартная библиотека? Она же просто ужасна! Там даже строки кривые — не спрашивайте почему, я не знаю^W^W^Wэто же очевидно! И знаете, скажу вам по секрету, я открыл ее исходник... Да, исходник самой stl! Вот вы когда-то смотрели туда? Вижу по глазам, что не смотрели. А я вот посмотрел, и ничего там не понял!!! <[ Бурное проявление недовольства в зале, апплодисменты, крики «Страуструпа на мыло!» ]>

Вот смотрите сюда, пацаны. Я нашел кусок кода, в котором используются макросы с шаблонами, конструкторы бросают исключения, написана куча велосипедных аллокаторов, память течет как из ведра. Я читал его и ужасался, на каком же говно-языке все вокруг пишут! <[ Одинокий голос из зала «а может ты сам написал этот код?», раздается несколько ударов, несогласного выносят ]>

И инкапсуляция у них нарушается всегда!!! В только представьте, пацаны — они спят и видят, как бы ее нарушить! Просыпаются, и сразу же бегут ее нарушать; засыпают, мечтая о том, как пойдут нарушать ее завтра! <[ Дамы в зале утираются платочками, всхлипывая; мужчины сидят с каменными лицами, сцепив зубы ]>

И вообще, самое страшное — этот подлый язык заставляет меня думать! Думать над освобождением памяти, думать yад нормальной иерархией классов, думать над всем!!! Так дальше продолжаться не может — пора закопать его! За-ко-пать!!! Такое говно не должно оскорблять своим существованием наш священный мирок! Кто со мной?!

<[ Все, сидящие в зале, вскакивают, словно распрямившаяся пружина, и выбегают в дверь следом за лидером. Кажется, старому язычку пришел п****ц. Армия скрывается в тумане, некоторое время оттуда слышатся крики «Батт-хёрт! Батт-хёрт! Батт-хёрт!», под которые марширует этот карательный отряд, потом и они затихают вдали ]>

Из потайной дверцы в опустевший зал входит Александреску, вертя в руках блокнот. «2011 год, реактивное говно-нашествие школоты номер 9681», записывает он туда; выходит из зала, запирая дверь на ключ. На крыльце его поджидает Страуструп, они заходят в соседний паб, заказывают по кружке темного пива, и с улыбкой смотрят на экран на стене.

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

«больше двадцати лет прошло, и все повторяется», — со вздохом говорит Бьёрн, потягивая пиво.

К небоскребу достраивают еще один этаж, новый подземный паркинг. Отбитые пальцы горе-разрушителей почти зажили.

«Пацаны...», — начинает свою проповедь очередной мессия.
Re[2]: Коллективное письмо Страуструпу
От: PM  
Дата: 17.05.16 10:48
Оценка: +2
Здравствуйте, antropolog, Вы писали:

K>>С требованием о закрытии проекта. Язык в котором за тридцать с чем-то лет не сделали опережающее описание для вложенных классов не имеет права на существование.


A>и ещё тридцать лет не сделают. Это одна из немногих встроенных защит от говнокода.


А почему использование вложенных классов является признаком говнокода? Я понимаю топикстартера, накипело. Буквально на днях занимался вынесением публичного вложенного класса наружу, пришлось создать для него и для исходного класса новое пространство имен, чтобы использовать предварительное объявление в другом месте.

Предложение такое есть: http://wg21.link/p0289r0 и некоторая надежда, что его примут в С++17:

Forward declarations of nested classes. This would allow things like X::A* to appear in a header without requiring a definition for X to also appear in the header (forward-declarations of X and X::A will be sufficient). EWG found the use case compelling, because currently a lot of class definitions to appear in headers only because interfaces defined in the header use pointers or references to nested classes of the type. Several details still need to be worked out. (For example, what happens if a definition of X does not appear in any other translation unit (TU)? What happens if a definition of X appears in another TU, but does not define a nested class A? What happens if it does define a nested class A, but it’s private? The answer to some or all of these may have to be “ill-formed, no diagnostic required”, because diagnosing errors of this sort would require significant linker support.)

Цитата отсюда: https://botondballo.wordpress.com/2016/03/21/trip-report-c-standards-meeting-in-jacksonville-february-2016/
Re[2]: Коллективное письмо Страуструпу (КУ)
От: Kluev  
Дата: 17.05.16 10:50
Оценка: 15 (4) +4 :))
Здравствуйте, SaZ, Вы писали:

SaZ>Не знаю, где первоисточник, поэтому просто процитирую:


Фигня полная. Обычно неопытный программист относится к с++ и его библиотекам более лояльно, т.к. еще не знает, что его ждет. Начинающий думает, что библиотеки языка спроектированы опытными программистами и вышли из реальных проектов, хотя в действительности iostream была написана на спор, а stl экспериментальная исследовательская разработка.
С stl в С++ вообще началась эпоха мелкобуквенного говнокода

мелкобуквенное_говно<говно_мелкобуквенное>::const_iterator


И с момента включения stl в стандарт развитие языка пошло в ущерб традиционному ООП. Могли бы хотя бы интерфейсы сделать, как в яве и C#, но нет, комитет занят обслуживанием мелкобуквенных библиотек.
В языке полно давно назревших проблем которые нужно было решить еще 20 лет назад. Для примера в паскале от препроцессора отказались еще в 1978 году.
Re[3]: Коллективное письмо Страуструпу (КУ)
От: SaZ  
Дата: 17.05.16 12:51
Оценка: +3
Здравствуйте, Kluev, Вы писали:

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


SaZ>>Не знаю, где первоисточник, поэтому просто процитирую:


K>Фигня полная...


Воспринимайте это как художественную литературу.

K>И с момента включения stl в стандарт развитие языка пошло в ущерб традиционному ООП. Могли бы хотя бы интерфейсы сделать, как в яве и C#, но нет, комитет занят обслуживанием мелкобуквенных библиотек.

K>В языке полно давно назревших проблем которые нужно было решить еще 20 лет назад. Для примера в паскале от препроцессора отказались еще в 1978 году.

Многие идеи Вирта воплощены в различных языках, в том числе в C# / Java. Но это не значит, что тот же паскаль без пропроцессора займёт какую-то конкретную нишу.

Мне кажется, что всему своё время. Не хочу разводить холивар, но меня очень радует направление и темпы, как развивается С++ сейчас. Дайте ему немного времени и при всей гибкости и мощности С++ будет очень эффективным языком широкого профиля.
Re[3]: Коллективное письмо Страуструпу (КУ)
От: T4r4sB Россия  
Дата: 17.05.16 12:58
Оценка: 4 (1) +6
Здравствуйте, Kluev, Вы писали:

K>И с момента включения stl в стандарт развитие языка пошло в ущерб традиционному ООП.


И правильно. Кому нужны абстрактные фабрики виртуальных методов — го на жабу. А мы на шаблонах всё статически разрулим.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[3]: Коллективное письмо Страуструпу
От: antropolog  
Дата: 17.05.16 14:02
Оценка: -3
Здравствуйте, PM, Вы писали:

PM>А почему использование вложенных классов является признаком говнокода? Я понимаю топикстартера, накипело. Буквально на днях занимался вынесением публичного вложенного класса наружу, пришлось создать для него и для исходного класса новое пространство имен, чтобы использовать предварительное объявление в другом месте.


вложенные классы == деталь реализации, использовать деталь реализации снаружи == говнокод. Топикстартер хочет в говнокод добавить варенья, но не принимает во внимание то, что сам подход — порочный. Кивать в сторону STL и прочего не надо. Во-первых там шаблоны, они в любом случае выставляют внутренности наружу, так что разница не велика. А во-вторых особого смысла делать те же итераторы nested классами я не вижу, разница между vector<T>::iterator и iterator<vector<T>> мне не очевидна, принимаю существующую форму просто как исторически сложившийся факт. Ну и про "Several details still need to be worked out." ты и сам написал.
Re[4]: Коллективное письмо Страуструпу
От: PM  
Дата: 17.05.16 14:42
Оценка: +1
Здравствуйте, antropolog, Вы писали:

PM>>А почему использование вложенных классов является признаком говнокода? Я понимаю топикстартера, накипело. Буквально на днях занимался вынесением публичного вложенного класса наружу, пришлось создать для него и для исходного класса новое пространство имен, чтобы использовать предварительное объявление в другом месте.


A>вложенные классы == деталь реализации, использовать деталь реализации снаружи == говнокод. Топикстартер хочет в говнокод добавить варенья, но не принимает во внимание то, что сам подход — порочный. Кивать в сторону STL и прочего не надо. Во-первых там шаблоны, они в любом случае выставляют внутренности наружу, так что разница не велика. А во-вторых особого смысла делать те же итераторы nested классами я не вижу, разница между vector<T>::iterator и iterator<vector<T>> мне не очевидна, принимаю существующую форму просто как исторически сложившийся факт.


Вложенный класс может быть публичным. Тогда это уже не деталь реализации, а интерфейса, и я не вижу в этом ничего противоестественного.

Да, это сахар и проблему можно решить переносом вложенного класса на уровень пространства имен. Но если улучшать язык, то почему бы это не сделать? Объявление вложенных пространств имен в C++17 уже включили. По-моему, добавление похожей возможности для классов сделает язык более согласованным.

A>Ну и про "Several details still need to be worked out." ты и сам написал.


Я лишь процитировал мнение заседателей в комитете. От них трудно ожидать другого — в таком legacy проекте как С++ первой реакцией на любое предложение может быть только поморщить лоб и изречь вышеотквоченное.
Re[3]: Коллективное письмо Страуструпу
От: consign  
Дата: 18.05.16 05:37
Оценка: :)))
Здравствуйте, PM, Вы писали:

PM>А почему использование вложенных классов является признаком говнокода?


Потому что C++ — идеал. Кому что-то не нравится — тот говнокодер, и вообще, что за разговорчики в строю?
Re: Коллективное письмо Страуструпу
От: Капа Парло  
Дата: 18.05.16 06:09
Оценка: -3 :))) :))
Здравствуйте, Kluev, Вы писали:

K>С требованием о закрытии проекта. Язык в котором за тридцать с чем-то лет не сделали опережающее описание для вложенных классов не имеет права на существование.


оно еще не сдохло? Это я про C++.
Re[5]: Коллективное письмо Страуструпу
От: antropolog  
Дата: 18.05.16 14:04
Оценка: -1
Здравствуйте, PM, Вы писали:


PM>Вложенный класс может быть публичным. Тогда это уже не деталь реализации, а интерфейса, и я не вижу в этом ничего противоестественного.

в том то и дело, что это не интерфейс, а отдельная сущность. Например в случае с итераторами. Мне вообще нет дела до того, как он внутри устроен, и уж тем более мне нет дела до самого класса вектора. То что приватные классы можно выставлять в паблик секцию это недоработка. Сравнимая примерно с наличием protected секции.

PM>Да, это сахар и проблему можно решить переносом вложенного класса на уровень пространства имен. Но если улучшать язык, то почему бы это не сделать? Объявление вложенных пространств имен в C++17 уже включили. По-моему, добавление похожей возможности для классов сделает язык более согласованным.

Я попробую ещё раз перефразировать свою мысль. Вложенные классы — это деталь реализации. Вынос их наружу пользователям завязывает пользователей вложенных классов на знания об охватывающем классе, что им вообще никак не нужно, более того, никакой связи между ними и быть не должно. Ещё раз — в случае вложенных классов использование класса как неймспейса — порочная практика, т.к. повышает связность кода там, где её не должно быть.

A>>Ну и про "Several details still need to be worked out." ты и сам написал.


PM>Я лишь процитировал мнение заседателей в комитете. От них трудно ожидать другого — в таком legacy проекте как С++ первой реакцией на любое предложение может быть только поморщить лоб и изречь вышеотквоченное.

Хм. Копипастил не читая? В твоей цитате вполне конкретные issues приведены: what happens if a definition of X does not appear in any other translation unit (TU)? What happens if a definition of X appears in another TU, but does not define a nested class A? What happens if it does define a nested class A, but it’s private?
У тебя есть ответы на эти вопросы?
Re[4]: Коллективное письмо Страуструпу (КУ)
От: Kluev  
Дата: 18.05.16 14:27
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>А мы на шаблонах всё статически разрулим.


А вы это простите, кто?
Re[4]: Коллективное письмо Страуструпу (КУ)
От: _hum_ Беларусь  
Дата: 18.05.16 14:35
Оценка:
Здравствуйте, T4r4sB, Вы писали:

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


K>>И с момента включения stl в стандарт развитие языка пошло в ущерб традиционному ООП.


TB>И правильно. Кому нужны абстрактные фабрики виртуальных методов — го на жабу. А мы на шаблонах всё статически разрулим.


забавно от вас, постоянно недовольного с++, такое слышать
Re[5]: Коллективное письмо Страуструпу (КУ)
От: T4r4sB Россия  
Дата: 18.05.16 14:42
Оценка:
Здравствуйте, _hum_, Вы писали:

__>забавно от вас, постоянно недовольного с++, такое слышать


C++ говно, но это не отменяет того, что некоторые его идеи очень полезны.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[4]: Коллективное письмо Страуструпу
От: Kluev  
Дата: 18.05.16 14:52
Оценка: 2 (2) -1
Здравствуйте, antropolog, Вы писали:


A>вложенные классы == деталь реализации,


Это не более чем ваша точка зрения. Более того ваша точка зрения не совпадает с официальной политикой партии. В stl использование типов объявленных внутри классов носит массовый характер. И деталями реализации их не назовешь. Открываем к примеру map, и что мы видим?

key_type     Key
mapped_type     T
value_type     std::pair<const Key, T>
size_type     Беззнаковый целочисленный тип (обычно size_t)
difference_type     Знаковый целочисленный тип (обычно std::ptrdiff_t)
key_compare     Compare
allocator_type     Allocator
reference     Allocator::reference (до C++11)
value_type& (начиная с C++11)
const_reference     Allocator::const_reference (до C++11)
const value_type& (начиная с C++11)
pointer     Allocator::pointer (до C++11)
std::allocator_traits<Allocator>::pointer (начиная с C++11)
const_pointer     Allocator::const_pointer (до C++11)
std::allocator_traits<Allocator>::const_pointer (начиная с C++11)
iterator     BidirectionalIterator
const_iterator     Константный двусторонний итератор
reverse_iterator     std::reverse_iterator<iterator>
const_reverse_iterator     std::reverse_iterator<const_iterator>


Все эти типы предназначены для использования снаружи и никак не могут считатся деталями реализации.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.