Си 23
Как-то незаметно вышел Си23. В компиляторе GCC 15 даже решили использовать его по-умолчанию. К слову, у языка какая-то странная нумерация. Получается, что Си89 старше, чем 23 и 99. Вам это голову не ломает?
Посмотрел список изменений, в глаза мне бросилось следующее.
Удалили старый синтаксис функций, где можно было описывать типы аргументов после определения функций. А я про него и узнал-то только недавно — два года назад.
Атрибуты функций можно теперь писать в синтаксисе Си++, то есть в виде [[атрибут]]. Это очень хорошо. Так они лучше различимы, в отличие от спецификаторов, и имеют собственное пространство имён.
Изменили действие ключевого слова auto. В Си оно обозначало класс хранения, причём по-умолчанию он как раз auto, так что в живом сишном коде я никогда это слово не видел. Теперь оно будет означать автоматический вывод типа переменной, прямо как в Си++. Это хорошо — со временем из кода можно будет выкинуть __auto_type.
Функции с пустым списком аргументов будут обрабатываться, как функции без аргументов. Это тоже хорошо, потому что раньше было неочевидно. В своё время для меня открытием было, что функции без аргументов должны в Си задаваться через синтаксис func(void), правда я в коде так всё равно не делаю.
Прекращена поддержка триграфов. Это, конечно, хорошо, но жалко. Речь идёт об альтернативных конструкциях в языке, которые были введены когда-то для поддержки некого древнего оборудования. Например, ??/ это альтернативный синтаксис для обратного слеша. Триграфы приводили к редким багам парсинга, пугали народ, но их было весело использовать в своих проектах.
Добавили конструкцию #embed, которая позволяет включать в код бинарные данные. Тоже здорово, в игре «Морской бой», выпущенной ко Дню радио мне пришлось включать игру на Луа внутрь сишного кода внешними утилитами, а теперь можно это делать одной директивой.
Остальные изменения тоже полезны, буду знакомиться, но эмоционального отклика не вызвали.
С людьми так же и как-то работает
С людьми ещё работает, что 99 старше 89, а тут не так.
Чуть поправил.
С версиями ПО слово «старше» имеет два противоположных значения, так что 23 и 99 путаницы уже не добавляет 🤷🏼♂️
Как это? То, что 89 одновременно больше и 99, и 23, не добавляет?
Год релиза же. :)
1989, 1999, 2023
Вообще, чистый C — только для олдфагов, ну или для программирования микроконтроллеров, для которых это единственный поддерживаемый язык.
C++ всё же поприятнее во всех отношениях.
Если не умничать, а писать с использованием минимально возможного набора фич C++. (К сожалению, на C++ очень легко писать нечитаемый код, и слишком многие так и делают).
Что это год релиза я понимаю, но ему две цифры оставили и логика поехала.
Ну я на Си пишу для Флиппера Зиро и The Sensor Watch, например. Там ничего другого нет. Для Флиппера появился mJS, но в нормальное приложение программу на нём не оформишь. Там отдельная папка, даже без иконок.
Олдфагов в мире, видимо, очень много: https://habr.com/ru/companies/ssp-soft/articles/821663/
Я думаю, что бОльшая часть этого всего — всякое легаси. И микроконтроллеры :)
Помню, доводилось мне программировать на языке, разработанном одной несуществующей ныне североамериканской компанией (на «N» начинается) для собственной платформы на которой строилось много какое телеком оборудование.
Так вот.
В какой-то момент старое железо перестало справляться. И понадобилось перейти на новое. И оказалось, что дешевле (на порядки!) построить на новом железе эмулятор старой платформы и перенести туда систему, написанную на чудо-языке почти «как есть», чем переводить всё на другой язык.
Ну я даже не знаю. Линукс — это легаси?