После года разработки опубликован релиз свободного набора компиляторов GCC 15.1, первый значительный выпуск в новой ветке GCC 15.x. В соответствии со схемой нумерации выпусков, версия 15.0 использовалась в процессе разработки, а незадолго до выхода GCC 15.1 уже ответвилась ветка GCC 16.0, на базе которой будет сформирован следующий значительный релиз GCC 16.1...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=63141
А по выходам за границы там как? Может для этого какой-то стандарт?
Конечно есть стандарт называеться .at(index) в любой std
>" А по выходам за границы там как? Может для этого какой-то стандарт? "Называется си с плюсами)))
Слушайте, а что с GNU Pascal случилось? Почему компилятор никак не развивается? Почему всякое непотребство типа Modula-2 (вообще кто-то слышал что то об этом языке?) или Objective-C поддерживаются, а Паскаль нет?
почти все одиночки сидят на freepascal + lazarus, в некоторых корпорациях еще Delphi используется, но там лицензия от 3500 $
GNU Pascal как бы не нужен никому
Delphi много где используется в бизнес сегменте (не путать с серверами и ынтерпрайзом). А вот free pascal редкостное днище, которое даже до турбопаскаля 90-х не дотягивает даже по качеству документации, впечатление что сделано тяп-ляп неорганизованной толпой людей.
Delphi — это такой же паскаль, как Visaul Basic по сравнению с изначальным бейсиком.
Не уверен, что до сих пор где-то что-то живо написанное на обычном бейсике, а вот visual basic 6 живее всех живых, в том же бизнесе или в производственной среде. По крайней мере, vb6 скорее жив, чем мёртв.
И в этом плане тоже.
Дельфи и живёт в бизнесе потому что у него есть коммерческая поддержка. В гнутом виде никому не необходим.
> Слушайте, а что с GNU Pascal случилось?Пpoтуxло, зaвoнялoсь и испортилось, как и весь Пaскaль. На нём даже в шкoлaх никто уже не пишет. Место этому языку на пoмoйкe. Даже пoкoйный Niklaus Wirth сделал ставку на Обepoн, а не на Пaскaль.
> Modula-2 (вообще кто-то слышал что то об этом языке?)Так это и есть улучшенная версия паскаля)
> Поддержка указания диапазонов целых значений в выражениях "case"Скоро так и Паскаль догонят!
Как язык паскаль возможно лучшее что создано. Но то что он ушёл в обучение сыграло злую шутку.
>Как язык паскаль возможно лучшее что создано.Отвратительный язык, заточенный под англ. Это просто убого использовать операторные скобки и некоторые операции (целочисленное деление, остаток, логические операции) в виде слов.
Он был создан для обучения. А то что он ушёл в реальную разработку — ошибка.
> Поддержка присвоения имён циклам для того, чтобы ссылаться на них в коде.зачем, если есть goto?
Только хотел написать, что они goto переизобрели.
так у них с логикой проблемы, метка то после цикла должна быть :) а то у них выход из цикла означает начать его заново.
К хорошему всегда возвращаются. Никогда не понимал отказа от goto, ведь это крайне удобная вещь, с которой можно писать очень оптимизированный код, а не раздувать его ради простой функциональности на 100500 строк.
> Никогда не понимал отказа от goto,так вам не на С надо писать, а на асм. В Си чисто по религии goto (фактически асмовский jump) быть не должно.
С jmp, jnz/jne можно очень красивый код писать. А рилигия в программировании, как и любые догмы, скорее вредны. Нужно всегда отталкиваться от целесообразности и конкретных требований\пожеланий к проекту.
> С jmp, jnz/jne можно очень красивый код писать.так С создавали, чтобы абстрагироваться от асм и код был более структурным, а не jmp акробатика вверх-вниз. Но почему-то эту акробатику в виде примитивного goto оставили.
В 8080 была такая замечательная вещь — CALL по условию/RET по условию. Количество джампов сокращало в разы.
Так это же стек затрагивало, а значит уже сильно медленнее.
j<условие> метка
ret
метка:
— 10 + 10 тактов.r<условие>
— 5/11 тактов.
Прикинь, в ARM почти любая инструкция может быть исполнена по условию.
У армов конечно, как и у ириски - очень вкусные инструкции, но лично меня всегда немного раздражало что нужно всегда отдельно грузить из памяти в регистры, перед операциями.
Понятно что иначе никак, но просто интеловский набор команд, когда можно сразу вторым операндом указать память, да еще со сдвигом, мне больше нравиться, просто лаконичнее выглядит.
> в ARM почти любая инструкция может быть исполнена по условиюНо почему тогда армы до сих пор годятся только для телефонов? Сколько там уже пророчат смерть wintel?
Помнится были даже смарты на интеле...
И всякие мини планшеты, тоже на интеле, у асуса таких было много, да и не только у них.
Вернее, не совсем планшеты, с резистивным тач экраном и выдвижной кверти клавиатурой, как прокачанные кпк.
Хороше время было!
Почему не совсем планшеты? Вполне полноценные планшеты на андроиде были, у самого парочка валяется, один до сих пор рабочий даже.
Для тебя вся техника Apple и ноуты на Snapdragon какая-то шутка?
> Для тебя вся техника Apple и ноуты на Snapdragon какая-то шутка?И не только для него. Ты ж не будешь спорить, что там телефонный процессор (SoC)?
И что в нём телефонного?
Могла быть, лет 10 назад. В ARMv8 биты предикации выкинули, а в Thumb их никогда и не было.
Ну вы мне прямо глаза открыли.
Вообще это не исключительная особенность ARM.
А вот то, что под ARM — особенно современный — писать на ассемблере может только злостный мазохист, я и так знаю.
А в данном случае речь была о том, что 8086 вроде как и преемник 8080, а вот кое-чем полезным пришлось пожертвовать (до сих пор помню впечатления при переходе с Z80 на 8086: «а что, так можно разве?! …а вот так, что ли, нельзя?»).
А надёжность?
"В своей следующей работе Дейкстра обосновал тот факт, что для кода без goto намного легче проверить формальную корректность."
> А надёжность?
> "В своей следующей работе Дейкстра обосновал тот факт, что для кода без goto намного легче проверить формальную корректность."И сел со своей войной против goto в лужу.
Более подходящего способа для управления ресурсами в Си чем goto нет.После такого его невозможно воспринимать всерьез.
1. Не очень понимаю, на что он намекает. Для кода без развилок и циклов проверить формальную корректность ещё проще. Он предлагает выкинуть развилки и циклы?
2. Там, где требуется проверять формальную корректность, goto можно не использовать.
3. Сейчас бы хвастаться отсутствием goto в языке с поддержкой исключений. goto хотя бы из функции не выходит, тогда как исключения прошивают весь стек вызовов.
конечно надо же сделать как в расте (Ё..... тут пятиэтажный мат)Named loops also have a distinct advantage of having substantial prior art across multiple other programming languages. C is not bound by any other language but to have a control feature behave in exactly the same way as precedent set by the wider Community is extremely good for readability and lowers the surprise factor. The idiom has been proven to work well in practice, and there is no good reason for C to diverge from a model the rest of the programming language meta-community seems to have found clearest.
For instance, in Rust:
fn main() {
'outer: loop {
println!("Entered the outer loop");'inner: loop {
println!("Entered the inner loop");// This would break only the inner loop
//break;// This breaks the outer loop
break 'outer;
}println!("This point will never be reached");
}println!("Exited the outer loop");
}
Выдыхай. Эту фичу тру-UNIX деды придумали для Limbo тридцоть лет назад, оттуда ее позаимствовали в Go и Rust. Одобрено ЪUNIXЪ-Омниссией с 1995, проверено временем.
for (int i = 0; i < n; ++ i) {
for (int j = 0; j < n; ++ j) {
if (something (i, j))
goto end;
}
}
end:С goto куда интуитивно, чем пихать лейбл в начало оператора for (даблфейспалм). По логике меток, вы возвращаетесь и начинаете циклы заново, а не выходите из него вовсе.
тог уж так надо было так писать, куда интуитивно чем в начале.
for () { } : for-end-identifier;
Тут много зависит от тимлида :) Если упёртый и аргументы в пользу goto не принимает, то придётся в функцию оборачивать и делать ретёрны.
из таких вложенных циклов я обычно выхожу устанавливая в максимальное значение инкрементируемую переменную.for (int i = 0; i < n; ++ i) {
for (int j = 0; j < n; ++ j) {
if (something (i, j))
i = n;
break;
}
}
Красиво, но фактически это тоже костыль, может быть даже похлеще goto, потому что всё равно оно вернётся и оценит i < 0 и только потом выйдет из цикла.
> может быть даже похлеще gotoда мне и for не нужен будет если я буду использовать goto :)
А потом узнаете про промахи кэша при таких выходах, и что вложенные циклы вообще не нужны, нисколько, никогда.
>Директива "#embed", предназначенная для встраивания в код~/.ssh/github
Вот Вы смеетесь, а эмбед это вообще чуть ли не самое крутое, что ввели в язык.
Понятно что можно всякое нехорошее с ним делать, но и крутые штуки, типа встраивания ресурсов в технодемки, делать тоже можно и нужно.
Чо не сделают, лишь бы xxd не использовать. Все бы им в комбайны превращать.
Что не сделают, лишь бы костыли не использовать.
> компилятор для языка COBOLОчень актуальное, а главное своевременно решение. П.С. А кто-то видел живьём вообще этот КОБОЛ? А то рассказывают про банки и прочий энтерпрайз, но кого не спросишь, делают выпученные глаза.
> А кто-то видел живьём вообще этот КОБОЛ?Нет
Да, видел живьём Fico Blaze Advisor в отечественном банке.
А что то от этого изменится?
Пойдите на работу в банк и прочий энтерпрайз, увидите… а, для этого кобол для начала надо изучить.
> Пойдите на работу в банк и прочий энтерпрайз, увидите…Это я удачно зашёл. Докладываю вам из глубин банков и прочих ынтерпрайзов... вижу java, кое-где c# и даже go, но не cobol. Лол.
В РФ? Тут, к счастью, такого слоя легаси не успело нарасти (за неимением самих банков).
>> Возможность объявления переменных в операторе "if", например, "if (int x = get ()) {...}".Ничего не понял это же прямо сейчас уже доступно нет??
https://godbolt.org/z/bPKqvsood в данном случае if это просто проверка либо на 0, либо можно использовать и для nulltpr.
Вы кинули код на C++, тогда как речь про Си.На Си такого синтаксиса нет.
Сейчас доступно в C++, а в статье речь о том, что это добавили в C.
Опять придется инструкции по сборке пакетов переписывать.
Как всегда в попсовых дистрах появится лет через 5?
В Дебиан 13 точно не попадет, потому что тулчейн для сборки, где GCC играет ключевую роль, заморожен от 15-го марта :)Будет в Дебиан 14, или более новая версия, если до заморозки успеет выйти 16-ая версия.
В Fedora 42 уже есть
□ Атрибут "unsequenced", сигнализирующий, что результат не зависит от порядка выполнения.
□ Атрибут "reproducible", указывающий, что функция всегда возвращает один и тот же результат при одинаковых входных данных, т.е. не зависит от иных факторов.
□ Возможность объявления переменных в операторе "if", например, "if (int x = get ()) {...}".
□ Поддержка присвоения имён циклам для того, чтобы ссылаться на них в коде.Гляжу на всё это и понимаю, что видел это в Nim. Авторы языка используют все конструкции из новых стандартов Си.
> Гляжу на всё это и понимаю, что видел это в Nim. Авторы
> языка используют все конструкции из новых стандартов Си.Только сам он - какой-то ужастик, типа помеси сишки с питоном, очень сомнительное счастье.
> Директива "#embed", предназначенная для встраивания в код бинарных ресурсов.Вот это хорошо, наконец можно будет забить на костыли и подпорки для вещей типа включения фонта в бинарь.
А гнутое расширение case 1..5 и проч они не хотят в новый стандарт взять?
import std; для с++ все ещё не завезли или я чего-то упускаю?
В общем тенденция такова: какой-нибудь С50 (вопреки всем обещаниям!) начнёт таки всё больше и больше превращаться в С++, в то время как С++50 начнёт всё больше и больше превращаться в Раст. В общем делайте выводы сами!