The OpenNET Project / Index page

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



"Релиз набора компиляторов 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   +/
"Ждём ебилдов" :D.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #2, #4

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

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

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

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

:)

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #14, #19, #33, #35, #110

4. Сообщение от Mike Lee (?), 28-Апр-21, 14:26   +/
еще вчера приехали https://gitweb.gentoo.org/repo/gentoo.git/log/sys-devel/gcc/...
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #7

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #8, #97

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

7. Сообщение от ryoken (ok), 28-Апр-21, 14:42   –2 +/
> еще вчера приехали https://gitweb.gentoo.org/repo/gentoo.git/log/sys-devel/gcc/...

Пару недель не синкался, вот под праздники походу заведу апгрейд :).

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

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

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

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

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

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

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

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

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

14. Сообщение от Аноним (-), 28-Апр-21, 15:41   –12 +/
> Я так понимаю использование
>> режима статического анализа "-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ообщить модератору
Родитель: #3 Ответы: #15, #22

15. Сообщение от Аноним (15), 28-Апр-21, 15:45   +3 +/
Посмотрите, какая богатая коллекция ссылок у этого эксперта! Все срочно проходим по ним, потому что  вплоть до этого момента никто кроме этого эксперта ничего и не знал про стат. анализаторы для сишки.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #14 Ответы: #36

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #13 Ответы: #50

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

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

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

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

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

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

24. Сообщение от Аноним (24), 28-Апр-21, 16:17   –4 +/
Это последний выпуск? Потом все на LLVM переходят?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #30, #34, #39

25. Сообщение от Аноним (19), 28-Апр-21, 16:18   –2 +/
> Да.

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #16 Ответы: #29

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

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

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

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

30. Сообщение от Аноним (-), 28-Апр-21, 17:01   –1 +/
>Это последний выпуск? Потом все на LLVM переходят?

Пермиссивный LLVM пилится на деньги корпорастов. Нет! LLVM не нужен, "GNU Compiler Collection" - наше всё!

Да здравствует великий Столлман!

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

31. Сообщение от Анонин (?), 28-Апр-21, 17:05   +2 +/
Да и убирать оттуда, тоже ничего не надо.


Ответить | Правка | Наверх | Cообщить модератору
Родитель: #28 Ответы: #45

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

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

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

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

:)

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

36. Сообщение от Аноним (-), 28-Апр-21, 17:42   +/
> Посмотрите, какая богатая коллекция ссылок у этого эксперта! Все срочно проходим по ним, потому что  вплоть до этого момента никто кроме этого
> эксперта ничего и не знал про стат. анализаторы для сишки.

Посмотрите, как очередного (или того же, но "замаскированного") впопеннетного Ыксперта бобмит минусиками - но по существу ему возразить нечего.
Впрочем, он так и не понял, о чем вообще речь.
Разъясняю для Ыкспердов: cppcheck стат. анализатор для сишки 2007 года, шланг-анализаторы тоже уже не первый год. Так что с "статус deprecated" малость опоздал. Не говоря уже о том, что анализ анализу рознь.

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

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

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #22 Ответы: #42

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

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #37 Ответы: #53

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

64. Сообщение от fsb4000 (?), 29-Апр-21, 07:45   +/
И ренджи тоже в Visual Studio 2019 и gcc есть.

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

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #45 Ответы: #74

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #76, #88

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

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

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

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

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

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

73. Сообщение от Аноним (-), 29-Апр-21, 15:56   +1 +/
>Visual Studio 2019

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

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

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

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

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

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

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

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


Ответить | Правка | Наверх | Cообщить модератору
Родитель: #45 Ответы: #80

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

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

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

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

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #80 Ответы: #84

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #82 Ответы: #85, #86

85. Сообщение от 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ообщить модератору
Родитель: #84 Ответы: #87, #89

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

Исправил.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #85 Ответы: #90

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #89 Ответы: #99

91. Сообщение от Аноним (91), 01-Май-21, 01:36   +/
> так не делает.

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

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

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

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

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


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

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

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

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

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

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

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

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

restrict
RTFM

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

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

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

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

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

99. Сообщение от 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ообщить модератору
Родитель: #90 Ответы: #104

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

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #104 Ответы: #106, #108

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #105 Ответы: #107

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

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #53 Ответы: #111

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

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

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

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


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

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




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

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