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

> Короче, функциональщики, руки прочь от святого. Компиляторы не для вас! Пишите себе факториалы с аккерманами, и не булькайте.

гыгыгы :) +10^10.

На заре любой индустрии возникает момент насыщения, когда море непроверенных идей ищут воплощения в толпе сумасбродов-авангардистов. В ИТ этот момент ознаменовался всякими лиспами, рефалами, прологами, MLями, хацкелями и прочим фуфлом - ну скучают чудофреники - чо не написать ещё одно УГ? Не удивительно, что зарекомендовав себя как пром.язык, Си дал жизнь и немного популярности даже жабе и цэшарпу, пришедшим много позднее. И сколько ни трясут функциАнальщики своими факториалами, трезвые прогеры просто пишут на C# и не парятся.
Да, C# вобрал в себя часть ФП идей, но эти идеи оказались блестящими именно как ДОПОЛНЕНИЕ к императивному языку, а не как основной идеей.
Вот такое моё видение.

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

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

Это даже не смешно.

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

А где бенчмарки?

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

> ну скучают чудофреники - чо не написать ещё одно УГ?

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

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

> сумасбродов-авангардистов

Ага, куда уж Ph.D. до «трезвого прогера» :-)

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

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

функциАнальщики

Ну вот как можно о чём-то серьёзном говорить? Настоящий детский сад...

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

> Это даже не смешно.

Определи на хацкеле циклический граф.

А где бенчмарки?

У Окасаки твои бенчмарки. Никакие O(n*log n) никогда не сравнятся с O(1).

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

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

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

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

> Ага, куда уж Ph.D. до «трезвого прогера» :-)

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

У вас какое-то потреблядское отношение к теоретической CS.

А какое оно должно быть? Эстетское? «У-у-у, ы-ы-ы, monad zipper, прикольно, куды бы его засунуть»

Никто не говорит, что ФП-методики уже способны прямо сейчас заменить всё существующее.

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

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

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

> Так, в-основном левый народ.

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

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

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

> Да, C# вобрал в себя часть ФП идей, но эти идеи оказались блестящими именно как ДОПОЛНЕНИЕ к императивному языку, а не как основной идеей.

Не надо! Сомнительные идейки. Лямбды очень конкретно испохабили читабельность C#. Если первые версии языка были очень достойным конкурентом Джаве, особенно за счет геттеров с сеттерами, то с появлением лямбд язык стал полным УГ.

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

> А Виктор Иванович Петрик вон тоже доктор наук и академик. Всякие, знаете ли, дохтора нынче бывают.

Комиссия РАН исследовала его «фильтры» и дала нормальный, внятный анализ того, почему это не «открытие».

А какое оно должно быть? Эстетское? «У-у-у, ы-ы-ы, monad zipper, прикольно, куды бы его засунуть»

А чего ты смеёшься? То, что ты не понимаешь, что это такое, не значит, что ты это не используешь. Просто ты об этом не знаешь.

ненужных идиотских теоремок

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

Ну ладно. Видимо, это бесполезно. Либо тролль, либо ФГМ.

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

> Комиссия РАН исследовала его «фильтры» и дала нормальный, внятный анализ того, почему это не «открытие».

Именно. Но он при этом все равно «доктор». Как и те типа как бы «Ph.D.», которые хацкели с лиспами пишут.

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

А оно мне надо, знать всякую херню?

Ну ладно. Видимо, это бесполезно. Либо тролль, либо ФГМ.

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

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

> Определи на хацкеле циклический граф.

Datа.Graph в пакете containers.

У Окасаки твои бенчмарки. Никакие O(n*log n) никогда не сравнятся с O(1).

У него описываются персистентные структуры. Можно при желании сделать O(1).

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

> Именно. Но он при этом все равно «доктор». Как и те типа как бы «Ph.D.», которые хацкели с лиспами пишут.

Ну так давай такой же свой объективный анализ ненужности.

А оно мне надо, знать всякую херню?

Как ты определяешь-то, что херня, а что нет?

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

> Лямбды очень конкретно испохабили читабельность C#. Если первые версии языка были очень достойным конкурентом Джаве, особенно за счет геттеров с сеттерами, то с появлением лямбд язык стал полным УГ.

Ну если с точки зрения ентрпрайза, то конечно.

sv75 ★★★★★ ()

ГЦЦ настал ППЦ

ГЦЦ настал ППЦ

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

> Основная структура данных в компиляторе - это граф, а вовсе не дерево, как любят втирать нечистые на руку функциональщики.

Это уж совсем смешно, учитывая, что, например, под крышкой GHC работает Spineless Tagless Graph Machine.

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

> Призываю в тред дружественных лисперов.

Не надо :)

А то сейчас придёт archmage и тоже начнёт доказывать ненужность знания теоретического материала.

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

> Это уж совсем смешно, учитывая, что, например, под крышкой GHC работает Spineless Tagless Graph Machine.

Ага ага, и реализация у нее такая вся из себя функциональная, что функциональнее некуда.

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

> Ну так давай такой же свой объективный анализ ненужности.

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

Как ты определяешь-то, что херня, а что нет?

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

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

> У него описываются персистентные структуры. Можно при желании сделать O(1).

O(1) можно только мутабельно. А это уже не функциональщина.

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

> Ага ага, и реализация у нее такая вся из себя функциональная, что функциональнее некуда.

Ты читать умеешь? Человек говорил, что «функциональщики» втирают про деревья, а не графы (что более чем абсурдно, т.б. если учитывать, что дерево — это тоже граф).

А реализация тут вообще никаким боком не впёрлась, это неважно. Конечно, если это база транслятора, то её сделают на том, что ближе низлежащей машине.

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

> Ты читать умеешь? Человек говорил, что «функциональщики» втирают про деревья, а не графы (что более чем абсурдно, т.б. если учитывать, что дерево — это тоже граф).

Это ты читать не умеешь. Функциональщики втирают, что компилятору достаточно оперировать деревьями, то есть очень ограниченным частным случаем графа. Тот же STG до начала исполнения тоже является чисто деревом.

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

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

> что для компиляции приличных языков, таких как C++, деревьев недостаточно
C++ - говно

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

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

Ты знаешь значение слова «объективность»?

Ну, это на глаз.

Это 5!

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

Думаешь, откуда у тебя вообще есть компиляторы, высокоуровневые ЯП, сборщики мусора? С неба свалились, или «практики» вот так взяли и написали?

anonymous ()

то с появлением лямбд язык С# стал полным УГ.

Не надо «ля-ля».

Основная структура данных в компиляторе - это граф,

Компилятор большой. Уточни :) в какой именно части компилятора «основная структура - граф».

Ну пусть бы они скучали тихо, в узком кругу.

Ан нет же - Boost.Spirit, Boost.Lambda, Boost.Foreach костылят, лямбды в пром. язык вводят :) Чё не нравится-то?

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

> Компилятор большой. Уточни :) в какой именно части компилятора «основная структура - граф».

Половине оптимизаций требуется flow graph.

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

Да это бесполезно.

Гений мыслит и создаёт. Человек обыкновенный приводит в исполнение. Дурак пользуется и не благодарит.

Наш пациент, очевидно, в третьей категории.

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

> Ан нет же - Boost.Spirit, Boost.Lambda, Boost.Foreach костылят, лямбды в пром. язык вводят :) Чё не нравится-то?

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

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

А все вменяемые люди знают, что для компиляции приличных языков, таких как C++, деревьев недостаточно


Т.е. хаскиль и шарп с перлом - тоже приличные. Слава яйцам, успокоил :)

то работа с циклическими графами там получается полнейшим извращением.

А приведи пример? :)

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

> Гений мыслит и создаёт. Человек обыкновенный приводит в исполнение. Дурак пользуется и не благодарит.

Наш пациент, очевидно, в третьей категории.

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

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

> Т.е. хаскиль и шарп с перлом - тоже приличные. Слава яйцам, успокоил :)

Ну не смешно ли? Это не критерий приличности, а свойство.

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

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

> Ан нет же - Boost.Spirit, Boost.Lambda, Boost.Foreach костылят, лямбды в пром. язык вводят :) Чё не нравится-то?

Вобщем-то, они в большинстве случаев смотрятся довольно чужеродно. Даже шаблоны и то не очень (после нормального параметрического полиморфизма или generics из Java).

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

> Возможно, по этому поводу и сказать-то нечего, хотя мне скорее кажется, что лидеры gcc не совсем уверены в своих разработчиках, и сомневаются в нормальности применения ими исключений, а обработка внезапных исключений, добавление новых это, конечно лишний гемор, но он может компенсироваться удобством разработки, к тому же компиляторы нынче не глупые, всё лишнее сами выкинут, а то что чего-то не достаёт будет видно вполне хорошо(это я про обработку исключений).

Это взаимосвязанные вещи. Отсутствие методологии можно конпенсироовать высокой проффесиноальностью специалистов. И чем больше проект, тем проффесиональность болжна быть выше. gcc - очень большой. Вот наберуться опыта, придут другие, можно будет и на отсутствие методологии забить.

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

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

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

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

> Хотя я всё равно против сипипей как пром.языка: этот «ассемблер с классами» - бомба во всех смыслах, что до сих пор (напоминаю - 21 век) ошибки «перезаписи буфера» являются новостью. Нужно развивать D, даже «сам Александреску» вполне одобряет этот язык (и критикует С++). Удобнее/защищённее язык -> качественнее проги -> быстрее нарастание программной базы -> мир во всём мире. А С++ нас засасывает как болото - чем больше на нём пишут, тем глубже ППЦ.

Александреску прав. D имеет нехилые шансы стать сильно лучше C++.

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

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

>ниже написал, что вся инициализация и деинициализация (в том числе выделение и освобождение памяти) должна быть в конструкторах/деструкторах объектов

С какиго фига деструкция обекта на хипе вызываться то будет?

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

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

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

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

>Вот такое моё видение.

Это даже не смешно.

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

>>ниже написал, что вся инициализация и деинициализация (в том числе выделение и освобождение памяти) должна быть в конструкторах/деструкторах объектов

С какиго фига деструкция обекта на хипе вызываться то будет?

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

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

>что для компиляции приличных языков, таких как C++

Упал под стол.

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

>> Что на практике полезно и другими применяется, то не херня. А что теоретики воспевают, то херня заведомо.

Думаешь, откуда у тебя вообще есть компиляторы, высокоуровневые ЯП, сборщики мусора? С неба свалились, или «практики» вот так взяли и написали?

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

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

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

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

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