LINUX.ORG.RU

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

 ,


3

4

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

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

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

★★★★★

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

3) необходимость реализовать языковые конструкции, не поддерживаемые напрямую с++, скажем, параметрический полиморфизм

Каким боком С++ это не поддерживает? Это же легко через классы решается, при этом решение будет намного безопаснее.

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

Надо просто принимать правила игры для каждого языка, а не лезть в чужие монастыри грязными сапогами. Таким же фееричным бредом будет дословный перевод русского на английский и наоборот. Это же никого не коробит, что надо думать на английском, когда по английски говоришь. Так же и с языками программирования.

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

Жестят тут анонимусы ))) Пишите на vala короче, код потом преобразуется в С, который скомпилируется в машинный код компилятором который внезапно написан на С++ )))

Какое отношение имеет язык на котором реализован компилятор к скорости порождаемого компилятором кода?

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

Виртуальная машина никогда не позволит сделать быстрый код.

LLVM — не виртуальная машина (внезапно).

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

LLVM — не виртуальная машина (внезапно).

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

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

frost_ii>> Виртуальная машина никогда не позволит сделать быстрый код.

sv75> LLVM — не виртуальная машина (внезапно).

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

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

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

можно, но это не имеет смысл на данный момент - VM != платформа вроде Java

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

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

В крупном проекте — жизненная необходимость.

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

Low Level Virtual Machine (LLVM) — универсальная система анализа, трансформации и оптимизации программ, реализующая виртуальную машину с RISC-подобными инструкциями

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

Если честно, достал этот бред про тормознутось Vala, вот вам бенчмарк, лузеры: http://code.google.com/p/vala-benchmarks/wiki/BenchResults

Vala, даже не смотря, на наличие garbage collector'а сделал плюсы почти во всех тестах, что собственно говоря, вполне ожидаемо. Ибо просто невозможно реализовать компилятор, генерирующий адекватный исполняемый код, из тех вырвимозг-конструкций, которые есть в плюсах.

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

Vala, даже не смотря, на наличие garbage collector'а

В одноразовых программках GC дает самый большой выигрыш.

сделал плюсы почти во всех тестах

4 из 9 - это «почти все»?

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

Ты еще не заметил, кто проводил тестирование.

Я не знаю этого парня. Не могу же я так сразу обвинить незнакомого человека во лжи %)

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

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

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

Разраб Vala - это уже намекает на неосиляторство C++ by design. Небось хню какую-то написали или забыли включить оптимизацию:)

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

Вот читаю я такие мессаги, и вижу, как только адекватные люди (чувак осиливший написать компилятор языка — адекватный человек, единственное исключение из этого правила — дохлый страус) начинают прилюдно лажать плюсы, его адепты просто ссутсо от злости и начинатют визжать про 'неосиляторство' и 'говнокодерство', даже неудосужившись краем глаза взгянуть на факты. Мне вас жалко, честно. Спустить столько лет жизни на осиляторство этого говноязыка, и не получить почти никакого результата...

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

В одноразовых программках GC дает самый большой выигрыш.

define 'одноразовых программках'

4 из 9 - это «почти все»?

OK. Не 'почти все', но сам факт, что плюсы сливают в некоторых тестах, уже впечатляет. Причём, следует учесть, что использовался несколько устаревший компилятор Vala, а язык постоянно развивается, приблизительно раз в 2-3 месяца, выходит новая минорная версия.

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

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

«бенчмарков» в инете полно, доказывать в каждом случае, что автор накосячил/схитрил - пустая трата времени, автор этих бенчмарков вроде как ориентируется на shootout - это хорошо, а вот то, что спустя годы он так и не родил что-то, что включили бы в состав shootout - плохо, т.к. либо он не осилил написать все примеры, либо не заинтересован в честном сравнении

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

define 'одноразовых программках'

Короткоживущих. В которых GC можно и не запускать во время работы.

сам факт, что плюсы сливают в некоторых тестах, уже впечатляет

Кого как. Vala сама по себе язычок довольно убогий, из-за малой распространенности в реализации наверняка куча граблей, батареек мало.

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

а у валы кроме транслятора и компиляторы имеются? А вообще vala - несерьезное, мертворожденное поделие. А вот D - вполне себе годный язык, авторы не пыонеры, «убить плюсы» не стремятся, а только тихо-мирно пилят свой язык.

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

а у валы кроме транслятора и компиляторы имеются? А вообще vala - несерьезное, мертворожденное поделие. А вот D - вполне себе годный язык, авторы не пыонеры, «убить плюсы» не стремятся, а только тихо-мирно пилят свой язык.

Так это и плохо, что не старается занять нишу. Если бы старались работали над его стабильностью и переносимостью. Работают над фичастностью. Это хорошо, рано или поздно, но будет очень хороший язык. Вот только меня тогда уже не будет. Так что смысла смотреть на D для меня нет.

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

Оптимизации? Виртуальная машина никогда не позволит сделать быстрый код. Применение виртуальной машины делает работу удобнее, но платить за это приходится скоростью.

Мсье идиот? Или просто дебил?

В GCC точно такая же «виртуальная машина», причем не одна. Тот же GIMPLE, по сути, ничем от LLVM не отличается.

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

Low Level Virtual Machine (LLVM) — универсальная система анализа, трансформации и оптимизации программ, реализующая виртуальную машину с RISC-подобными инструкциями

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

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

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

Кстати про исходный код. Судя по коду, алгоритмы замеряются вместе с временем вывода на экран. Это отлично. И при замере всей проги код с GC будет быстрее, да. Первый попавшийся тест - recursive. Непонятно сфига код вычислений С и С++ разный, хотя причин для этого нет (потому что там ни ООП ни контейнерами ни чем С++-специфичным не пахнет). И в результатах теста слив С++. Простая замена вычислительной части на сишную (т.к. С++ код к С++ не привязан) даст тот же результат, что и С. Отличное тестирование.

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

как раз именно она (еще более внезапно)

Четкого определения виртуальной машины нет (внезапно). А вот что такое абстрактная машина определено очень даже конкретно. Так вот, LLVM - это абстрактная машина. Абстрактные машины, промежуточные представления в компиляторах, часто называют «виртуальными машинами», но как правило исключительно с целью поржать и потроллить ламеров. При таком подходе GIMPLE тоже виртуальная машина.

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

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

Ты бредишь. Наверное, тебя головой часто об пол роняли?

Абсолютно все современные компиляторы используют такую же архитектуру, как LLVM. В том числе и те, что заточены на одну единственную целевую платформу.

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

Абсолютно все современные компиляторы используют такую же архитектуру, как LLVM. В том числе и те, что заточены на одну единственную целевую платформу.

Грубовато, однако отвечу, что в gcc есть несколько уровней оптимизации, часть из которых возможна с внутренней машиной gcc с учетом известной целевой платвормы. Вот LLVM эту возможность оторвали. Под конкретную платформу оптимизации возможны только на следующих этапах.

Ну, по крайней мере, так раньше было.

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

Четкого определения виртуальной машины нет (внезапно).
А вот что такое абстрактная машина определено очень даже конкретно
Так вот, LLVM - это абстрактная машина.

внезапно (c), софтварная реализация абстрактной машины - это виртуальная машина, LLVM - вполне себе реализация, а не теория

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

как раз именно она (еще более внезапно)

«The LLVM Project is a collection of modular and reusable compiler and toolchain technologies. Despite its name, LLVM has little to do with traditional virtual machines, though it does provide helpful libraries that can be used to build them.»

Наличие штуки для исполнения IR не делает её VM. Вы наверное просто не игрались с нею. У компиляторов основная оптимизация обычно и не гоняется поверх сурсов на асме конкретной машины, это же убиться можно.

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

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

В чём разница между IR и GIMPLE?

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

Он приносит деньги - значит закопать его будет уже непросто

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

Госспади... Повторяю еще раз - в первом случае, без каста ЧЕЛОВЕК(не компилятор) ошибку может просто проглядеть. Во втором, он будет ДУМАТЬ и если таки совершит ошибку, то ОСОЗНАННО. Дошла моя мысль? Во втором случае, при поиске ошибок он не будет гадать как там компилятор сделал приведение типов, он будет проверять диаметр и кривизну своих рук...

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

Грубовато, однако отвечу, что в gcc есть несколько уровней оптимизации, часть из которых возможна с внутренней машиной gcc с учетом известной целевой платвормы.

Ты вообще хоть что либо про gcc знаешь? Или просто тупой?

Вот LLVM эту возможность оторвали.

Утю-тюшечки. Во первых, задайся вопросом, что такое интринсики. Во вторых, помедитируй, идиот, на platform string. В третьих, подумай, лошара, зачем там у большинства инструкций и типов данных есть Alignment.

Под конкретную платформу оптимизации возможны только на следующих этапах.

А в LLVM тоже до хрена этих самых следующих этапов, если ты не в курсе. Точно так же, как в gcc. Посмотри на SelectionDAG, на legalization pass и прочее.

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

внезапно (c), софтварная реализация абстрактной машины - это виртуальная машина, LLVM - вполне себе реализация, а не теория

Идиот. Ты не понимаешь, что такое абстрактная машина, так и запишем.

Кстати, идиот, GIMPLE - тоже вполне себе реальная софтовая реализация, если что.

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

Ты не понимаешь, что такое абстрактная машина, так и запишем.

ну давай ссылку на определение, которое ты считаешь верным

GIMPLE - тоже вполне себе реальная софтовая реализация, если что.

GIMPLE - IR и не больше

П.С. либо смени манеру общения, либо я сделаю тебе одолжение и не буду тебе отвечать

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

в первом случае, без каста ЧЕЛОВЕК(не компилятор) ошибку может просто проглядеть. Во втором, он будет ДУМАТЬ и если таки совершит ошибку, то ОСОЗНАННО. Дошла моя мысль?

Это не мысль, а суеверие.

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

ну давай ссылку на определение, которое ты считаешь верным

http://en.wikipedia.org/wiki/Abstract_machine

GIMPLE - IR и не больше

Ты не бухти, а конкретно отвечай - чем GIMPLE отличается от LLVM IR. Правильный ответ - ничем.

Что GIMPLE, что LLVM IR - абстрактные машины, промежуточное представление для компиляции ЯВУ в более-менее традиционные платформы.

И тот и другой в дальнейшем преобразуются в более низкоуровневое представление (в случае с LLVM - SelectionDAG), которое уже в свою очередь совершенно машиннозависимо. Так же, что GIMPLE что LLVM IR тоже весьма платформозависимы.

Итак, или ты обосновываешь наличие разницы между архитектурой LLVM и GCC, или признаешь себя ламером и извиняешься перед всем ЛОРом за ту чушь, которую ты тут нес.

либо смени манеру общения

Как еще говорить с обнаглевшими от безнаказанности ламерами, которые несут несусветную чушь и считают, что так и надо?!?

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

http://en.wikipedia.org/wiki/Abstract_machine

«An abstract machine implemented as a software simulation, or for which an interpreter exists, is called a virtual machine.» - пожалуйста

Что GIMPLE, что LLVM IR - абстрактные машины,

речь именно про реализацию - см. выше

Как еще говорить с обнаглевшими от безнаказанности ламерами

с ними вообще говорить не стоит

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

Это не мысль, а суеверие.

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

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

<сарказм>ну конечно, ведь гораздо проще увидеть ошибку в неявном приведении типов, чем в явном, не так ли?</сарказм>

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