The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"Релиз набора компиляторов GCC 11"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Релиз набора компиляторов GCC 11"  +/
Сообщение от opennews (ok), 28-Апр-21, 14:11 
После года разработки опубликован релиз свободного набора компиляторов GCC 11.1, первый значительный выпуск в новой ветке GCC 11.x. В соответствии с новой схемой нумерации выпусков, версия 11.0 использовалась в процессе разработки, а незадолго до выхода GCC 11.1 уже ответвилась ветка GCC 12.0, на базе которой будет сформирован следующий значительный релиз GCC 12.1...

Подробнее: https://www.opennet.ru/opennews/art.shtml?num=55035

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. Скрыто модератором  +/
Сообщение от ryoken (ok), 28-Апр-21, 14:11 
Ответить | Правка | Наверх | Cообщить модератору

2. Скрыто модератором  –1 +/
Сообщение от Корец (?), 28-Апр-21, 14:24 
Ответить | Правка | Наверх | Cообщить модератору

6. Скрыто модератором  –1 +/
Сообщение от Аноним (-), 28-Апр-21, 14:31 
Ответить | Правка | Наверх | Cообщить модератору

4. Скрыто модератором  +/
Сообщение от Mike Lee (?), 28-Апр-21, 14:26 
Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

7. Скрыто модератором  –2 +/
Сообщение от ryoken (ok), 28-Апр-21, 14:42 
Ответить | Правка | Наверх | Cообщить модератору

3. "Релиз набора компиляторов GCC 11"  –1 +/
Сообщение от Аноним (3), 28-Апр-21, 14:26 
Я так понимаю использование

>режима статического анализа "-fanalyzer"

переводит Rust в статус deprecated.

:)

Ответить | Правка | Наверх | Cообщить модератору

14. "Релиз набора компиляторов GCC 11"  –12 +/
Сообщение от Аноним (-), 28-Апр-21, 15:41 
> Я так понимаю использование
>> режима статического анализа "-fanalyzer"
> переводит Rust в статус deprecated.

Я так понимаю, очередной опеннетный комментатор с познаниями уровня "слышал звон"?
https://www.opennet.ru/opennews/art.shtml?num=53208
> Релиз статического анализатора cppcheck 2.1

https://clang-analyzer.llvm.org/
> The Clang Static Analyzer is a source code analysis tool that finds bugs in C, C++, and Objective-C programs.

https://www.frama-c.com/
https://coccinelle.gitlabpages.inria.fr/website/
...

Ответить | Правка | Наверх | Cообщить модератору

15. Скрыто модератором  +3 +/
Сообщение от Аноним (15), 28-Апр-21, 15:45 
Ответить | Правка | Наверх | Cообщить модератору

36. Скрыто модератором  +/
Сообщение от Аноним (-), 28-Апр-21, 17:42 
Ответить | Правка | Наверх | Cообщить модератору

22. "Релиз набора компиляторов GCC 11"  –6 +/
Сообщение от Аноним (3), 28-Апр-21, 16:14 
Это статические анализаторы, которые смотрят ошибки по тексту кода. А "-fanalyzer" компилирует код и по ходу выполнения смотрит ошибки, что, как я понима делает и компилятор Rust. В это смысле достугается паритет. Достугнут он лили нет - вряд ли - не берусь судить.
Ответить | Правка | К родителю #14 | Наверх | Cообщить модератору

26. "Релиз набора компиляторов GCC 11"  +5 +/
Сообщение от ranenemail (?), 28-Апр-21, 16:33 
Компилятор Rust так не делает.
Ответить | Правка | Наверх | Cообщить модератору

91. "Релиз набора компиляторов GCC 11"  +/
Сообщение от Аноним (91), 01-Май-21, 01:36 
> так не делает.

делает всё не так :)

Ответить | Правка | Наверх | Cообщить модератору

40. "Релиз набора компиляторов GCC 11"  +1 +/
Сообщение от Аноним (-), 28-Апр-21, 18:00 
> Это статические анализаторы, которые смотрят ошибки по тексту кода. А "-fanalyzer" компилирует код и по ходу выполнения смотрит ошибки, что, как я понима делает и компилятор Rust.
>> Clang Static Analyzer
>> It implements path-sensitive, inter-procedural analysis based on symbolic execution technique.

Как я и подозревал - анализ уровня "слышал звон". И даже по ссылкам не ходил.

> В это смысле достугается паритет.

Там нужно конкретно так смотреть на объем и качество анализа, иначе "ни о чем".  

Ответить | Правка | К родителю #22 | Наверх | Cообщить модератору

42. "Релиз набора компиляторов GCC 11"  +/
Сообщение от Аноним (42), 28-Апр-21, 18:40 
>> It implements path-sensitive, inter-procedural analysis based on symbolic execution technique.
>Как я и подозревал - анализ уровня "слышал звон". И даже по ссылкам не ходил.

Мда, как то эта информация прошла мимо :( Буду знать какой оказывается Clang Static Analyzer

Ответить | Правка | Наверх | Cообщить модератору

19. "Релиз набора компиляторов GCC 11"  +/
Сообщение от Аноним (19), 28-Апр-21, 15:57 
Беда в том, что рантайм проверки очень дорогие для приложения. Если придумать некий специальный рантайм для плюсов, проблемы с производительностью у него будут ровно те же, что и у раста. В целом же, раст стоит расценивать исключительно как площадку для экспериментов по улучшению плюсов, а не как замену чему бы то ни было, поэтому выкидывать в ближайшее время ничего не будут.
Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

20. "Релиз набора компиляторов GCC 11"  +/
Сообщение от Аноним (3), 28-Апр-21, 16:08 
Ну так опция -fanalyzer включается только в dev окружении и выключается в релизе.
Ответить | Правка | Наверх | Cообщить модератору

21. "Релиз набора компиляторов GCC 11"  +4 +/
Сообщение от Wladmis (ok), 28-Апр-21, 16:12 
У Rust как раз-таки большинство проверок на этапе компиляции.
Ответить | Правка | К родителю #19 | Наверх | Cообщить модератору

27. "Релиз набора компиляторов GCC 11"  +2 +/
Сообщение от Маняним (?), 28-Апр-21, 16:56 
Какие рантайм проверки? Вы хоть читайте. Это статический, компайл-тайм анализ кода на перечеслинные дефекты. Именно о чем кричат растофилы. Только для такого контроля не надо пердолиться с явным обозначением лайфтайма объектов в языке, изобретать ансейф-код для создания двух и более модифицирующих ссылок, даже в сингл-треде. Анализ кода во-время компиляции основывается на вычислениях во время компиляции и анализе путей исполнения кода. И у компилятора гораздо больше информации о путях исполнения кода чем у внешнего анализатора, которому по сути нужно проделять ту же самую работу чтобы получить её.
Ответить | Правка | К родителю #19 | Наверх | Cообщить модератору

32. "Релиз набора компиляторов GCC 11"  –6 +/
Сообщение от Аноним (19), 28-Апр-21, 17:06 
Компайл тайм раста по сути бесполезен и является сахаром ради сахара -- сегодняшние анализаторы ничем не хуже. Весь профит в рантайм проверках.
Ответить | Правка | Наверх | Cообщить модератору

37. "Релиз набора компиляторов GCC 11"  +2 +/
Сообщение от Аноним (37), 28-Апр-21, 17:46 
Компайл тайм раста, в отличие от обычных анализаторов, дает гарантии
Ответить | Правка | Наверх | Cообщить модератору

43. "Релиз набора компиляторов GCC 11"  –2 +/
Сообщение от Аноним (19), 28-Апр-21, 19:06 
> Компайл тайм раста, в отличие от обычных анализаторов, дает гарантии

Только на той неделе UB в safe исправляли -- так себе гарантии/

Ответить | Правка | Наверх | Cообщить модератору

53. "Релиз набора компиляторов GCC 11"  +1 +/
Сообщение от Аноним (53), 28-Апр-21, 21:30 
C ++ появился в 1983. И базируется он на Си, который появился вообще в 1972. Rust появился в 2010 и сейчас активно развивается. Ничего удивительного что в нем находят огрехи.
Вы лучше ответьте на вопрос, раз С++ так крут, как в нем решена проблема копирования перекрывающихся областей памяти в куче?  Я вам сразу скажу - никак. В языке вся работа с памятью на указателях, и у компилятора нет гарантий, что копируемые участки гарантированно не пересекаются. А значит он не может провести часть оптимизаций и предрасчётов во время компиляции, не может векторизовать цикл копирования, и не может распараллелить его. В Rust эта и многие дугие проблемы изначально отсутствуют.
Ответить | Правка | Наверх | Cообщить модератору

55. "Релиз набора компиляторов GCC 11"  –5 +/
Сообщение от Аноним (19), 28-Апр-21, 21:32 
Найс сравнение, ты ещё науку 5000 лет назад сравни с нынешней.
Ответить | Правка | Наверх | Cообщить модератору

71. "Релиз набора компиляторов GCC 11"  +2 +/
Сообщение от n00by (ok), 29-Апр-21, 11:00 
> Вы лучше ответьте на вопрос, раз С++ так крут, как в нем
> решена проблема копирования перекрывающихся областей памяти в куче?

Проиллюстрируйте проблему примером кода, что бы было понятно, о чём речь.

Ответить | Правка | К родителю #53 | Наверх | Cообщить модератору

75. "Релиз набора компиляторов GCC 11"  +2 +/
Сообщение от zzxc (?), 29-Апр-21, 15:57 
> как в нем решена проблема копирования перекрывающихся областей памяти в куче?

В плюсах никак, потому-что это было решено еще в C (memmove).

Ответить | Правка | К родителю #53 | Наверх | Cообщить модератору

78. "Релиз набора компиляторов GCC 11"  +2 +/
Сообщение от Cooler (??), 29-Апр-21, 20:33 
memmove и __restrict тебе помогут
Ответить | Правка | К родителю #53 | Наверх | Cообщить модератору

93. "Релиз набора компиляторов GCC 11"  +/
Сообщение от Алкоганон (?), 02-Май-21, 05:07 
> Вы лучше ответьте на вопрос, раз С++ так крут, как в нем
> решена проблема копирования перекрывающихся областей памяти в куче?  Я вам
> сразу скажу - никак. В языке вся работа с памятью на
> указателях, и у компилятора нет гарантий, что копируемые участки гарантированно не
> пересекаются. А значит он не может провести часть оптимизаций и предрасчётов
> во время компиляции, не может векторизовать цикл копирования, и не может
> распараллелить его.

:-)
memcpy гарантирует неперекрываемость... И очередное UB в случае перекрытия. В своё время любовники Flash плюгина скандалили...


Ответить | Правка | К родителю #53 | Наверх | Cообщить модератору

96. "Релиз набора компиляторов GCC 11"  +/
Сообщение от uis (ok), 02-Май-21, 11:35 
>А значит он не может провести часть оптимизаций и предрасчётов во время компиляции, не может векторизовать цикл копирования, и не может распараллелить его

restrict
RTFM

Ответить | Правка | К родителю #53 | Наверх | Cообщить модератору

109. "Релиз набора компиляторов GCC 11"  –1 +/
Сообщение от Аноним (-), 11-Май-21, 14:58 
> Вы лучше ответьте на вопрос, раз С++ так крут, как в нем
> решена проблема копирования перекрывающихся областей памяти в куче?

Не понимаю проблему. Я даже примитивный memmove() накодил под baremetal. Для растаманов это, типа, слишком сложно? И ему похрен, куча или нет. Ему дают адреса откуда, куда, и количество. Реализация обязана корректно работать с перекрывающимися адресами.

Ответить | Правка | К родителю #53 | Наверх | Cообщить модератору

111. "Релиз набора компиляторов GCC 11"  +/
Сообщение от Аноним (-), 16-Май-21, 00:07 
>> у компилятора нет гарантий, что копируемые участки гарантированно не пересекаются. А значит он не может провести часть оптимизаций и предрасчётов во время компиляции, не может векторизовать цикл копирования, и не может распараллелить его. В Rust эта и многие дугие проблемы изначально отсутствуют.
> Не понимаю проблему.
> Я даже примитивный memmove() накодил под baremetal. Для растаманов
> это, типа, слишком сложно? И ему похрен, куча или нет. Ему
> дают адреса откуда, куда, и количество. Реализация обязана корректно работать с перекрывающимися адресами.

Ничего удивительного - ты даже прочитать текст целиком не можешь, куда уж тут "проблему понимать" ...

Ответить | Правка | Наверх | Cообщить модератору

46. "Релиз набора компиляторов GCC 11"  –4 +/
Сообщение от Аноним (46), 28-Апр-21, 20:22 
Единственные гарантии которые может дать rust это боль пониже спины у анонимных экспертов
Ответить | Правка | К родителю #37 | Наверх | Cообщить модератору

33. "Релиз набора компиляторов GCC 11"  +/
Сообщение от ranenemail (?), 28-Апр-21, 17:12 
Я уверен, что ни один уважающий себя с-программист не будет использовать этот режим, иначе он испытает такое унижение, что никогда не будет больше программировать!
Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

44. "Релиз набора компиляторов GCC 11"  –3 +/
Сообщение от Noard (?), 28-Апр-21, 19:46 
Маловероятно, в этом режиме ничто сложнее студенческих поделок не скомпилируется, си-ппограммисты настолько малоквалифицированны, в настоящее время, что не понимают, что весь объем легаси - это сплошные некорректные трюки (те-же трюки с кучей), а то, что еще может пройти проверку - безбожно тормозящее... и суть появления ржавчины - избавление от трюкачеств в легаси, да, эта проверка этому поможет, но "си-кодеры" не способны осознать, что проще - воспользоваться адекватным инструментом: ржавчиной или плюсами, чем приводить допотопный код на допотопном языке для допотопных контролеров в компилируемое состояние...
Ответить | Правка | Наверх | Cообщить модератору

49. "Релиз набора компиляторов GCC 11"  +/
Сообщение от валяйте (?), 28-Апр-21, 21:00 
Есть примеры и код чтобы подтвердить или просто попердываешь?
Ответить | Правка | Наверх | Cообщить модератору

67. "Релиз набора компиляторов GCC 11"  +/
Сообщение от ixrws (??), 29-Апр-21, 09:37 
Очередной ыксперт, сколько же вас развелось то.
Никто бы не стал включать этот режим в gcc, если бы он годился только для просты семплов. Практика показывает, что если код работает корректно на хотя бы 2х различных платформах(а большинство системных С программ работает на хотя бы x86, x86_64, arm и mips), то неведомого трюкачества в коде очень мало и он вполне себе проходит статический анализ. Да, там могут быть косяки, но их крайне мало. А вы, уважаемый ыксперт, просто не знаете насколько много трюков и проблем приходится выпиливать из кода, когда он приколочен к одной ОС и к одной аппаратной платформе. Если же он не приколочен, то и трюков так сильно меньше, потому что та же арифметика указателей без понимания как она работает, хрена с два заработает без багов на разных платформах.
Ответить | Правка | К родителю #44 | Наверх | Cообщить модератору

79. "Релиз набора компиляторов GCC 11"  +/
Сообщение от iZEN (ok), 29-Апр-21, 20:36 
> воспользоваться адекватным инструментом: ржавчиной или плюсами, чем приводить допотопный код на допотопном языке для допотопных контролеров в компилируемое состояние...

Так они и ЯП Modula-3, на котором эти проблемы давно решили, не хотят знать. Куда им ржавчину вписывать?

Ответить | Правка | К родителю #44 | Наверх | Cообщить модератору

35. "Релиз набора компиляторов GCC 11"  –1 +/
Сообщение от Аноним (37), 28-Апр-21, 17:40 
Статический анализатор конечно хорошо, но у раста он ещё и с гарантиями

:)

Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

110. "Релиз набора компиляторов GCC 11"  +/
Сообщение от Аноним (110), 12-Май-21, 18:30 
Ценность Rust сильно опустит поддержка GCC опции -D_FORTIFY_SOURCE=3 пока есть только 2.
Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

5. "Релиз набора компиляторов GCC 11"  +2 +/
Сообщение от Аноним (-), 28-Апр-21, 14:30 
>улучшениями, связанными с будущим стандартом языка Си (C2x), новыми оптимизациями производительности.

Последний стандарт 18 года, полностью поддерживается? На подходе С2x

Чистый Си рулит!

Ответить | Правка | Наверх | Cообщить модератору

8. "Релиз набора компиляторов GCC 11"  –1 +/
Сообщение от Анонинemail (?), 28-Апр-21, 14:48 
Там нет особо изменений https://en.wikipedia.org/wiki/C2x
Ответить | Правка | Наверх | Cообщить модератору

28. "Релиз набора компиляторов GCC 11"  +5 +/
Сообщение от Аноним (28), 28-Апр-21, 16:57 
Сишечка настолько идеальна, что туда нечего добавить.
Ответить | Правка | Наверх | Cообщить модератору

31. "Релиз набора компиляторов GCC 11"  +2 +/
Сообщение от Анонин (?), 28-Апр-21, 17:05 
Да и убирать оттуда, тоже ничего не надо.


Ответить | Правка | Наверх | Cообщить модератору

45. "Релиз набора компиляторов GCC 11"  –4 +/
Сообщение от Аноним (45), 28-Апр-21, 20:01 
Как насчёт убрать оттуда отвратительную работу со строками из 70-х годов, из-за которых каждая программа на Си кишит дырами и багами?
Ответить | Правка | Наверх | Cообщить модератору

48. "Релиз набора компиляторов GCC 11"  –3 +/
Сообщение от Аноним (48), 28-Апр-21, 20:58 
Да и с макросами что-то делать нужно. Негоже это, когда они чем-то сторонним обрабатываюся. Надо бы, чтобы самим компилятором, чтобы получать адекватные сообщения о проблемах.
Ответить | Правка | Наверх | Cообщить модератору

57. "Релиз набора компиляторов GCC 11"  +1 +/
Сообщение от Анонин (?), 28-Апр-21, 21:51 
Легче новый язык создать.
Ответить | Правка | Наверх | Cообщить модератору

69. "Релиз набора компиляторов GCC 11"  +1 +/
Сообщение от ixrws (??), 29-Апр-21, 09:47 
Макросы это макросы, они в принципе не разрабатывались так, чтобы их нужно было анализировать. Если захочется их анализировать, то возникнет вопрос что это должны быть за макросы, какими возможностями они будут обладать и возможно тогда наворотят такие макросы, что лучше всё же жить с макросами из прошлого века.

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

Ответить | Правка | К родителю #48 | Наверх | Cообщить модератору

59. "Релиз набора компиляторов GCC 11"  +/
Сообщение от pavlinux (ok), 29-Апр-21, 01:26 
Омномномнимов послушать, там ассемблер вообще язык дыр!
Ответить | Правка | К родителю #45 | Наверх | Cообщить модератору

66. "Релиз набора компиляторов GCC 11"  –2 +/
Сообщение от Анонин (?), 29-Апр-21, 09:03 
Без разницы, нигде больше не используется.
Ответить | Правка | Наверх | Cообщить модератору

98. "Релиз набора компиляторов GCC 11"  +/
Сообщение от pavlinux (ok), 03-Май-21, 16:59 
> Без разницы, нигде больше не используется.

Только программистам не рассказывай, а то зачмырят.  

Ответить | Правка | Наверх | Cообщить модератору

68. "Релиз набора компиляторов GCC 11"  +3 +/
Сообщение от ixrws (??), 29-Апр-21, 09:44 
Зачем убирать? Что за привычка убирать что-то, из-за чего куча кода поломается. Ну давайте завтра давление в трубах поднимем до 10 атм или опустим до одной. Как там ваши смесители и бачки сливные у унитазов, будут работать? А ведь поднять до 10 и будет стабильнее водоснабжение на высоких этажах. И будете сами себе регуляторы давления ставить, чтобы смеситель не взорвало.

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

Ответить | Правка | К родителю #45 | Наверх | Cообщить модератору

74. "Релиз набора компиляторов GCC 11"  –2 +/
Сообщение от Аноним (-), 29-Апр-21, 15:57 
переписыай под новые стандарты и не ной, показывая своё рукожопство.
Ответить | Правка | Наверх | Cообщить модератору

72. "Релиз набора компиляторов GCC 11"  +2 +/
Сообщение от n00by (ok), 29-Апр-21, 11:13 
> Как насчёт убрать оттуда отвратительную работу со строками из 70-х годов, из-за
> которых каждая программа на Си кишит дырами и багами?

Расскажите в подробностях, кто и как заставляют Вас писать #include <string.h>
Подумаем, что в такой ситуации делать.

Ответить | Правка | К родителю #45 | Наверх | Cообщить модератору

77. "Релиз набора компиляторов GCC 11"  +1 +/
Сообщение от adolfus (ok), 29-Апр-21, 18:17 
strncpy
strncat
strxfrm
И что со строками не так?


Ответить | Правка | К родителю #45 | Наверх | Cообщить модератору

80. "Релиз набора компиляторов GCC 11"  –1 +/
Сообщение от С (?), 29-Апр-21, 22:25 
char abc[3]; strncpy(abc, "abc", 3); Эти функции изначально предназначались не для строк, а для "записей" (record), поэтому не просто копируют строки, но еще и добивают результат нулями до ширины поля. Или не добивают.
Ответить | Правка | Наверх | Cообщить модератору

82. "Релиз набора компиляторов GCC 11"  +/
Сообщение от n00by (ok), 30-Апр-21, 06:39 
> char abc[3]; strncpy(abc, "abc", 3); Эти функции изначально предназначались не для строк,
> а для "записей" (record), поэтому не просто копируют строки, но еще
> и добивают результат нулями до ширины поля. Или не добивают.

Что не так (если не считать отсутствия в языке "рекордов")?

Вам не нравится, что char abc[3]; strncpy(abc, "a", 3); обнулит остаток массива?

Ответить | Правка | Наверх | Cообщить модератору

84. "Релиз набора компиляторов GCC 11"  +/
Сообщение от С (?), 30-Апр-21, 09:54 
> Что не так (если не считать отсутствия в языке "рекордов")?

Записи не про язык, они больше про файлы. В сишке представляются сишными структурами. Кроме строковых функций записи еще протекли во всякие calloc и fread, именно поэтому там по два аргумента с размером. Но там это не приводит к проблемам.

Как я уже сказал, strncpy не имеет отношения к сишным строкам, поэтому не завершает буфер нулем, а именно дополняет. Если места в буфере после строки не осталось, как в примере выше, то никакого нуля в буфер не запишется. Не раз видел, что слышавшие о проблеме, но неспособные ее понять, пытаются фиксить это так: char abc[3]; strncpy(abc, "abc", sizeof(abc) - 1). Но результат не меняется. А не нравится мне, что даже люди, которые совсем не пару месяцев на си пишут, все равно изредка продолжают об это спотыкаться. К счастью, санитайзеры все это ловят. К несчастью, в релизе санитайзера нет.

Ответить | Правка | Наверх | Cообщить модератору

85. "Релиз набора компиляторов GCC 11"  +/
Сообщение от n00by (ok), 30-Апр-21, 10:57 
>> Что не так (если не считать отсутствия в языке "рекордов")?
> Записи не про язык, они больше про файлы. В сишке представляются сишными
> структурами. Кроме строковых функций записи еще протекли во всякие calloc и
> fread, именно поэтому там по два аргумента с размером. Но там
> это не приводит к проблемам.

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

> Как я уже сказал, strncpy не имеет отношения к сишным строкам, поэтому
> не завершает буфер нулем, а именно дополняет.

Вы можете говорить что угодно, но язык Си регламентирован стандартом ISO/IEC 9899, где про strncpy() сказано "присоединяет копию строки... к массиву..."

> Если места в буфере
> после строки не осталось, как в примере выше, то никакого нуля
> в буфер не запишется.

Функция ничего не знает про "буфер", а гарантирует, что в массиве будет размещено n символов.

> Не раз видел, что слышавшие о проблеме,
> но неспособные ее понять, пытаются фиксить это так: char abc[3]; strncpy(abc,
> "abc", sizeof(abc) - 1). Но результат не меняется. А не нравится
> мне, что даже люди, которые совсем не пару месяцев на си
> пишут, все равно изредка продолжают об это спотыкаться. К счастью, санитайзеры
> все это ловят. К несчастью, в релизе санитайзера нет.

Так надо понять и указать количество ненулевых символов источника + 1. Тогда добавит '\0'. Естественно, надо понимать, как это отразится на массиве-приёмнике. Ну и хорошо бы ещё понять (мне) кто и зачем таким образом инициализирует массив.

Ответить | Правка | Наверх | Cообщить модератору

87. "Релиз набора компиляторов GCC 11"  +1 +/
Сообщение от n00by (ok), 30-Апр-21, 11:58 
>> Не раз видел, что слышавшие о проблеме,
>> но неспособные ее понять, пытаются

В общем, вот это и есть проблема. Низкоквалифицированные высокомотивированные люди. Беда не в языке. Беда в людях не на своём месте. Когда вот этот разработчик операционных систем https://www.opennet.ru/~mikhailnov считает, что #define определяет переменную, а через год заявляет, что типизация в языке строгая, проблему не решить, дав обезьяне в руки новый инструмент с модной блестящей кнопкой.

Ответить | Правка | Наверх | Cообщить модератору

89. "Релиз набора компиляторов GCC 11"  +/
Сообщение от С (?), 30-Апр-21, 14:46 
> почерпнутое из безусловно полезной книжки Вирта

Не читал, осуждаю.

> где про strncpy() сказано

На заборе тоже... сказано.

> Функция ничего не знает про "буфер", а гарантирует, что в массиве будет размещено n символов.

Наконец-то! Именно об этом мы и говорим. На входе валидная строка, на выходе не строка. Тут-то мы и возвращаемся к тому, что нормальных функций работы со строками в стандартной библиотеке нет, и более-менее можно вменяемо использовать лишь snprintf и Annex K, но snprintf надо уметь готовить, а Annex K, решая одни проблемы, создает новые.

> надо понять и указать количество ненулевых символов источника + 1

Если мне заранее известна длина строки, я сделаю memcpy(). Мы говорим о случае, когда я не знаю, влезет ли строка в буфер и хочу получить две вещи: 1) обрезанную или нет, но валидную (то есть, нуль-терминированную) сишную строку в буфере; 2) информацию о том, обрезалась ли строка. Функция strncpy() не справляется ни с тем, ни с другим.

> Ну и хорошо бы ещё понять (мне) кто и зачем таким образом инициализирует массив.

Таким - говнокодеры. В любом серьезном проекте на си первым делом пишется своя, не сломанная реализация strcpy(), и всего остального семейства заодно.

Ответить | Правка | К родителю #85 | Наверх | Cообщить модератору

90. "Релиз набора компиляторов GCC 11"  +/
Сообщение от n00by (ok), 30-Апр-21, 16:52 
>> где про strncpy() сказано
> На заборе тоже... сказано.

Это стандарт, а не забор. Дальнейший твой текст читать не имеет смысла.

Ответить | Правка | Наверх | Cообщить модератору

99. "Релиз набора компиляторов GCC 11"  +/
Сообщение от pavlinux (ok), 03-Май-21, 17:16 
>>> где про strncpy() сказано
>> На заборе тоже... сказано.
> Это стандарт, а не забор. Дальнейший твой текст читать не имеет смысла.

Ви два дэбила. В С ващэ нет функций!!!  Нет ля, строк!!! ВААЩЕ, ТО ЕСТЬ САВСЕМ!!
В Ц один (три) тип(а) - целое, указатель (тоже щелое) и плавающие (два целых)  

Ваша стрнцпуй() это всего лищь: присваивание указателей count раз.
стрцпуй() тоже самое только до нуля, ноль запихнуть или проверить его наличие - это ваша задача

 
char *tmp = to;

while (count) {
    if ((*tmp = *from) != 0)
        src++;
    tmp++;
    count--;
}

Как видите, в to валяются указатели от 0 до count.  ФСЁ!!!  

Дэбилы пехапешные,... рекорды какие-то, массивы, ISO, Вирт ваще Паскаль придумал.


В Цэ (асм пропустим) вы думаете за компьютер, а не он за вас!!!  

Ответить | Правка | Наверх | Cообщить модератору

104. "Релиз набора компиляторов GCC 11"  –1 +/
Сообщение от n00by (ok), 04-Май-21, 08:32 
Иди проспись, а потом подумай над своим поведением.
Ответить | Правка | К родителю #99 | Наверх | Cообщить модератору

105. "Релиз набора компиляторов GCC 11"  +/
Сообщение от pavlinux (ok), 04-Май-21, 14:17 
> Иди проспись, а потом подумай над своим поведением.

Мнение одминчега локалхоста важно! Ти кто, пля, такой? :D

Ответить | Правка | К родителю #104 | Наверх | Cообщить модератору

106. "Релиз набора компиляторов GCC 11"  +/
Сообщение от n00by (ok), 04-Май-21, 14:42 
>> Иди проспись, а потом подумай над своим поведением.
> Мнение одминчега локалхоста важно! Ти кто, пля, такой? :D

Я здесь малость инкогнито, но кое-что обо мне не составляет труда найти (если не похмеляться с утра, конечно же).

И тут самое время выяснить, а что за гуру "в Си нет функций" загибает пальцы.

Если не ошибаюсь, Михаил Шигорин как-то писал, что нашёл здесь жемчужину в виде некоего pavlinux-а. Это правда?

Ответить | Правка | К родителю #105 | Наверх | Cообщить модератору

107. "Релиз набора компиляторов GCC 11"  +/
Сообщение от n00by (ok), 06-Май-21, 06:00 
.
Ответить | Правка | К родителю #106 | Наверх | Cообщить модератору

108. "Релиз набора компиляторов GCC 11"  –1 +/
Сообщение от n00by (ok), 06-Май-21, 06:55 
Так и не проспался? Похоже, я тебя с другим человеком перепутал, получился поклёп на Альт. Виноват.

А ты, случаем, не сынок директриссы шарлатанов из ООО "НТЦ ИТ РОСА" Васильевой? У них там #define объявляет переменную. f() в таком случае наверняка макрос.

Ответить | Правка | К родителю #105 | Наверх | Cообщить модератору

86. "Релиз набора компиляторов GCC 11"  +/
Сообщение от Аноним (-), 30-Апр-21, 11:10 
>К счастью, в релизе санитайзера нет.

Исправил.

Ответить | Правка | К родителю #84 | Наверх | Cообщить модератору

97. "Релиз набора компиляторов GCC 11"  +/
Сообщение от uis (ok), 02-Май-21, 11:39 
Там починили локализацию в многопотоке?
Ответить | Правка | К родителю #5 | Наверх | Cообщить модератору

9. "Релиз набора компиляторов GCC 11"  –4 +/
Сообщение от Аноним (19), 28-Апр-21, 14:54 
Что-то кроме ворнингов ничего полезного, разве что улучшена поддержка армов. Все прошлые обновления добавляли интересных оптимизаций или хотя бы защит.
Ответить | Правка | Наверх | Cообщить модератору

11. "Релиз набора компиляторов GCC 11"  +4 +/
Сообщение от bi brother (?), 28-Апр-21, 14:57 
ты точно прочел новость?
Ответить | Правка | Наверх | Cообщить модератору

12. "Релиз набора компиляторов GCC 11"  –2 +/
Сообщение от Аноним (19), 28-Апр-21, 14:58 
Я что-то пропустил?
Ответить | Правка | Наверх | Cообщить модератору

16. "Релиз набора компиляторов GCC 11"  +1 +/
Сообщение от Аначик (?), 28-Апр-21, 15:50 
Да.
Ответить | Правка | Наверх | Cообщить модератору

25. "Релиз набора компиляторов GCC 11"  –2 +/
Сообщение от Аноним (19), 28-Апр-21, 16:18 
> Да.

Исчерпывающий ответ и грамотная аргументированная позиция, аплодирую стоя. Я, в свою очередь, могу пояснить свою позицию: никаких видимых улучшений не добавили. У 10 были осязаемые улучшения PGO и lto (скажем, поддержка zstd), дополнительная заметная логика у ipa. В 9 добавили значительные усовершенствования для PGO и LTO (наверное, самые ощутимые за всё время gcc) В 8 добавили stack-clash-protection и cf-protection. В 7 и 6, ну, подсказки к ошибкам, например. В 5 no-semantic-interposition.

Ответить | Правка | Наверх | Cообщить модератору

29. "Релиз набора компиляторов GCC 11"  +/
Сообщение от Аноним (-), 28-Апр-21, 16:58 
Вливайся в стан разработчиков. Пора братан пора.
Ответить | Правка | Наверх | Cообщить модератору

10. "Релиз набора компиляторов GCC 11"  +/
Сообщение от Аноним (10), 28-Апр-21, 14:56 
>для для сборки GCC 11 теперь требуется как минимум GCC 4.8.

Враньё, не собирается.

Ответить | Правка | Наверх | Cообщить модератору

13. "Релиз набора компиляторов GCC 11"  –10 +/
Сообщение от Мелкостан (?), 28-Апр-21, 15:04 
минимум GCC 4.8 <- судьба жадных компании которые знали у кого была лучшая вариация
Ответить | Правка | Наверх | Cообщить модератору

17. "Релиз набора компиляторов GCC 11"  +9 +/
Сообщение от Аначик (?), 28-Апр-21, 15:51 
>судьба жадных компании которые знали у кого была лучшая вариация

Мой мозг не уловил в этом сообщении логический смысл.

Ответить | Правка | Наверх | Cообщить модератору

50. "Релиз набора компиляторов GCC 11"  –2 +/
Сообщение от валяйте (?), 28-Апр-21, 21:02 
Значит ты еще безработный
Ответить | Правка | Наверх | Cообщить модератору

51. "Релиз набора компиляторов GCC 11"  +/
Сообщение от Аноним (51), 28-Апр-21, 21:05 
ура опеннетные боты подъехали
Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

18. Скрыто модератором  –4 +/
Сообщение от Аноним (18), 28-Апр-21, 15:54 
Ответить | Правка | Наверх | Cообщить модератору

23. "Релиз набора компиляторов GCC 11"  –1 +/
Сообщение от Jh (?), 28-Апр-21, 16:14 
ебилды уже подвезли)
Ответить | Правка | Наверх | Cообщить модератору

41. "Релиз набора компиляторов GCC 11"  +/
Сообщение от Jh (?), 28-Апр-21, 18:22 
в принципе, сам себя откомпилировал.
10 версия у меня пару пакетов собрать не могла. Посмотрим что с 11
Ответить | Правка | Наверх | Cообщить модератору

47. "Релиз набора компиляторов GCC 11"  +1 +/
Сообщение от Аноним (48), 28-Апр-21, 20:54 
Какие, если не секрет, 10-я не смогла?
Ответить | Правка | Наверх | Cообщить модератору

52. "Релиз набора компиляторов GCC 11"  +/
Сообщение от Аноним (51), 28-Апр-21, 21:06 
ура пересборка мира?
Ответить | Правка | К родителю #23 | Наверх | Cообщить модератору

24. Скрыто модератором  –4 +/
Сообщение от Аноним (24), 28-Апр-21, 16:17 
Ответить | Правка | Наверх | Cообщить модератору

30. Скрыто модератором  –1 +/
Сообщение от Аноним (-), 28-Апр-21, 17:01 
Ответить | Правка | Наверх | Cообщить модератору

34. Скрыто модератором  +1 +/
Сообщение от Аноним (48), 28-Апр-21, 17:21 
Ответить | Правка | К родителю #24 | Наверх | Cообщить модератору

39. Скрыто модератором  +1 +/
Сообщение от mos87 (ok), 28-Апр-21, 17:51 
Ответить | Правка | К родителю #24 | Наверх | Cообщить модератору

58. "Релиз набора компиляторов GCC 11"  +/
Сообщение от menangenemail (?), 28-Апр-21, 23:05 
А че никто не пишет про компилирование Go через GCC?
Ответить | Правка | Наверх | Cообщить модератору

60. "Релиз набора компиляторов GCC 11"  +3 +/
Сообщение от Анонимemail (60), 29-Апр-21, 01:45 
Обожаю читать комментарии к таким новостям. Радостно, что столько профессионалов тут. Вот бы собрать всех в одной команде, это же дрим тим.
Ответить | Правка | Наверх | Cообщить модератору

61. "Релиз набора компиляторов GCC 11"  +2 +/
Сообщение от Аноним (61), 29-Апр-21, 06:49 
Модули из "стандарта" С++20 хоть куда-нибудь завезли?
Ответить | Правка | Наверх | Cообщить модератору

62. "Релиз набора компиляторов GCC 11"  +/
Сообщение от Аноним (-), 29-Апр-21, 07:17 
И ренджи тоже
Ответить | Правка | Наверх | Cообщить модератору

63. "Релиз набора компиляторов GCC 11"  +1 +/
Сообщение от fsb40000 (?), 29-Апр-21, 07:43 
Да, в gcc 11 и в Visual Studio 2019.

А clang всё шлангует...

Ответить | Правка | К родителю #61 | Наверх | Cообщить модератору

92. "Релиз набора компиляторов GCC 11"  –1 +/
Сообщение от Аноним (-), 01-Май-21, 08:49 
Про модули обычно пишет Паскальщик. Ты скрытый паскальщик?
Ответить | Правка | К родителю #61 | Наверх | Cообщить модератору

64. "Релиз набора компиляторов GCC 11"  +/
Сообщение от fsb4000 (?), 29-Апр-21, 07:45 
И ренджи тоже в Visual Studio 2019 и gcc есть.

Ответить | Правка | Наверх | Cообщить модератору

73. "Релиз набора компиляторов GCC 11"  +1 +/
Сообщение от Аноним (-), 29-Апр-21, 15:56 
>Visual Studio 2019

ничтожество зашкварилось.

Ответить | Правка | Наверх | Cообщить модератору

65. "Релиз набора компиляторов GCC 11"  +/
Сообщение от xcodeemail (?), 29-Апр-21, 08:51 
А кто нибудь в курсе, почему в gcc не реализовано расширение "свойства", которое есть в msvc и clang?
вот это?
__declspec( property( get=get_func_name, put=put_func_name ) )
штука весьма полезная и не перекрывается существующими возможностями (в частности перегрузкой операторов и т.п.)
Ответить | Правка | Наверх | Cообщить модератору

81. "Релиз набора компиляторов GCC 11"  +1 +/
Сообщение от fsb4000 (?), 30-Апр-21, 00:47 
вполне перекрывается если знать С++...
Ответить | Правка | Наверх | Cообщить модератору

102. "Релиз набора компиляторов GCC 11"  +/
Сообщение от Омномномним (?), 03-Май-21, 20:11 
Не особо понятно, зачем вообще нужны "свойства", если они тривиальные. В C# эта фигня изрядно бесила, обычные мутаторы-инспекторы из С++ очевиднее и нагляднее. Имхо, properties - бесполезный сахар.
Ответить | Правка | К родителю #65 | Наверх | Cообщить модератору

103. "Релиз набора компиляторов GCC 11"  +/
Сообщение от xcodeemail (?), 04-Май-21, 00:18 
Тривиальные и не нужны. А вот зачем нужны: есть огромный проект. Нужно его изучить. Если некоторое поле некоторой структуры/класса сделать свойством, и например в геттер и сеттер ставить точки останова, или вывод логов, то можно понять где и как это поле используется. Заодно компилятор отловит все места где есть попытки получить адрес этого поля. Т.е. помимо синтаксического сахара, еще и рефакторинг/отладка/анализ кода.
Ответить | Правка | Наверх | Cообщить модератору

70. "Релиз набора компиляторов GCC 11"  –1 +/
Сообщение от Ананоним (?), 29-Апр-21, 10:46 
Самое главное что нужно знать:
> Компилятор теперь должен поддерживать стандарт C++11 (ранее требовался C++98), т.е. если для сборки GCC 10 достаточно было наличия GCC 3.4, то для сборки GCC 11 теперь требуется как минимум GCC 4.8.

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

Ответить | Правка | Наверх | Cообщить модератору

76. "Релиз набора компиляторов GCC 11"  +1 +/
Сообщение от Аноним (76), 29-Апр-21, 17:09 
При этом браузер месячной давности уже протухает и не открывает свежайшие сайты.
Ответить | Правка | Наверх | Cообщить модератору

83. "Релиз набора компиляторов GCC 11"  +/
Сообщение от вебмакака (?), 30-Апр-21, 07:00 
Ну так браузер мы как нада пишем - не только на наираспоследних версиях компилятора, но еще и придумали отдельный нескучный язычок, который вообще каждый день новый.

Ответить | Правка | Наверх | Cообщить модератору

88. "Релиз набора компиляторов GCC 11"  +2 +/
Сообщение от anonymous (??), 30-Апр-21, 12:48 
Капец, прочитал предложение, перевернул смысл с ног на голову.
Пиши хоть на C++98, тебе как пользователю компилятора никто не запрещает. Сам компилятор теперь для своей сборки требует C++11, а не для кода, который ты быдлокодишь.
Ответить | Правка | К родителю #70 | Наверх | Cообщить модератору

94. "Релиз набора компиляторов GCC 11"  +/
Сообщение от Алкоганон (?), 02-Май-21, 05:50 
> Добавлена экспериментальная поддержка типов для параллельной обработки данных (SIMD, Data-Parallel Types).

Ну вот совершенно эталонное деръмо.
Все эти SIMD  очевино зависят от процессора, платформы и т. д. То есть фактически имеют уровень Ассемблера. Нет конечно ничего плохого в том чтобы компилятор производил оптимизацию с использованием этих инструкций (SIMD и тп) и даже очень приветствовалось бы, но вынос этого на уровень языка и соответственно забот программиста фактически вынуждает писать код уровня Ассемблера. Программиста вынуждает. Вместо компилятора. Опять же нет ничего особенно плохого в Ассемблере и его применении, но... Ассемблер и так доступен тем кому необходим. Здесь же разработчики компилятора по-видимому вынуждают программистов на C писать код фактически на Ассемблере, видимо потому что компилятор у них не способен, но этот фактически ассемблерный код ещё и предлагается оформлять не свойственным Ассемблеру образом. Очевидные проблемы скажем при переходе на другую платформу в итоге очевидно переходят в код на C (без всяких особых преимуществ взамен).

Ответить | Правка | Наверх | Cообщить модератору

95. "Релиз набора компиляторов GCC 11"  +/
Сообщение от Алкоганон (?), 02-Май-21, 06:02 
> Номера столбцов в диагностических сообщениях теперь отражают не счётчик байт от начала строки

Ещё немного деръмеца в подливку...

Ответить | Правка | Наверх | Cообщить модератору

101. "Релиз набора компиляторов GCC 11"  +/
Сообщение от Омномномним (?), 03-Май-21, 20:00 
Шо, нравится байтики считать? Ну это пока в диагностический выхлоп Юникод не попадает, в особенности UTF-8, с его кодированием переменной длины.
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру