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)

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

> Т.е. довление конкретного coding standard является высшим мерилом «барахло - небарахло»? Да ну.

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

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

>> Исключения отлавливаются тестами. Или ты делаешь рефакторинг без тестов? ССЗБ.

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

Тесты на тот участок, на котором не было исключение. И ты изменяя библиотеку, почувствовал, что в программе оно там выскочит и предложил им написать? Ну ты гений. Жалко таких мало. И хорошо что лидеры проекта gcc это понимают.

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

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

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

>Выявляются различия. И на основе этих знаний строиться кодинг стандарт.

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

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

>Тебе же говорят - не надо наждачкой жопу подтирать

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

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

>>Еще раз: выделять и освобождать память надо в конструкторе и деструкторе соответственно.

Представь что тот код - в конструкторе.

Значит нужно вынести выделение памяти в отдельный объект, чтобы его деструктор освободил память если возникнет исключение. Например использовать smart pointer, о чем уже упоминали выше.

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

>> Выявляются различия. И на основе этих знаний строиться кодинг стандарт.

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

Хм... может быть. Я лишь сказал как должно быть и есть в некоторых фирмах. Причем он со временем меняется.

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

>Например использовать smart pointer, о чем уже упоминали выше.

Да - он очень поможет если в память выделяется для _поля_ означенного тобой ООПъекта.

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

> Чувак, видимо, Саттера ниасилил.

Угу - С++ чуть ли не единственный язык с таким количеством книжек «что делать нельзя» и прочих выстрелов в ногу.

В остальных языках обычно ценяться открывающиеся возможности.

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

Коллега, ты такой толстый, что щас лопнешь, я это даже с дуба вижу.

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

>Читай уже Саттера, друкк.

Спасибо - но С++ никогда больше не станет моим языком. Он у меня ушел в страну делфи сразу за делфи 12 лет назад. А если когда-то наступит сюрреализм что придется писать на С - я на С сначала напишу язык на котором можно будет писать. И в нем не будет ничего общего с С++.

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

> Врёшь. Haskell исполняется на графах из-за нестрогой семантики (иначе никак).

Разницу между кодогенерацией и временем исполнения не знаешь?

Я уж молчу о том, что эффективный интерпретатор самой STG написать на хацкеле было бы просто невозможно.

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

> Потому что С++ такой прикольный язык не?

Мне тоже не нравится C++, но этот случай уж точно не его вина.

А вообще, C++ использовать можно, но только сперва его нужно основательно обрезать. Например, не допускать исключений в процедурах, управляющих возникновением и разрушением объекта.

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

>Умение пользоваться инструментом пока еще никто не отменял.

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

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

> Т.е. довление конкретного coding standard является высшим мерилом «барахло - небарахло»? Да ну.

Устав, как известно, написан кровью. А coding standards написаны потом, нервами и потраченными зря мегабаксами.

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

Бросаемые чем-то библиотечным исключения являются частью интерфейса. Изменения интерфейса библиотеки влекут за собой изменения в клиентской части. Я доступно излагаю?
Тесты вселяют в меня уверенность, что исключения бросаются только так, как положено.

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

> А если когда-то наступит сюрреализм что придется писать на С - я на С сначала напишу язык на котором можно будет писать. И в нем не будет ничего общего с С++.

Тяжелый случай. :)

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

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

И как ты хтого не допустишь если в оных надо вызывать сторонние функции?

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

> эффективный интерпретатор самой STG написать на хацкеле было бы просто невозможно.

Равно так же, как и на C невозможно создание больших, сложных систем.

А ещё можно напрямую на языке ассемблера. Давай, пиши.

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

> Я тебе все порушу - кодинг стандарт в подавляющем большинстве случаев набор личных тараканов пишущего.

Обычно это все же квинтэссенция опыта поколений, а не «личные тараканы».

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

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

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

> Равно так же, как и на C невозможно создание больших, сложных систем.

Естественно. Для этого C++ есть. И Java. И еще C# был когда-то, пока там лямбды не появились.

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

> Равно так же, как и на C невозможно создание больших, сложных систем.
Линус как бы против.

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

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

Просто теоретиков они наверное читали уровня «книжка для общего курса в техническом ВУЗе», а теперь жалуются, что фортран, оказывается, вообще с КС-грамматиками видимо не дружит? %)

Пока они поняли что все совсем не так - очень много времени прошло.

Они, походу, не поняли разницу между теоретической книжкой по тех. наукам и всякими священным писаниями.

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

>Что еще надо для щастия?

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

С++ в этом смысле очень напоминает вселенные фантасмагории навроде Кин-дза-дза - с кучей дурацких правил которые не подчиняются объективной реальности - а всего лишь существуют в этой бредововой фантасмагории.

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

> И как ты хтого не допустишь если в оных надо вызывать сторонние функции?

По идее в них тоже не должны бросаться исключения. Да, этого гарантировать нельзя, но я всегда думал, что исключения нужны только в исключительных случаях (такая вот тавтология). То есть они ну никак не должны появляться в функциях такого рода.

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

> Естественно. Для этого C++ есть. И Java.

Не только. Можешь думать что хочешь и считать остальных маргиналами, но другие подходы тоже есть и они развиваются, причём далеко не последними людьми в мире CS. Хочешь ты того или нет, эти вещи всё равно появятся в мейнстриме, рано или поздно, и ими будут пользоваться. На самом деле, пользуются уже сейчас.

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

> Хочешь ты того или нет, эти вещи всё равно появятся в мейнстриме, рано или поздно, и ими будут пользоваться. На самом деле, пользуются уже сейчас.

Знаете, эти, которые на гей-парады ходят, тоже постоянно кричат, что они мол тоже мейнстрим, а скоро будут мейнстримей всех.

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

> Удовлетворение от работы.
Есть их у меня.

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

Проблемы, которые я решаю, не имеют отношения к С++.

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

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

Нет, давай без дурацких аналогий, а по существу. Мы пока от тебя кроме твоих гей-парадов ничего конструктивного так и не услышали.

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

> Мы пока от тебя кроме твоих гей-парадов ничего конструктивного так и не услышали
Так гей-парады - это конструктивно или нет? Определись уже, коллега.

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

>>Что еще надо для щастия?

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

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

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

>Устав, как известно, написан кровью. А coding standards написаны потом, нервами и потраченными зря мегабаксами.

Очень, очень хороший язык.

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

Коллега, программизм уже давно не является моим хобби. Какого хрена я буду убивать время? Единственное, для чего этим стоит заниматься - больше денег/выше по лестнице.

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

>То есть они ну никак не должны появляться в функциях такого рода.

С чего это? Это и есть исключительный случай такой функции.

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

>наете, эти, которые на гей-парады ходят, тоже постоянно кричат, что они мол тоже мейнстрим, а скоро будут мейнстримей всех.

Ты себя ведешь как COBOL-программер в период расцвета.

Ты что думаешь что мегаязык всех времен и народов уже изобретен и ничего меняться не будешь? Сюрприз - реальность со временем меняется и не остановиться в комфортном для тебя месте. Или ты расчитывал и через 15 лет писать на плюсах?

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

>Проблемы, которые я решаю, не имеют отношения к С++.

Исключение в конструкторе. 2 раза ку.

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

> Или ты расчитывал и через 15 лет писать на плюсах?

О нет, только не это. Через 15 лет я буду большим начальником, и буду командовать сотней кодеров, которые пишут на плюсах.

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

Будет меняться, будет. Вот, C++1x на подходе.

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

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

А - ты из этих. Мечтаешь достичь уровня своей некомпетентности.

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

Будет меняться, будет. Вот, C++1x на подходе.


Да - добавляя тому бардаку с фундаментальными проблемами еще бардака - фундаментальные проблемы порешаются.

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