LINUX.ORG.RU

GCC переходит на С++ компиляцию самого себя с целью улучшения качества кода

 ,


3

4

Для начала изменен только bootstrap код. Цель — улучшение качества кода (поскольку С++ жестче работает с типами). Когда там появятся классы и темплейты?.. Официально заявленные причины использовать С++:

  • C++ — стандартизованный, популярный язык.
  • C++ — практически надмножество C90, используемого внутри GCC.
  • Совместимый с С C++ код так же эффективен, как просто код C.
  • C++ поддерживает более чистый код во многих важных ситуациях.
  • C++ позволяет легче создавать и поддерживать четкие интерфейсы.
  • C++ никогда не требует более кривого кода.
  • C++ не панацея, но улучшение.

>>> Подробности

★★★★★

Проверено: Shaman007 ()
Последнее исправление: Silent (всего исправлений: 6)

Молодцы, сразу на C++11?

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

Новый раунд Clang vs GCC

Будь это не linux.org.ru, может и было что. А так, о чем пар выпускать, если ядро повязано на gcc до безобразия и клангу в этом направлении еще пахать и пахать?

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

не просто за 8 тредов про кланг уже 10 раз посрались и кроме новичков все в курсе.

ЗЫ кланг собирает рабочее ядро.

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

фряху же собирает. и сколько-то там дофига процентов пакетов дебиана. допилят поди)

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

здоровая конкуренция всегда выгодна конечным пользователям.

ок. я просто понял исходный пост как «[gcc скатился!]»

AptGet ★★★
()

Вот и отлично. Сколько можно было мазохизмом заниматься.

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

Т.е. вместо нормального сишного присваивания типа:

void f(void *arg)
{
	struct foo *p = arg;
	...

теперь надо писать:

void f(void *arg)
{
	struct foo *p = (struct foo*) arg;
	...

Такая вот «простота» и «прямота».

LamerOk ★★★★★
()

C++ никогда не требует более кривого кода.

Потому что он по дефолту предельно кривой.

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

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

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

В этом случае ключевые слова «бессмысленное усложнение».

у тебя все аргументы в виде void* сделаны или ты просто придраться решил?

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

у тебя все аргументы в виде void* сделаны

Что заставляет тебя так думать?

или ты просто придраться решил?

Третьего варианта нет?

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

Что заставляет тебя так думать?

«бессмысленное усложнение»

Третьего варианта нет?

для примера LamerOk? предлагай свой вариант

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

у тебя все аргументы в виде void* сделаны

Что заставляет тебя так думать?

«бессмысленное усложнение»

Какой-то странный у тебя мыслительный процесс.

Третьего варианта нет?

для примера LamerOk?

Реально странный.

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

Я объяснил, какой смысл в этом ищут авторы ГСС. Он есть. Считать ли удлиннение и усложнение кода адекватной платой - каждый решает за себя.

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

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

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

Я объяснил, какой смысл в этом ищут авторы ГСС. Он есть.

В данном конкретном примере код стал хуже. В Си есть несколько вещей, которые сделаны лучше, чем в Си++, и работа с void * - одна из них.

А для GCC «в целом» переход, конечно, будет благом.

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

Какой-то странный у тебя мыслительный процесс.
Реально странный.

не страннее твоего, это ты сказал про «бессмысленное усложнение», а теперь юлишь, «запрет» на использование void* ничем не хуже варнингов от gcc в плане того, что в большинстве случаев обращает внимание на потенциально некорректный код, или ты и варнинги не правишь?

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

то ты сказал про «бессмысленное усложнение», а теперь юлишь

O_o

«запрет» на использование void* ничем не хуже варнингов от gcc

Уходи, норкоман.

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

O_o
Уходи, норкоман.

извини, сразу не оценил с кем имею дело, без проблем

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

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

А если вот так:

int a = +b + +c / (+d - +e) + +f;
? Он ведь не крив. Он просто более длинен. И явно указывает на то, что в другом случае подразумевается... Разве нет? ;)

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

Не

void f(void *arg)
{
	struct foo *p = (struct foo*) arg;
	...

А

void f(void *arg) {
    foo *p = static_cast<foo*>(arg); // struct не нужен

И вообще - передачу параметров через void* оценят на этом ресурсе.

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

Разве нет? ;)

в случае с указателями компилятор даст по рукам, если ты попробуешь передать в foo, например, int*, да и глядя на прототип функции сразу видно, что там ожидается, т.е. польза есть, от «+b» - пользы нет

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

В какой системе ценностей ценятся бессмысленные операции?

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

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

И вообще - передачу параметров через void* оценят на этом ресурсе.

Нормальный способ передавать данные в обобщенную функцию.

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

от «+b» - пользы нет

В некоторых языках есть, хехе.

> "5" + "6"
'56'
> +"5" + +"6"
11
PolarFox ★★★★★
()
Ответ на: комментарий от AptGet

А потом долго ловить глюки... Часто это просто указание на то, что кто-то плохо подумал. Небрежность. Чреватая.

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

Не всегда. Но достаточно часто.

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

он С имеет в виду, но в самом деле в С++ шаблоны есть

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

А потом долго ловить глюки... Часто это просто указание на то, что кто-то плохо подумал. Небрежность. Чреватая.

А какие еще есть варианты в С, кроме void*? Магия на макросах?

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