LINUX.ORG.RU

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

Это затычки а не компиляторы

По сравнению с GCC, да

И да, даже они не будут поддерживать совместимость бесконечно

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

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

P.S. если не ошибаюсь, то именно эту ошибку я вижу у половины пакетов которые выкидывают из тестируемого дебиана.

Можно примеры названий таких пакетов? Я без подколки, мне правда интересно, что за код с функциями без прототипов сумел дожить до Debian Testing 20-аж-24 года.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от AlexVR

-ffast-math опасна, и прятать её за -Ofast не лучший вариант.

ЛОЛ, а что из названия fast-math как-то имплицитно понятно что «она опасна»? Я понимаю что в документации написано, но там про fast написано. Так-то и за -O3 много чего спрятано.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от vbr

Если твой код не соответствует никакому стандарту, это проблема только твоего кода.

Нифига подобного. Ещё скажите, что K&R кода не существует. Хотя в то время никакого стандарта не было, а правильно/неправильно определялось по соответствию книги «The C programming language».

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

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

Нифига подобного. Ещё скажите, что K&R кода не существует. Хотя в то время никакого стандарта не было, а правильно/неправильно определялось по соответствию книги «The C programming language».

Не знаю, что такое K&R код, но если компилятору передают флажок -std=c99 то компилятор справедливо ожидает код в соответствующем стандарте. В мануале gcc ничего не написано про поддержку K&R, поэтому любителям археологии, возможно, не повезло.

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

Главное убедить в этом разработчиков gcc, они-то так не считают.

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

Настолько хорошо, что Python 2 бросили поддерживать и сказали, что мы должны переписать килотонны скриптов с нуля!

Ну просто прелесть. Через 10 лет выйдет Python 4, будете с Python 3 портировать.

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

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

Был подобный случай на первой работе, я полдня с ума сходил. Функция в return возвращала одно (видно было и принтами, и отладчиком), а на принимающей стороне оказывалось другое. Тот же implicit int оказался.

Так что да, нафиг.

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

Главное убедить в этом разработчиков gcc, они-то так не считают.

У кого-то есть сомнения, что текущие авторы gcc творят хрень? Так вы вспомните, как сильно их любит, например, финский босс.

gcc более-менее был где-то до 3.x включительно. ЕМНИП начиная с 5.x зачем-то Сишный код (который не переписывали и оставили идеологически сишным) засунули в классы C++. И теперь даже скомпилировать компилятор C без компилятора C++ нельзя. ЧТО ЭТО ЗА ЕРУНДА?

В мануале gcc ничего не написано про поддержку K&R, поэтому любителям археологии, возможно, не повезло.

Это не правда. Gcc частично совместим с K&R C. Читай про -traditional.

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

У кого-то есть сомнения, что текущие авторы gcc творят хрень? Так вы вспомните, как сильно их любит, например, финский босс.

У меня есть.

gcc более-менее был где-то до 3.x включительно. ЕМНИП начиная с 5.x зачем-то Сишный код (который не переписывали и оставили идеологически сишным) засунули в классы C++. И теперь даже скомпилировать компилятор C без компилятора C++ нельзя. ЧТО ЭТО ЗА ЕРУНДА?

Видимо им удобней писать на С++.

Это не правда. Gcc частично совместим с K&R C. Читай про -traditional.

-traditional
-traditional-cpp
Try to imitate the behavior of pre-standard C preprocessors, as opposed to ISO C preprocessors. See the GNU CPP manual for details.

Note that GCC does not otherwise attempt to emulate a pre-standard C compiler, and these options are only supported with the -E switch, or when invoking CPP explicitly.

Всё, что делает этот флаг - немного меняет поведение препроцессора. Не думаю, что это правильно называть частичной совместимостью.

vbr ★★★★
()
Ответ на: комментарий от no-such-file

названия fast-math как-то имплицитно понятно что «она опасна»

Это как обычно у параноиков бывает: если как работает не понятно, то конечно оно представляет страшную опасность)

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

Gcc частично совместим с K&R C. Читай про -traditional.

скорее про -ansi

и можно делать очень забавные вещи :)

int foo()
  int a,b;
{ return a; }

перестаёт контролировать параметры, а так как они cdecl в регистрах, можно получать очень неожиданные и иногда красивые эффекты.

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

У gcc нововведения еще хуже, implicit-function-declaration неотключаемая ошибка. Как собирать старый код?

Ответ очевиден: написать патч и опубликовать его.

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

Настолько хорошо, что Python 2 бросили поддерживать и сказали, что мы должны переписать килотонны скриптов с нуля!

Ну просто прелесть. Через 10 лет выйдет Python 4, будете с Python 3 портировать.

За чем же ждать 10 лет, теперь процесс непрерывен: https://docs.python.org/3/deprecations/index.html

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

Хз, Armadillo детектит и ругается, если fast_math включена. Где-то находит обоснование. Ну и… я ещё не видел «не говнокода» ;-) везде, рано или поздно что-то всплывает, как в Сене.

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

Видимо они не умеют программировать.

Я думаю, что это твои закидоны просто. Если бы они не умели программировать, gcc бы не оставался одним из лидирующим компиляторов на протяжение десятилетий.

Сишный код в классах ничуть не лучше, наоборот, это уже не Си, но еще и не Си++.

Если код для компиляции требует g++, значит это С++. То, что он не нравится тебе лично - это только твои проблемы. Я, к примеру, считаю, что 50% С++ фич вредны, но это не делает оставшиеся 50% бесполезными. Поэтому оптимальный способ использовать С++ это как раз писать в стиле С, но дополняя его в нужных местах отсутствующими фичами.

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

Это те, которые могут отличить нормальный Си от недоСи++, который невозможно отлаживать из-за VLA и т.п. бреда ISOшников.

Похоже они уже не могут отлаживать из-за деменции. ISOшники тут не причем))

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

Если ты про https://en.wikipedia.org/wiki/Armadillo_(C%2B%2B_library)

Armadillo is a linear algebra software library

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

Ну и… я ещё не видел «не говнокода»

Да хоть тот же Qt. У них в «окошках» QPoint это целое, а для промежуточных вычислений QPointF используется, который float. Тут надо умудриться чтобы что-то «всплыло»))

рано или поздно что-то всплывает, как в Сене.

I understand that reference XD

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

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

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

Хотя я бы сиканул такое в «прод» врубать))

вот собственно на то и был посыл) у меня просто на армадилло вся математика построена, плюс OpenMP во все поля. Ссу маленько)

I understand that reference XD

:-D

hatred ★★★
()
Последнее исправление: hatred (всего исправлений: 1)
Ответ на: комментарий от PRN

Потому, что в С++ много полезных фич. К примеру:

  • пространства имён;
  • перегрузка функций;
  • шаблонные функции;
  • создание классов для структур данных, в том числе шаблонных;
  • виртуальные методы для динамической диспатчеризации;
  • конечно же исключения.

Это всё позволяет писать в стиле С, но тем не менее в отдельных местах улучшать код.

К примеру в моей программе на C сейчас есть метод myapp_usbd_descriptors_usbd_event_handler_setup_get_descriptor и такое имя не от хорошей жизни.

vbr ★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от anonymous

В С функции являются первичным строительным блоком. Дизайн программы строится исходя из функциональной декомпозиции задачи. Классы используются только там, где они действительно нужны. В С++ всё с точностью до наоборот. Дизайн программы строится исходя из ООП декомпозиции задачи. Классы натягиваются на всё, что движется, а на то, что не движется - натягиваются синглтоны.

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

Среди поклонников С++ есть мода на вычисления во время компиляции. Когда из шаблонов делается второй недоязык и программы начинают писать на этом недоязыке. На С так не делают. Если нужно сгенерировать программу программой, то пишут программу, генерирующую код программы. Но нужно это крайне редко. Единственная причина использовать шаблоны это написать класс типа ring_buffer или функцию max.

В С++ любят имитировать бурную деятельность, создавая 10 видов указателей, 5 кастов и прочую чушь. В С так не делают. Указатель это указатель. Каст это каст. Программа на С опасна, полна уязвимостей и это хорошо. Это просто принимается за реальность, исправляя по мере возможности, а не пытаются с этим бороться.

Ещё не слишком формализуемый признак, но всё же. В С каждая строчка делает очевидную вещь. Ничего неочевидного, скрытого не происходит. В C++ в одной строчке легко может скрываться что угодно. В C не используют оператор битового сдвига для ввода/вывода, к примеру. Для ввода-вывода есть функции read/write. В C++ даже запятая может быть перегружена и вызывать код произвольной сложности.

vbr ★★★★
()
Последнее исправление: vbr (всего исправлений: 5)