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 ()

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

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

Тебе запретили вместо исправления ошибок - перехватывать NPE, и намекнули - «ошибки испраляй». Ты может еще и английский язык не понимай?

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

>Точно, что-то об этом не подумал. Тут вы правы

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

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

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

Наверно все-таки мужик раньше родит :)

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

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

  • В c++ была хреновая реализация исключений
  • Есть люди, считающие их слишком сложными.
  • Программисты c++ произошли от программистов C.
goose ()
Ответ на: комментарий от r

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

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

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

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

Когда появился компилятор Си и когда стандарт на него?

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

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

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

согласно документации

это не ограничение ниразу. Да, безусловно, не читаешь доки - ССЗБ, но все же это не ограничение, а соглашение.

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

> В c++ была хреновая реализация исключений

Есть люди, считающие их слишком сложными.
Программисты c++ произошли от программистов C.

Вооооот )) То есть мы пришли в двум выводам

1) Язык С++ плохо спроектирован

2) Люди, пищущие на С++ плохо признают что-то новое и необычное

Я правильно понял вашу мысль?

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

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

Тебе запретили вместо исправления ошибок - перехватывать NPE, и намекнули - «ошибки испраляй». Ты может еще и английский язык не понимай?

Так скажи просто запретили обрабатывать? Да или нет. Остальные слова можешь проговорить сам себе.

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

>Когда появился компилятор Си и когда стандарт на него

Тут ты пытаешься вбросить демагогический прием неоправданного сужения понятия и выступить на тему ISO? Не выйдет. Стандарт на язык не обязательно сертифицирован ISO. Это всего лишь опорный документ в котором полностью специфицирован язык. В жабе это JLS, в скале SLS, в питоне PLR. Еще один вариант специфицирования - это by example, т.н. reference implementation.

В С++ это документ ISO.


А что же тогда называлось языком Си?


Reference Implementation by Керниган и Ричи.

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

>> В c++ была хреновая реализация исключений > Есть люди, считающие их слишком сложными. > Программисты c++ произошли от программистов C.

Вооооот )) То есть мы пришли в двум выводам

1) Язык С++ плохо спроектирован

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

2) Люди, пищущие на С++ плохо признают что-то новое и необычное

Я правильно понял вашу мысль?

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

В малых языках большинство - технофилы.

Поэтому там существенно больше неудачных проектов. Хотя в принципе языки неплохие.

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

>это не ограничение ниразу.

Я говорб что пример с колбеком - не подходит. Если делаешь callback в сяшный код или код не понимающий исключение - это не значит что все - хана исключений не может быть. Это значит только то что колбек должен иметь try { ... } catch(...) { вернуть неуспешное завершение колбека согласно доке на этот колбек }. И дальше работаем с исключениями.

А прозрачно бросать исключение в код его не понимающий - это все равно что возвращать непонимаемый колбеком код возврата.

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

1) Язык С++ плохо спроектирован

Нет, сложен в реализации. Хотя, проектирование не идеально. Почему так получилось можно прочитать в книжке Страуструпа. Он подробно разъясняет причины тех или иных решений.

2) Люди, пищущие на С++ плохо признают что-то новое и необычное

Люди плохо признают что-то новое и необычное.
Так будет правильно. Не стоит забывать, что признать новое, должен не один человек, а целая команда. Даже в этом треде были утверждения, что проще возращаемое значение проверить, чем ловить какую-то там летающую хрень.

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

>>А что же тогда называлось языком Си?

Reference Implementation by Керниган и Ричи.

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

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

петушило, я тебе все понятно объяснил. Если есть претензии к моему высеру - выкладывай, если нет - завали хлебало

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

В общем общая точка соприкосновения есть и это уже радует

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

А какое отношение имеют к ЯЗЫКУ Java динамические языки? Или вы пытаетесь сравнить язык с платформой?

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

>Так скажи просто запретили обрабатывать?

Ты обоснование читал? Почитай. Эти надписи между прочем ссылочки. Не соизволь за труд - кликни. Тогда когда будешь видеть над красным ведром надпись на стене «ведро не брать» - будешь понимать что это не обозначает принципиальный запрет брать любые ведра.

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

> В общем общая точка соприкосновения есть и это уже радует

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

А какое отношение имеют к ЯЗЫКУ Java динамические языки? Или вы пытаетесь сравнить язык с платформой?

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

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

> петушило, я тебе все понятно объяснил. Если есть претензии к моему высеру - выкладывай, если нет - завали хлебало

Ну вот, а кто-то сокрушался что тред скучный, без матюков )

Надо было только немного подождать.

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

> Так скажи просто запретили обрабатывать?

Ты обоснование читал? Почитай. Эти надписи между прочем ссылочки. Не соизволь за труд - кликни. Тогда когда будешь видеть над красным ведром надпись на стене «ведро не брать» - будешь понимать что это не обозначает принципиальный запрет брать любые ведра.

Проговори это себе, мне лишь скажи да или нет.

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

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

Откуда такой миф что в C++ мегабабки вкладываются? Фактически никто из корпораций не продвигает плюсы как свой флагман и не вкладывает сильно в его развитие (так как делают это с Java и .NET). Язык популярен не смотря ни на что и является основным в своей нише для десктопного софта, встроенных и мобильных устройтсвах и на некоторых серверах. У меня на десктопе все приложения или C/C++ или JavaScript в виде вебдваноль.

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

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

>Вот, докопались до сути. Если есть реализация

Сейчас мне трудно сказать ты применяешь опять сужение смысла как демагогическией прием или действительно не понимаешь в чем разница между Reference Implementation и «какая-нибудь реализация».

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

Блин, хорош с клоунами базарить.
Черт, где же лисперы-то?

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

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

Хоть в этот огород про который тебе только рабинович напел не лезь а?

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

>Проговори это себе, мне лишь скажи да или нет.

После того как ты ответишь перестанешь ли ты бить соседских бабушек возле подьезда.

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

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

Хоть в этот огород про который тебе только рабинович напел не лезь а?

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

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

>> Проговори это себе, мне лишь скажи да или нет.

После того как ты ответишь перестанешь ли ты бить соседских бабушек возле подьезда.

Нет.

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

>Фактически никто из корпораций не продвигает плюсы как свой флагман и не вкладывает сильно в его развитие (так как делают это с Java и .NET).

Дада. Шарашкины конторы типа Intel, Sun, Microsoft....Ниразу не вкладывают. Все спонсоры GCC. В свое время watcom, borland, bell labs. Особенно последниые 27 лет в компиляторы С++ не вложили никопейки. Хобби-проект.

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

У сана есть джава, интел начал что-то с хаскеллем мутить, вроде
мс - ну там дотнет и все такое.

Алсо, да, бабки вкладывают, но продвигают немного другое (см выше)

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

>Даже безотносительно вопросов распространенности и производительности, сам по себе язык довольно интересный

Для таких интересных хреновин русский царь Петя даже выставку придумал.

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

>>Вот, докопались до сути. Если есть реализация

Сейчас мне трудно сказать ты применяешь опять сужение смысла как демагогическией прием или действительно не понимаешь в чем разница между Reference Implementation и «какая-нибудь реализация».

То есть вот так сразу Керниган и Ричи взяли и написали свой первый компилятор Си. Который был Reference Implementation c Керниган и Ричи.

:))))))

Хм.... Трудно заменить Керниган и Ричи на Кто-то?

Кто-то разработал реализацию языка своместимую с реализацией Кто-то.

:)))))

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

> Алсо, да, бабки вкладывают, но продвигают немного другое (см выше)

Точно. Потому что за 27 лет уже задолбались херней страдать.

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

> Трудно заменить Керниган и Ричи на Кто-то?

А - таки не понимаешь?

Керниган и Ричи - источник языка. Как они сказали - так и правильно. В С++ источник языка комитет. А не «кто-то». Как комитет сказал - то и с++.

Иди уже уроки учи, завтра в школу.

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

>> Трудно заменить Керниган и Ричи на Кто-то?

А - таки не понимаешь?

Керниган и Ричи - источник языка. Как они сказали - так и правильно. В С++ источник языка комитет. А не «кто-то». Как комитет сказал - то и с++.

Иди уже уроки учи, завтра в школу.

Вот. Наконец то согласился, что это должен делать не стандартизатор, а источник языка.

Теперь осталось понять: стандартизаторы лишь стандартизируют. И все у тебя станет хорошо.

Но, боюсь, тебе это не под силу. Ибо разницу между стандартом языка такой-то версии и языком ты не осилишь.

Случиться когнитивный дисонанс.

А уж понять, что одновременно действуют все стандарты языка Си и C++ а не один. Для явакодеров невозможно.

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

> А уж понять, что одновременно действуют все стандарты языка Си и C++ а не один.

Прям чувствую себя в начале 20 века в Имперской России. Вводить метр или дальше мерять саженями: прямыми, косыми и прочими. Это ж стандарт, правда у каждого человека свой, но все же стандарт.

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

> Дада. Шарашкины конторы типа Intel, Sun, Microsoft....Ниразу не вкладывают. Все спонсоры GCC. В свое время watcom, borland, bell labs. Особенно последниые 27 лет в компиляторы С++ не вложили никопейки. Хобби-проект.

Несравнимо меньше чем в свои флагманы .NET или Java, где с нуля разработаны бесплатные для пользователей компиляторы, рантаймы и стандартные библиотеки. C++ - это фактически основа всего существующего мира программного мира и эти компании поддерживают эту основу чтобы весь их мир не рухнул. Кроме того вкладывание денег в свой C++ Microsoft и Intel позволяет продать новую версию их студии/компилятора.

Почему же замечание насчет интересности языка никак не прокоментированно. R, неужеле тебе интерсна Java как язык программирования?

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

>Мокажи мне там хоть одну штуку которая ограничивает использование _языка_. Большинство там описанного это неправильное использование библиотек - типичные ошибки новичков - вроде попыток сравнивать стринги на ==.

Новички также не умеют пользоваться исключениями, stl и уж конечно шаблонами.

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

> Даже безотносительно вопросов распространенности и производительности, сам по себе язык довольно интересный (в отличие например от совершенно топорной явы).

Ну, он интересен разве что своей сложностью. По мне так лучше поизучать CLOS или языки с зависимыми типами. Или замутить свой миниязык :) Благо сейчас при некотором опыте это просто.

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

> А уж понять, что одновременно действуют все стандарты языка Си и C++ а не один.

Если за стандарт брать каждую отдельную реализацию, то нахрен такие стандарты. Вон выше по теме был пример.

Другое дело — разные версии.

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

И если в случае C разное поведение программы ещё как-то можно контролировать, то с введением классов...

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

> Ну, он интересен разве что своей сложностью.

Логически он не сложен, сложность появляется как следствие построений на основе каких-то базовых вещей. Это как наш сложный мир с многообразием химических реакций, на более низком уровне это всего-лишь взаимодействие тройки основных элементарных частиц которые генерируют сложность на более высоком уровне (немного условно). За счет этого язык позволяет использовать разные парадигмы и изобретать то, что создатели в него изначально не закладывали.

CLOS и другие языки тоже могут быть интересными, но все-таки в реальном мире проектов у них не так много. В реальном мире надо выбирать где-то между PHP, C#, Java, C++, JavaScript, Python.

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

> Логически он не сложен, сложность появляется как следствие построений на основе каких-то базовых вещей.

Ну конечно. Ручное управление памятью при наличии классов, слабая проверка типов как в С, громоздкая система шаблонов (которая по сути просто типобезопасная макросистема), исключения без finally... Наверняка я что-то ещё пропустил.

Вот С был действительно тем, что вы описали выше.

За счет этого язык позволяет использовать разные парадигмы и изобретать то, что создатели в него изначально не закладывали.

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

Кстати, вы, когда писали пост, не спутали с Лиспом? Ему это описание подходит больше. :)

CLOS и другие языки тоже могут быть интересными, но все-таки в реальном мире проектов у них не так много. В реальном мире надо выбирать где-то между PHP, C#, Java, C++, JavaScript, Python.

Увы, это так (хотя при желании можно найти работу с тем, что тебе интересно).

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

Если короче, то мне в C++ не нравится то, что он создавался как высокоуровневый язык, но по сути остался на низком уровне, как С. В основном это выражается в отсутствии сборщика мусора, но не только.

Мне больше нравится подход такой, как, например, в Python: полностью высокоуровневый язык с возможностью использования кода на чистом, обычном C. То есть там, где нужно низкоуровневое управление, используются низкоуровневые инструменты, а остальные части могут быть выражены более просто. Впрочем, конкретно Python тоже имеет своих тараканов.

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

> CLOS и другие языки тоже могут быть интересными, но все-таки в реальном мире проектов у них не так много. В реальном мире надо выбирать где-то между PHP, C#, Java, C++, JavaScript, Python.

Как говорится, «век живи - век учись». С младых ногтей считал что CLOS это просто реализация ООП в Common LISP, а тут нате - настоящий язык, оказывается.

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

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

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

> Для таких интересных хреновин русский царь Петя даже выставку придумал.

Стопудов.

C++ там в категории «анацефалия»: голова большая, а толку мало.

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

> Неправильно понимаешь.

Он правильно понимает, почти. Они не вкладываются в разработку компиляторов или инфраструктуры, просто используют идеи в своих продуктах: workflows в F# — это почти монады, LINQ — это специализированный monad comprehension (который, кстати, в самом Haskell убрали, оставив только для списков). Но всё равно, свежие идеи идут не только от людей MS Research, но и от обычных профессоров из обычных университетов.

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