The OpenNET Project / Index page

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



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

"Релиз набора компиляторов LLVM 22"  +/
Сообщение от opennews (??), 02-Мрт-26, 12:22 
После шести месяцев разработки представлен релиз проекта LLVM 22.1.0, развивающего инструментарий (компиляторы, оптимизаторы и генераторы кода), компилирующий программы в промежуточный биткод RISC-подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизаций). Сгенерированный псевдокод может быть преобразован в машинный код для заданной целевой платформы или использован  JIT-компилятором для формирования машинных инструкций непосредственно во время выполнения программы. На базе технологий LLVM проектом развивается компилятор Clang, поддерживающий языки программирования  C, C++ и  Objective-C. Начиная с ветки 18.x проект перешёл на новую схему формирования номеров версий, в соответствии с которой нулевой выпуск ("N.0") используется в процессе разработки, а первая стабильная версия снабжается номером "N.1"...

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

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

Оглавление

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


4. "Релиз набора компиляторов LLVM 22"  +1 +/
Сообщение от Карлос Сношайтилис (ok), 02-Мрт-26, 12:27 
> Возможности, связанные с языком С: Реализован черновик спецификации, определяющей механизм отложенного выполнения "defer"

Если вы не идёте к RAII, RAII идёт к вам

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

34. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (34), 02-Мрт-26, 14:42 
Давно пора. Только вот зачем они сделали эту фичу как control block, а не как декларацию с полноценными лямбда-функциями, мне не понятно. Так придётся колхозить замыкания, если надо захватывать значения переменных на этапе defer, что часто бывает нужно. И теперь даже если потом добавят лямбды, с текущим defer они не совместимы. В общем, подложили лишние грабли и себе, и C++.
Ответить | Правка | Наверх | Cообщить модератору

48. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Сладкая булочка (?), 02-Мрт-26, 15:36 
> Давно пора.

Давно уже есть в gcc и используется (например, в коде systemd). Надо просто стандартизовать.

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

61. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (34), 02-Мрт-26, 16:20 
Вот они и стандартизировали. Только не то.
Ответить | Правка | Наверх | Cообщить модератору

47. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Сладкая булочка (?), 02-Мрт-26, 15:35 
> Если вы не идёте к RAII, RAII идёт к вам

Только defer - это не RAII.

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

55. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (34), 02-Мрт-26, 16:05 
Сделано главным образом именно для RAII.
Ответить | Правка | Наверх | Cообщить модератору

79. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (79), 02-Мрт-26, 18:09 
Сделано чтобы нейросети писать сразу на LLVM.
Ответить | Правка | Наверх | Cообщить модератору

58. "Релиз набора компиляторов LLVM 22"  –1 +/
Сообщение от Аноним (58), 02-Мрт-26, 16:11 
> Только defer - это не RAII.

Конечно.
Только defer - это недо RAII.

Но в копролитный язык из прошлого века не могут добавить сразу нормально.
Пользователи не поймут. В прямом смысле.
У них мозг атрофировался еще во времена С89.

А тут такие изменения!
Они еще только-только пережили добавление keywordʼа bool.

А тут в С26 на горизонте маячит is_within_lifetime.
Прикинь! Лайфтаймы в СИшке!
Половина дидов просто сопьется от такого напряжения межушного ганглия.

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

64. "Релиз набора компиляторов LLVM 22"  +1 +/
Сообщение от Аноним (64), 02-Мрт-26, 16:38 
> А тут в С26 на горизонте маячит is_within_lifetime
> Прикинь! Лайфтаймы в СИшке!

Это у тебя что-то с межушным ганглием. is_within_lifetime - это про C++.

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

65. "Релиз набора компиляторов LLVM 22"  –1 +/
Сообщение от Аноним (65), 02-Мрт-26, 16:49 
> is_within_lifetime - это про C++.

Ты все испортил! (с)

Я тут СИшников пугаю, а ты всё портишь!!
defer тоже было "про С++", а тут вот как оберрнулось.
Они запросто поверят и в лайфтаймы.


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

69. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (69), 02-Мрт-26, 17:35 
>Половина дидов просто сопьется от такого напряжения межушного ганглия.

Я веьс такой красивый, молодой и модный. Пишу на Си. Дедов никогда не видел. Может они где-то есть в Интернете?

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

71. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (69), 02-Мрт-26, 17:36 
>Половина дидов просто сопьется от такого напряжения межушного ганглия.

Я весь такой красивый, молодой и модный. Пишу на Си. Дедов никогда не видел. Может они где-то есть в Интернете?

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

76. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (76), 02-Мрт-26, 18:05 
Локальный мем как и hdr.
Ответить | Правка | Наверх | Cообщить модератору

5. "Релиз набора компиляторов LLVM 22"  –7 +/
Сообщение от Аноним (5), 02-Мрт-26, 12:35 
Какой ещё ARM? Только ASML, только x64!
Ответить | Правка | Наверх | Cообщить модератору

11. "Релиз набора компиляторов LLVM 22"  +2 +/
Сообщение от Аноним (11), 02-Мрт-26, 13:15 
Чего ?
ARM это архитектура, а ASML делают литографы, которые потом покупает например TSMC и производит процессоры для Qualcomm или Apple.
p.s.:
- https://cdn.videocardz.com/1/2026/02/QUALCOMM-SNAPDRAGON-X2-...
- https://cdn.videocardz.com/1/2026/02/QUALCOMM-SNAPDRAGON-X2-...
Ответить | Правка | Наверх | Cообщить модератору

6. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (6), 02-Мрт-26, 12:46 
Как ставить-то?
Ответить | Правка | Наверх | Cообщить модератору

9. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от dannyD (?), 02-Мрт-26, 13:12 
В генту уже доступен.
Ответить | Правка | Наверх | Cообщить модератору

29. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от злой_ой (?), 02-Мрт-26, 14:22 
как всегда машина времени:

$ cat /usr/ports/devel/llvm22/Makefile | grep ^DISTVERSION
DISTVERSION=    22.1.0
$ ls -la /usr/ports/devel/llvm22/Makefile
-rw-r--r--  1 root wheel 25902 26 Feb 21:47 /usr/ports/devel/llvm22/Makefile
$ ls -la /usr/ports/devel/llvm22/distinfo
-rw-r--r--  1 root wheel 180 26 Feb 21:47 /usr/ports/devel/llvm22/distinfo

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

40. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (40), 02-Мрт-26, 15:02 
google + uuoc
Ответить | Правка | Наверх | Cообщить модератору

42. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (42), 02-Мрт-26, 15:08 
Ты портопомойку сравниваешь с main tree. Не надо так.
Ответить | Правка | К родителю #29 | Наверх | Cообщить модератору

24. "Релиз набора компиляторов LLVM 22"  –1 +/
Сообщение от Аноним (42), 02-Мрт-26, 14:08 
Не спеши, может, компиляцию хрома опять сломали. Раст, опять же, к осени ждать только.
Ответить | Правка | К родителю #6 | Наверх | Cообщить модератору

7. "Релиз набора компиляторов LLVM 22"  –3 +/
Сообщение от Аноним (7), 02-Мрт-26, 12:57 
>поддержка именованных циклов

у раста подсмотрели)
https://doc.rust-lang.org/std/keyword.break.html

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

10. "Релиз набора компиляторов LLVM 22"  +2 +/
Сообщение от Аноним (10), 02-Мрт-26, 13:13 
Технологии языков прошлого века, когда родителей раста ещё не было в планах.
Ответить | Правка | Наверх | Cообщить модератору

15. "Релиз набора компиляторов LLVM 22"  –1 +/
Сообщение от нах.. (?), 02-Мрт-26, 13:43 
Но подсмотрели то у Раста)
Ответить | Правка | Наверх | Cообщить модератору

27. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (34), 02-Мрт-26, 14:20 
На самом деле, эти идеи далеко не новы и обсуждались задолго до Раста. И у конкретно этого решения с метками есть свои минусы и противники, как и у альтернатив. Поэтому долго не стандартизировали. Видимо, просто плюнули и решили, что что-то - лучше, чем ничего.
Ответить | Правка | Наверх | Cообщить модератору

30. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от злой_ой (?), 02-Мрт-26, 14:27 
подсмотрели метки? у раста?

man perlsyn
/LABEL

уже и не вспомнить, с каких пор там оно.

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

38. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Vindex (?), 02-Мрт-26, 15:00 
Эта фишка была в D ещё задолго до появления Rust
Ответить | Правка | К родителю #15 | Наверх | Cообщить модератору

59. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Карлос Сношайтилис (ok), 02-Мрт-26, 16:16 
Так и не раст это придумал, а взял из "языков прошлого века".
А вот влили, потому что раст популИзировал
Ответить | Правка | К родителю #10 | Наверх | Cообщить модератору

73. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (73), 02-Мрт-26, 17:45 
>у раста подсмотрели)

Не знаю, по крайней мере в чистой сишке этой гадости нет. А вот компилятор Раста делается на основе LLVM. Нет LLVM - нет rustc.

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

8. "Релиз набора компиляторов LLVM 22"  +3 +/
Сообщение от Аноним (-), 02-Мрт-26, 12:58 
> Добавлена поддержка именованных циклов, позволяющих присваивать имена циклам и оператору switch, которые можно указывать в операторах break и continue для явного определения цикла, из которого производится выход.

Что только не придумают, лишь бы goto не использовать.

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

77. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от нах. (?), 02-Мрт-26, 18:07 
причем придумка - всем хуже просто использования goto. (например семантика break LABEL получается совершенно контринтуитивной и еще ищи там в дветыщипятой строке закрывающую скобочку)
покусанные дейкстрой по прежнему героически борются с устройством компьютера, пожелаем им сдохнуть в муках.
Ответить | Правка | Наверх | Cообщить модератору

12. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Сусанин (?), 02-Мрт-26, 13:28 
> Добавлена поддержка именованных циклов, позволяющих присваивать имена циклам...

Наконец-то сподобились перетащить это из Perl, в котором это уже десятки лет есть ровно с таким же синтаксисом.

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

16. "Релиз набора компиляторов LLVM 22"  –3 +/
Сообщение от windowlicker (?), 02-Мрт-26, 13:44 
Из Раста же
Ответить | Правка | Наверх | Cообщить модератору

18. "Релиз набора компиляторов LLVM 22"  +4 +/
Сообщение от Аноним (18), 02-Мрт-26, 13:59 
Из чего? Это которые в разноцветных шапочках и из ямайки? Они тут причем?
Ответить | Правка | Наверх | Cообщить модератору

22. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (22), 02-Мрт-26, 14:06 
Из Фортрана же
Ответить | Правка | К родителю #16 | Наверх | Cообщить модератору

21. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (21), 02-Мрт-26, 14:02 
GOTO ещё не перетащили?
Ответить | Правка | К родителю #12 | Наверх | Cообщить модератору

25. "Релиз набора компиляторов LLVM 22"  –1 +/
Сообщение от Аноним (-), 02-Мрт-26, 14:10 
> GOTO ещё не перетащили?

Пф. зачем перетаскивать технологию устаревщую на десятилетия?
Это же пример убогого овнокода дидов.


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

39. "Релиз набора компиляторов LLVM 22"  +2 +/
Сообщение от Аноним (34), 02-Мрт-26, 15:00 
Эта "устаревшая" технология с успехом решает все задачи на неё возложенные. И кстати, в конкретно этом случае с именованными циклами, польза последних по сравнению с имеющимся goto довольно сомнительна. Наверно, сделали для альтернативно одаренных с фобией goto.
Ответить | Правка | Наверх | Cообщить модератору

14. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (14), 02-Мрт-26, 13:40 
Заголовок "Релиз набора компиляторов LLVM 22"
Портянка "Среди улучшений в Clang 22"

Так а в LLVM что-то изменили?

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

17. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (17), 02-Мрт-26, 13:45 
Во-первых, clang - часть llvm, поэтому то что изменили в clang то изменили в llvm. Во-вторых, читай новость целиком.
Ответить | Правка | Наверх | Cообщить модератору

20. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (20), 02-Мрт-26, 14:00 
привет, goto, давно не виделись
Ответить | Правка | Наверх | Cообщить модератору

23. "Релиз набора компиляторов LLVM 22"  +1 +/
Сообщение от Аноним (64), 02-Мрт-26, 14:08 
Это ж любимая С++ная программа всех любителей раста.
Ответить | Правка | Наверх | Cообщить модератору

49. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Сладкая булочка (?), 02-Мрт-26, 15:39 
Среднестатистический пользователь раста туда вряд ли заглядывает.
Ответить | Правка | Наверх | Cообщить модератору

26. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (26), 02-Мрт-26, 14:10 
> операторы сравнения "<", ">", "<=" и ">=" синтезированы из оператора "<=>"

а это вообще что? как? куда? а главное — зачем?

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

31. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (34), 02-Мрт-26, 14:31 
Это позволяет определить, сгенерирован ли оператор компилятором на основе operator<=> (фича C++20) или определён пользователем.

https://godbolt.org/z/YcG1jTv8Y

"Зачем" - не знаю, но видимо есть какие-то случаи, когда это может пригодиться.

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

33. "Релиз набора компиляторов LLVM 22"  –2 +/
Сообщение от Аноним (33), 02-Мрт-26, 14:38 
обязательно было вот это Г делать явным?

outer:
   for (int i = 0; i < IK; ++ i) {
     for (int j = 0; j < JK; ++ j) {
        continue;       // переход к CONT1
        continue outer; // переход к CONT2
        // CONT1
     }
     // CONT2
   }

В пхп давно оно неявное, достаточно указать номер уровня вложенности continue 2;

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

35. "Релиз набора компиляторов LLVM 22"  +2 +/
Сообщение от Аноним (34), 02-Мрт-26, 14:46 
Ну да, а потом иди считай, куда твой break или continue на самом деле переходит. Заняться нечем?

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

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

41. "Релиз набора компиляторов LLVM 22"  +1 +/
Сообщение от Аноним (33), 02-Мрт-26, 15:06 
> Заняться нечем?

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

> Ну да, а потом иди считай, куда твой break или continue на самом деле переходит.

А что, ты не должен после добавления нового уровня вложенности пересмотреть все свои условия для break и continue операторов? Или навалял и забыл? И ни на что не должно влиять ваше добавление? Добавил один уровень, ну вот какое значение стоит перед твоим continue, так к нему добавь +1, в чем проблема подсчета? А лучше бы пример привел бы, когда необходим именно именованный блок при добавления нового уровня вложенности.

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

всегда за всякими

    } // тут конец цикла
  } // вот тут конец условия а
} // ставили коментари

так же и с break и continue можно, не вижу проблемы.

continue 3; // for i
continue 2; // for j
continue 1; // for k

> К тому же, метку можно назвать как угодно.

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

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

60. "Релиз набора компиляторов LLVM 22"  +2 +/
Сообщение от Аноним (34), 02-Мрт-26, 16:18 
> заняться не чем именно тем, кто мешает понятие меток с уровнем вложенности блочных операторов.

Да кому вообще он нужен, этот уровень вложенности? Важен не уровень вложенности а к какому именно циклу относится тот или иной break или continue. Я не должен считать количество вложенных циклов для этого.

> А что, ты не должен после добавления нового уровня вложенности пересмотреть все свои условия для break и continue операторов?

Чаще всего, нет, не должен. Т.к. часто внутренние циклы остаются корректными при добавлении внешних циклов. И хотелось бы, чтобы конструкции вроде "break отовсюду" оставались корректными и не требовали поддержки.

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

> так же и с break и continue можно, не вижу проблемы.
>
> continue 3; // for i
> continue 2; // for j
> continue 1; // for k

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

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

Нет, т.к. оператор цикла предоаставляет дополнительное удобство, как то счетчик/итераторы, инкремент и проверку условия выхода. Всё это по-отдельности написать можно, но это будет более многословно и менее читабельно. Вот конкретно break/continue с меткой - тут уже более спорно, т.к. goto делает ровно то же самое и не хуже.

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

67. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (33), 02-Мрт-26, 17:31 
> Да кому вообще он нужен, этот уровень вложенности?

как кому, смысл вашего break и continue изменился, теперь он не оператор выхода из блока в котором он определен, а оператор выхода из произвольного (строго направленного вверх, наружу) вложенного уровня блоков. Break и continue это не оператор goto, который безусловно переходит по указанной метке.

Нельзя написать вот так:
outer:
   for (int i = 0; i < IK; ++ i) {
inner1:
     for (int j = 0; j < JK; ++ j) {
        continue inner2; // <------ недопустимо
     } // for-inner1
inner2:
     for (int k = 0; k < JK; ++ k) {
        continue outer; // переход к CONT2
        // CONT1
     } // for-inner2
   } // for-outer

> Чаще всего, нет, не должен.

ясно, дальше смысла обсуждать - нет.

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

Рассуждение из серии - а зачем использовать большую вложенность и т.д.

> И хотелось бы, чтобы конструкции вроде "break отовсюду" оставались корректными и не требовали поддержки.

Конструкции "break отовсюду" - неопределенная конструкция для компилятора. Поэтому придумали ЯВНЫЕ "метки-циклов", где можно было сделать неявные, потому-что эти метки уровня вложенности блоков циклов, а не метки в понимании оператора goto. Неявные метки циклов также не нуждаются в поддержке если вы добавляете внешний блок по отношению к операторам break и continue. Так же если вы добавите внутренний блок, ничего не изменится,  в поддержке нет необходимости если только сама логика выхода не изменится в вашей программе.

Было:

for (int i = 0; i < IK; ++ i) {
  for (int j = 0; j < JK; ++ j) {
    continue 2; // выход из цикла i
  }
}

Стало (добавляем внешний блок):

for (int k = 0; k < IK; ++ k) {
  for (int i = 0; i < IK; ++ i) {
    for (int j = 0; j < JK; ++ j) {
      continue 2; // выход из цикла i
    }
  }
}

Что тут надо поддерживать? я опять продолжаю выходить только из for (int i = 0; i < IK; ++ i). А если в таком случае вам нужно выходить уже из for (int k = 0; k < IK; ++ k), тогда это и есть изменение условий выхода, что требует изменения оператора continue на continue 3; Ровно такое же будет происходить и в случае с явными метками циклов.

Было:

outer:
for (int i = 0; i < IK; ++ i) {
  for (int j = 0; j < JK; ++ j) {
    continue outer; // выход из цикла i, по метке outer
  }
}

Стало:

for (int k = 0; k < IK; ++ k) {
outer:
  for (int i = 0; i < IK; ++ i) {
    for (int j = 0; j < JK; ++ j) {
      continue outer; // выход из цикла i, по метке outer
    }
  }
}

И тут ничего не надо менеджить, если только логика выхода не меняется. А если измениться, вам все равно надо переписать continue outer; и указать метку того цикла из которого необходимо выйти (пропустить, неважно). Вы скажите, что достаточно метку поднять выше, вот так:

outer:
for (int k = 0; k < IK; ++ k) {
  for (int i = 0; i < IK; ++ i) {
    for (int j = 0; j < JK; ++ j) {
      continue outer; // выход из цикла i, по метке outer
    }
  }
}

Да верно, но теперь эта метка относится к другому циклу, а там ниже по коду может есть необходимость выходить по метке именно 2 второго по вложенности цикла? и тут начнется мракобесие, в любом случае необходимость в пересмотре выходов останется, и код будет выглядеть так:

outer1:
for (int k = 0; k < IK; ++ k) {
outer2:
  for (int i = 0; i < IK; ++ i) {
outer3:  
    for (int j = 0; j < JK; ++ j) {
      continue outer1; // выход из цикла i, по метке outer1
    }
    continue outer2; // выход из цикла i, по метке outer2
  }
}

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

> Комментарии не работают, т.к. быстро протухают при изменении кода. И опять же, они не освобождают тебя от подсчета уровней вложенности, что есть бесполезная тупая работа.

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

> Нет, т.к. оператор цикла предоаставляет дополнительное удобство, как то счетчик/итераторы, инкремент и проверку условия выхода.

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

> Всё это по-отдельности написать можно, но это будет более многословно и менее читабельно.

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

> Вот конкретно break/continue с меткой - тут уже более спорно, т.к. goto делает ровно то же самое и не хуже.

goto не чистит за собой.

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

82. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (34), 02-Мрт-26, 18:24 
>> Да кому вообще он нужен, этот уровень вложенности?
>
> как кому, смысл вашего break и continue изменился, теперь он не оператор выхода из блока в котором он определен, а оператор выхода из произвольного (строго направленного вверх, наружу) вложенного уровня блоков. Break и continue это не оператор goto, который безусловно переходит по указанной метке.

В том-то и дело, что break/continue с меткой должен быть "почти" goto, с тем ограничением, что они работают не как произвольный переход, а в отношении цикла. Да, это переход строго наружу, но мне плевать на сколько уровней наружу, я задаю к какому циклу он относится, и всё.

>> Чаще всего, нет, не должен.
>
> ясно, дальше смысла обсуждать - нет.

Однако же, вы упорствуете.

>> Т.к. часто внутренние циклы остаются корректными при добавлении внешних циклов.
>
> Рассуждение из серии - а зачем использовать большую вложенность и т.д.

Нет, рассуждение из опыта и здравого смысла. Большинство циклов вполне себе закончены и самостоятельны, и не требуют модификации, если их обернуть в новые циклы. За исключением, конечно, конструкций вида "break отовсюду", он же "goto finish" и т.п.

> Что тут надо поддерживать?

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

> это просто шаблонный код, который за вас генерит компилятор, не более. удобство? - как по мне - избыточность, достаточно настроить текстовый редактор и макросные шаблоны вполне удобный механизм такой рутины, ЯП - не должен выполнять функции текстовых редакторов.
>
> Читать надо естественный натуральный язык, а программный код должен быть на языке машины - оптимальным и компактным.

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

> goto не чистит за собой.

Не знаю, что тут имеется ввиду, но если что, goto разрушает объекты, если этого требует переход. И defer тоже запускает.

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

84. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (33), 02-Мрт-26, 18:39 
> Блджать, я еще раз повторяю, считать по коду сколько циклов наверх мне нужно прыгнуть - это тупая и бесполезная работа.

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

label1:
for ()
{
label2:
  for ()
  {
label3:
     for ()
     {
label4:
       for ()
       {

..... продолжаю добавлять новые уровни вложенности

labelN:
         for ()
         {
             break M; // а вот тут мне также нужно пройтись наверх и найти метку чтобы приписать к этому брейку, я же не буду запоминать все имена меток всех циклов, я в любом случае иду искать "нужную" (диктуемой изначальной логикой программы) мне метку. И вы хотите сказать, что это не равносильно подсчету уровней вложенности? Равносильность даже синтаксически доказывается, просто за место label1 достаточно написать 1, за место label2 - 2 и т.д.

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

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

72. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (33), 02-Мрт-26, 17:37 
я у же не говорю про то, что возьмет один дурак и изменит имя метки :) удачи искать что не так. А в случае с уровнем вложенности - это по факту инвариант (неизменяемое), он изменится только когда добавят новый уровень вложенности.
Ответить | Правка | К родителю #60 | Наверх | Cообщить модератору

75. Скрыто модератором  +/
Сообщение от Аноним (-), 02-Мрт-26, 18:02 
Ответить | Правка | Наверх | Cообщить модератору

83. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (34), 02-Мрт-26, 18:28 
> я у же не говорю про то, что возьмет один дурак и изменит имя метки :) удачи искать что не так.

Вообще не проблема, т.к. при первой же сборке компилятор подсветит несуществующую метку в goto.

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

36. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (36), 02-Мрт-26, 14:49 
Явное лучше неявного. Полностью одобряю подход авторов.
Ответить | Правка | К родителю #33 | Наверх | Cообщить модератору

43. "Релиз набора компиляторов LLVM 22"  –3 +/
Сообщение от Аноним (33), 02-Мрт-26, 15:10 
> Явное лучше неявного.

Согласен, а зачем тогда избыточность в виде оператора цикла, кода есть механизм меток и оператор безусловного перехода. Явное лучше, но почему-то "компилятор умнее". Умному компилятору явно указывать уровень вложенности нет необходимости. Сделали для людей это? Не смешите мои тапочки - Си сделан для людей :))))

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

50. "Релиз набора компиляторов LLVM 22"  +1 +/
Сообщение от Сладкая булочка (?), 02-Мрт-26, 15:40 
> В пхп давно оно неявное, достаточно указать номер уровня вложенности continue 2;

Сейчас бы ориентироваться на пых.

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

56. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (33), 02-Мрт-26, 16:08 
> Сейчас бы ориентироваться на пых.

Спустя 56 лет править синтаксис, конечно же, чем еще можно удивить поколение смузихлебов и шайбакодеров.

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

63. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (79), 02-Мрт-26, 16:29 
Единственно верный путь.
Ответить | Правка | К родителю #33 | Наверх | Cообщить модератору

37. "Релиз набора компиляторов LLVM 22"  –2 +/
Сообщение от Аноним (37), 02-Мрт-26, 14:58 
50+ лет фанаты сишечки рассказывать что "ненужОн ваш RAII!" и без defer обойдемся!
А тут хоба - в драфт стандарта принял))
Ответить | Правка | Наверх | Cообщить модератору

44. "Релиз набора компиляторов LLVM 22"  –1 +/
Сообщение от Аноним (42), 02-Мрт-26, 15:10 
Ну это не RAII всё же. Его запретили везде не просто так.
Ответить | Правка | Наверх | Cообщить модератору

45. "Релиз набора компиляторов LLVM 22"  +2 +/
Сообщение от 12yoexpert (ok), 02-Мрт-26, 15:22 
о, у вас уже и RAII запретили
Ответить | Правка | Наверх | Cообщить модератору

46. "Релиз набора компиляторов LLVM 22"  +1 +/
Сообщение от 12yoexpert (ok), 02-Мрт-26, 15:24 
RAII это corruption, как раст, превращает straightforward обработку ошибок в какой-то бесполезный ад из костылей
но гуманитариям после курсов или совкового универа этого не понять, их удел - макдональдс или аутсорс
Ответить | Правка | К родителю #37 | Наверх | Cообщить модератору

57. Скрыто модератором  +/
Сообщение от Аноним (33), 02-Мрт-26, 16:10 
Ответить | Правка | Наверх | Cообщить модератору

66. "Релиз набора компиляторов LLVM 22"  +1 +/
Сообщение от Аноним (66), 02-Мрт-26, 17:15 
> RAII это corruption

RAII это основа одного из самых распространенных и успешных ЯП - с++.
Оно помогает перестать ковыряться в дидовой гоутушной лапше, а нормально обрабатывать ошибки. Но я не удивлен, что ты это не осилил.

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

68. "Релиз набора компиляторов LLVM 22"  +1 +/
Сообщение от Аноним (64), 02-Мрт-26, 17:31 
перестать ковыряться в дидовой гоутушной лапше, которая хотя бы функцией ограничена и начать ковыряться в еще более адовой лапше setjmp/longjmp.
Ответить | Правка | Наверх | Cообщить модератору

70. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от ИмяХ (ok), 02-Мрт-26, 17:35 
>>поддержка именованных циклов

Зумеры заново изобрели goto

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

78. "Релиз набора компиляторов LLVM 22"  +1 +/
Сообщение от Аноним (79), 02-Мрт-26, 18:08 
А что ты спонсоры скажешь куда потратили деньги?
Ответить | Правка | Наверх | Cообщить модератору

80. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от нах. (?), 02-Мрт-26, 18:10 
не изобрели а снова победили!
Ответить | Правка | К родителю #70 | Наверх | Cообщить модератору

81. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Ананоним (?), 02-Мрт-26, 18:17 
Отец, прости их, потому что они не ведают, что творят...

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

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

85. "Релиз набора компиляторов LLVM 22"  +/
Сообщение от Аноним (69), 02-Мрт-26, 18:43 
> Вместо того чтобы создать класс с деструктором и использовать по классике, им нужны всякие деферы.

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

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

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

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




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

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