LINUX.ORG.RU

Разрешено использование C++ в GCC

 , , , , ,


0

1

Вчера в списке рассылки GCC появилось важное сообщение по поводу использования языка программирования C++ при разработке GCC (GNU Compiler Collection, а не сам компилятор языка C).

Марк Митчелл (Mark Mitchell), один из основных разработчиков GCC:

Я рад сообщить, что руководящий комитет GCC и FSF одобрили использование C++ в самом GCC. Конечно, нет никаких причин использовать возможности С++ только потому, что мы умеем это делать. Главная цель - предоставить пользователям более качественные компиляторы, а не кодовую базу на C++ для самих себя.

Перед тем, как мы действительно начнём использовать C++, мы должны определиться с набором правил, которыми нужно будет руководствоваться при использовании C++ для разработки GCC. Я считаю, что для начала мы должны минимизировать список разрешённых возможностей С++, чтобы не подвергать разработчиков GCC, не знакомых с C++, таким резким переменам в основном языке разработки компиляторов. Мы всегда сможем расширить использование С++ позднее, если появится такая необходимость.

На данный момент разработчики ограничиваются стандартом C++98 и использованием типа long long для 64-битных целых чисел. Использование множественного наследования, шаблонов (тех, которые не входят в стандартную библиотеку C++) и исключений, скорее всего, будет запрещено. Это мотивировано тем, что это будет сложно для программистов на C, а также тем, что сами программисты C++ могут с лёгкостью допустить ошибки в таких вещах.

Так как язык C++ достаточно обширен, то Марк Митчелл предложил составить список того, что разрешается использовать, а не того, что использовать нельзя. На данный момент необходимо составить некоторые информационные нормативы, а не очередной стандарт ISO.

Все желающие поучаствовать в разработке нормативов могут связаться с разработчиками GCC. На данный момент предполагается сделать это в виде странички в Wiki.

>>> Официальный анонс

★★★★

Проверено: JB ()
Последнее исправление: MuZHiK-2 (всего исправлений: 1)
Ответ на: комментарий от r

>> Или NullPointerExcaption - не фича?

Ей что пользоваться нельзя? Правда? Там для детей написано что если у тебя, ребенак, NPE - ищи почему, а не пиши как канадский программист catch NPE.

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

anonymous
()
Ответ на: комментарий от anonymous

> Ну так ограничвают или нет. Могу я сделать, то что там запрещают?

Можешь, но это будет твоя ошибка, а не ошибка дизайна языка.

EvilBlueBeaver
()
Ответ на: комментарий от EvilBlueBeaver

>> Ну так ограничвают или нет. Могу я сделать, то что там запрещают?

Можешь, но это будет твоя ошибка, а не ошибка дизайна языка.

Хм... ты о чем? Я вообще то о том, что в ява - это сделать можно, но кодинг стандарт запрещает. Следовательно - это огранияение программирования на ява.

А вы о чем?

anonymous
()
Ответ на: комментарий от EvgenijM86

> Похоже графы там либо сложные по реализации и к тому-же медленные, либо это монада IO.

Графы там нормально реализуются, пусть даже и в IO. Всё равно IO-значениями можно оперировать как объектами первого класса. А ещё можно получить многопоточную реализацию при помощи STM.

anonymous
()
Ответ на: комментарий от anonymous

> А вы о чем?

О том, что здесь не запрещают пользовать NPE и catch в принципе, а предпуреждают, что NPE означает о допущенной ошибке и «проглатывать» его себе дороже. Тогда как в мозилловском стандарте в принципе запрещают исключения.

EvilBlueBeaver
()
Ответ на: комментарий от EvilBlueBeaver

>> А вы о чем?

О том, что здесь не запрещают пользовать NPE и catch в принципе, а предпуреждают, что NPE означает о допущенной ошибке и «проглатывать» его себе дороже. Тогда как в мозилловском стандарте в принципе запрещают исключения.

Вообще то это кодинг стандарт. Он должен соблюдаться!

Хотя конечно. Как его соблюдают, в каких формулировках это выражено может быть - не суть. Запрет или рекомендация - не важно. Кодинг стандарт ограничивает и точка.

anonymous
()
Ответ на: комментарий от anonymous

>Ну так ограничвают или нет.

Дядя это рекомендация вида «не будь дураком».

Могу я сделать, то что там запрещают?


Можешь. И ничего плохого не будет. Точно так же как ByZero можно перехватывать. Эта рекомендация аналогично что если у тебя ByZero - найди где оно возникло и сделай так чтобы не возникало, вместо перехватывания.

r ★★★★★
()
Ответ на: комментарий от r

>>То есть ты хочешь сказать, что сейчас нет реализаций?

Стандарта? А ты не знал?

Демагогией занимаешься? Не стандарта а языка. Ладно. Ты мне надоел. Всем все понятно. Пошли демагогические приемы с которыми мне влом спорить. Уставсья в зеркало и сам на себе их отрабатывай.

anonymous
()
Ответ на: комментарий от anonymous

> Хотя конечно. Как его соблюдают, в каких формулировках это выражено может быть - не суть. Запрет или рекомендация - не важно. Кодинг стандарт ограничивает и точка.

В общем, в этом плане я согласен с r. В java ограничивают от детских ошибок собственного кода. А в цпп ограничивают от самого цпп.

EvilBlueBeaver
()
Ответ на: комментарий от anonymous

>Кодинг стандарт ограничивает и точка.


Ты не видишь разницы между «надо исправлять ошибки» и «нельзя пользоваться исключениями (фича языка)»?

r ★★★★★
()
Ответ на: комментарий от r

>>Ну так ограничвают или нет.

Дядя это рекомендация вида «не будь дураком».

Могу я сделать, то что там запрещают?

Можешь. И ничего плохого не будет. Точно так же как ByZero можно перехватывать. Эта рекомендация аналогично что если у тебя ByZero - найди где оно возникло и сделай так чтобы не возникало, вместо перехватывания.

То есть все что ты сказал. Обосновывает следующую позицию.

Ограничения - это не ограничения.

Мне надоело читать твою демагогию. С тобой все ясно. Тренируйся на себе.

anonymous
()
Ответ на: комментарий от anonymous

>Демагогией занимаешься? Не стандарта а языка.

Это я демагогией занимаюсь? Язык это то что описано в стандарте по этому языку.

r ★★★★★
()
Ответ на: комментарий от anonymous

>Мне надоело читать твою демагогию.

Посмотри в словаре слово демагогия. Речь шла об ограничении кодинг стандартом в использовании фичь языка. А не в ограничениях вообще програмистов апример ПДД или переносами скобок. Демагогия - это то чем ты занимаешься. Недопустимыми обощениями (ограничения языка - это не любые ограничения) и недопустимыми подменами ( язык это то что ты считаешь языом а не то что написано в спефицикации языка). Зеркало себе купи.



r ★★★★★
()
Ответ на: комментарий от EvilBlueBeaver

>> Хотя конечно. Как его соблюдают, в каких формулировках это выражено может быть - не суть. Запрет или рекомендация - не важно. Кодинг стандарт ограничивает и точка.

В общем, в этом плане я согласен с r. В java ограничивают от детских ошибок собственного кода. А в цпп ограничивают от самого цпп.

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

anonymous
()
Ответ на: комментарий от r

>>Мне надоело читать твою демагогию.

Посмотри в словаре слово демагогия. Речь шла об ограничении кодинг стандартом в использовании фичь языка.

Является ли NullPointeException фичей языка? Ладно. Хватит. Устал от тебя уже.

anonymous
()
Ответ на: комментарий от anonymous

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

А запрещение использовать СТАНДАРТНЫЕ библиотеки плюсов куда отнести?

EvilBlueBeaver
()
Ответ на: комментарий от anonymous

> Является ли NullPointeException фичей языка? Ладно. Хватит. Устал от тебя уже

А где там написано про запрещение использования NullPointerException?

EvilBlueBeaver
()
Ответ на: комментарий от r

>> Демагогией занимаешься? Не стандарта а языка.

Это я демагогией занимаюсь? Язык это то что описано в стандарте по этому языку.

Демагогический прием: Подмена понятия. Язык - это средство общения. В программирование - то что может понять компьетер или программа и выполнить то что этим языком было задано.

anonymous
()
Ответ на: комментарий от EvilBlueBeaver

>> Является ли NullPointeException фичей языка? Ладно. Хватит. Устал от тебя уже

А где там написано про запрещение использования NullPointerException?

Какая разница использования или какой либо другой обработки? Или уже возможность обратки NullPointerException не является фичей,

anonymous
()
Ответ на: комментарий от EvilBlueBeaver

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

А запрещение использовать СТАНДАРТНЫЕ библиотеки плюсов куда отнести?

В раздел. Мы знаем как сделать лучше и будем делать лучше.

anonymous
()
Ответ на: комментарий от anonymous

> В раздел. Мы знаем как сделать лучше и будем делать лучше.

А вот в этом проблема плюсов основная. Каждый разработчкик мнит себя гением, и поэтому каждый фреймворк поставляет собственный класс строки.

EvilBlueBeaver
()
Ответ на: комментарий от EvilBlueBeaver

>> В раздел. Мы знаем как сделать лучше и будем делать лучше.

А вот в этом проблема плюсов основная. Каждый разработчкик мнит себя гением, и поэтому каждый фреймворк поставляет собственный класс строки.

А кто-то считает это достоинством. Ибо один и тот же класс строки не может быть оптимальным для разных задач.

anonymous
()
Ответ на: комментарий от anonymous

> Какая разница использования или какой либо другой обработки? Или уже возможность обратки NullPointerException не является фичей,

Я скажу вам в чем разница. разница в том, что запрещение перехватывания NullPointerException страхует тебя от своих собственных ошибок. А запрет использования исключений в плюсах страхует тебя от разработчиков компиляторов и стандартных библиотек.

EvilBlueBeaver
()
Ответ на: комментарий от anonymous

> А кто-то считает это достоинством. Ибо один и тот же класс строки не может быть оптимальным для разных задач.

Чем QString оптимальнее std::string или например CString?

EvilBlueBeaver
()
Ответ на: комментарий от EvilBlueBeaver

>> Какая разница использования или какой либо другой обработки? Или уже возможность обратки NullPointerException не является фичей,

Я скажу вам в чем разница. разница в том, что запрещение перехватывания NullPointerException страхует тебя от своих собственных ошибок. А запрет использования исключений в плюсах страхует тебя от разработчиков компиляторов и стандартных библиотек.

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

anonymous
()
Ответ на: комментарий от EvilBlueBeaver

>> А кто-то считает это достоинством. Ибо один и тот же класс строки не может быть оптимальным для разных задач.

Чем QString оптимальнее std::string или например CString?

Спросите у разработчиков Qt. Из того что навскидку приходит. Многобайтовость. QString сильно заточен под QString::arg().

anonymous
()
Ответ на: комментарий от anonymous

> Ну, кто то считает что от недостатков исключений как токовых. Независимо от языка. Вот только попробуй убрать исключения из явы...

А зачем? Если они там неплохо применяются и ни у кого не возникает желания их убрать? А вот в плюсах возникает. Кажется проблема не в исключениях...

EvilBlueBeaver
()
Ответ на: комментарий от EvilBlueBeaver

Я скажу вам в чем разница. разница в том, что запрещение перехватывания NullPointerException страхует тебя от своих собственных ошибок. А запрет использования исключений в плюсах страхует тебя от разработчиков компиляторов и стандартных библиотек.

Запрет использования исключений страхует от легаси кода, написанного без учета их существования. Удивительно, как тяжко даются жабокадарам такие простые вещи.

goose
()
Ответ на: комментарий от anonymous

> Вообще то там теоретики от программирования рассказывали как теоретически обоснованно компиляторы делать.

Потому что если это не расскать студентам, то они будут парсить всё 5000 строками кода ифов и вайлов.

sv75 ★★★★★
()
Ответ на: комментарий от EvilBlueBeaver

>> Ну, кто то считает что от недостатков исключений как токовых. Независимо от языка. Вот только попробуй убрать исключения из явы...

А зачем? Если они там неплохо применяются и ни у кого не возникает желания их убрать? А вот в плюсах возникает. Кажется проблема не в исключениях...

В плюсах возможны два варианта программирования. Те кому исключения кажутся ненадежным механизмом - их убирают. Кому нет - оставляют. Вот и все. В яве только с исключениями.

anonymous
()
Ответ на: комментарий от sv75

>> Вообще то там теоретики от программирования рассказывали как теоретически обоснованно компиляторы делать.

Потому что если это не расскать студентам, то они будут парсить всё 5000 строками кода ифов и вайлов.

Согласен. Как первое приближение это сойдет. Но долгое время это считалось истиной. А потом выяснилось что «все относително» :)

anonymous
()
Ответ на: комментарий от anonymous

> Спросите у разработчиков Qt. Из того что навскидку приходит. Многобайтовость. QString сильно заточен под QString::arg().

А не кажется странным преобразование в строку делать у класса строки? А если надо в строку будет что-то свое преобразовывать и соблюдать единообразие?

Хотя в том же дотнете меня веселит метод ToString(), который объявлен у класса Object от которого собственно наследуется класс String.

EvilBlueBeaver
()
Ответ на: комментарий от goose

> Запрет использования исключений страхует от легаси кода, написанного без учета их существования. Удивительно, как тяжко даются жабокадарам такие простые вещи.

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

EvilBlueBeaver
()
Ответ на: комментарий от EvilBlueBeaver

>> Спросите у разработчиков Qt. Из того что навскидку приходит. Многобайтовость. QString сильно заточен под QString::arg().

А не кажется странным преобразование в строку делать у класса строки? А если надо в строку будет что-то свое преобразовывать и соблюдать единообразие?

Хотя в том же дотнете меня веселит метод ToString(), который объявлен у класса Object от которого собственно наследуется класс String.

Это вопрос вкуса. Считайте это примитивом надмножества Qt. Опыт показал, что народу нравится и в основном используют arg. Вот его на него и заточились. Думаю, если бы выяснили, что в основном используют что либо другое, заточились бы на другое. Там много таких мест, где они говорят, что с точки зрения чистого ООП это не хорошо, но так как удобно и народ использует то мы реализовали.

anonymous
()
Ответ на: комментарий от anonymous

Ладно, смотри.
Вот у тебя есть проект, две версии - devel и release.
В devel у тебя стоит обработчик который выводи «PANIC! Divizion by zero! Passed values x, y, x, bla». при тестинге у тебя это все вылазит, есть ошибка в логике программы. Ты это исправляешь и в release у тебя нет никаких обработчиков.

oh
()
Ответ на: комментарий от EvilBlueBeaver

>> Запрет использования исключений страхует от легаси кода, написанного без учета их существования. Удивительно, как тяжко даются жабокадарам такие простые вещи.

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

На вскидку: вернувший исключение callback.

anonymous
()
Ответ на: комментарий от oh

> Ладно, смотри. Вот у тебя есть проект, две версии - devel и release. В devel у тебя стоит обработчик который выводи «PANIC! Divizion by zero! Passed values x, y, x, bla». при тестинге у тебя это все вылазит, есть ошибка в логике программы. Ты это исправляешь и в release у тебя нет никаких обработчиков.

Да все это ясно. Но мне же запртили это сделать в релизной ветке. Или разрешили? Запретили. Значит запрет есть? Есть. На использование языка? На использование языка.

anonymous
()
Ответ на: комментарий от anonymous

> Да все это ясно. Но мне же запртили это сделать в релизной ветке. Или разрешили? Запретили. Значит запрет есть? Есть. На использование языка? На использование языка.

Запреты разных порядков.
1) Не запретили использовать исключения полностью
2) При разработке/деббаге можно использовать.
3) Это конкретное исколючение является спецефическим
...
4) Жаба сосет

oh
()
Ответ на: комментарий от EvilBlueBeaver

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

Значит, про жабу я ошибся, за это извиняюсь. Если ты используешь легаси-код, то никак не повредит. Но вот если ты в проекте типа мозилы внезапно начнешь писать новый с использованием исключений, то с большой вероятностью старый код будет вызывать новый и не трудно догадаться, что произойдет. Чтобы сменить стандарт кодирования для мозилы, надо фактически переписать весь код. С учетом того, что реального профита от этого нет, никто этого делать не будет. Кстати, гугл не использует исключения по этой же причине.

goose
()
Ответ на: комментарий от anonymous

> Но долгое время это считалось истиной.

Это проблема в основном в головах *паствы*.

sv75 ★★★★★
()
Ответ на: комментарий от goose

> Значит, про жабу я ошибся, за это извиняюсь. Если ты используешь легаси-код, то никак не повредит. Но вот если ты в проекте типа мозилы внезапно начнешь писать новый с использованием исключений, то с большой вероятностью старый код будет вызывать новый и не трудно догадаться, что произойдет. Чтобы сменить стандарт кодирования для мозилы, надо фактически переписать весь код. С учетом того, что реального профита от этого нет, никто этого делать не будет. Кстати, гугл не использует исключения по этой же причине.

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

EvilBlueBeaver
()
Ответ на: комментарий от anonymous

> Демагогический прием: Подмена понятия. Язык - это средство общения.

Вот это пример подмены понятия.

В программирование - то что может понять компьетер или программа и выполнить то что этим языком было задано.


Нет - это то что написано в спецификации.

А у то меня компьютер один понимает когда я по нему ногой стукну. Сразу начинает работать тише. То есть понимает язык силы:)

r ★★★★★
()
Ответ на: комментарий от JackyTreehorn

>Клиника какая-то началась.

Скоро начнем спорить кто что сказал и чего не говорил и тыкать ссылками:)

r ★★★★★
()
Ответ на: комментарий от anonymous

>А потом выяснилось что «все относително» :)

Там еще миллионмаксовпремию никто не додумался сделать «тому кто первый напишет компилятор С++ соответствующий актуальному стандарту».

r ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.