LINUX.ORG.RU

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

 ,


3

4

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

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

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

★★★★★

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

.NET сразу был с JIT и только с ним.

не знал, спасибо за информацию

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

Совершенно бездоказательное утверждение.

Практика доказывает, что ряд ошибок отлично выявляются, в т.ч. и механических. Получешь ошибку компилятора и задумываешься о причинах необходимости каста. А не постфактум медитируешь на core dump.

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

Расскажи, тупица, чем, по твоему, llvm ir отличается от gimple?

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

Ты мразь. Правильный ответ - разницы между семантикой gimple и llvm ir нет. Прекрати бздеть на темы, в которых не разбираешься, школота убогая.

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

Разрабам GCC работающий код нужен уже сейчас, а не тогда, когда они допилят D. В этом то и проблема.

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

Надо развивать! И развили бы, если GCC начали бы переписывать на D.

да было бы чего развивать, D как язык идеологически тухлый, там нет ничего интересного

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

Лучше б на D переходили.

+100. Причём тогда Ди могли бы пилить не только Уолтер с Александреской, но и тысячи тех мечтателей, которые не проходят дальше LALR :)

Хотя... зачем тогда нужен С++ на Ди, если Ди - сам себе хороший язык?! :) Помнится, был такой пингво-дистр, где все утилиты пытались переписать на Перл. Между прочим, неплохая задумка - ОДИН рантайм и куча переносимых перделок. Так вот Ди - вполне хорошая замена Сям, чтобы наши внуки не ржали над нами, что в 22 веке встречается переполнение стека. :D

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

Ди - вполне хорошая замена Сям, чтобы наши внуки не ржали над нами, что в 22 веке встречается переполнение стека. :D

struct A
{
	byte[10000000] buf_;
}

void main()
{
	A[10000000] a;
}

бам, аналогично:

void a() { a(); }
void main() { a(); }
wota ★★
()
Ответ на: комментарий от wota

достаточно кстати A[10] a;, чтоб дефолтный стек переполнить

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

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

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

да. это меня всегда выбешивало.

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

C++ конвертирует любой указатель в void* неявно.

И указатель на метод, да?

Когда научишься указатель на метод без указателя на объект использовать - шли предложение в комитет по стандартизации.

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

Та лехко! Я согу этот указаетль в файл записать. Чем тебе не использование?

О чем мне теперь в комитет писать?

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

D умеет все, что умеет C, Go - нет

То есть совместим на уровне исходников? Если да, то переформулируем, почему D чем-либо лучше С++?

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

То есть совместим на уровне исходников?

нет

почему D чем-либо лучше С++?

GC, например, в остальном - каких-то тотальных преимуществ для себя лично я не нашел, скорее наоборот - я б из С++ много выкинул, а D еще «фичастее»

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

Собственно у С++ два основных недостатка — обратная совместимость с С и слишком большое число «фич». D исправляет лишь один из них, а Go оба.

И пока единственный (хоть и весьма печальный) неисправленный недостаток Go в плане связывания с C — невозможность малой кровью передать в сишную функцию функцию Go в виде простого указателя. Сегодня пытался навелосипедить биндинг lua к Go — ошпарился.

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

Очень хочу узнать, что ты там предлагаешь в кометит написать )

Напиши как есть, это всегда лучший вариант: «затрудняюсь сохранять указатели на методы в файл». Не забудь пригрозить, иначе не вопримут серьезно: «поэтому либо добавьте срочно неявный каст из указателей на методы в void*, либо перейду на D (Go, Java, Haskell, Lisp)». Все в гугл-транслейт и на bs@cs.tamu.edu

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

Это проблемы анонимуса, а у меня все сохраняется.

Правда не все к void* кастуется, но то такое, жить не мешает.

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

Это проблемы анонимуса, а у меня все сохраняется.
Правда не все к void* кастуется, но то такое, жить не мешает.

Молодец.

anonymous
()

Интересно, оказывается, качество кода улучшается, если компилятор всего лишь скомпилировать им самим, лол!

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

struct foo *p = (struct foo*) arg;

За такой «С++» отрывают руки

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