LINUX.ORG.RU

История изменений

Исправление byko3y, (текущая версия) :

Что нужно добавить в новый стандарт языка Си

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

И почему язык Си по сути не развивается?

Потому что это язык, который был создан на коленке, без архитектуры, прототипирования, и даже без банального понимания создателями принципов построения ЯП и компиляторов. Причем, тяжкий груз наследия он получил с самого начала. пройдя цепочку BCPL->B->C, и должен был бы отправиться на помойку уже в момент своего выпуска. Но в то время программирование было некоммерческой и малоконкурентной средой, доминируемой государством, по этой причине выбор языка Си был сделан по соображениям «остальное ещё хуже».

Все эти C17 ничего толкового не привнесли, никакой тебе нормальной и удобной многопоточности, ни удобных новых структур данных, во многом Си остался в 98 и ничего не поменялось в лучшую сторону

Работает принцип «мы не можем признать ошибки предыдущих комитетов, потому что тогда и наша работа встанет под сомнение». Чтобы стать удобным языком, Си нужно:
- автоматический контроль времени жизни объектов;
- удобная обработка ошибок (без goto и сложных аргументов-ссылок);
- удобные средства работы с локальными данными. Лямбды просятся очевидным вариантом, но они сами вносят свои проблемы в виде неясности областей видимости захваченных переменных и высвобождения захваченных объектов;
- быстрые и безопасные строки.

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

Придумай, как выполнить эти условия, плюс выкинь из языка мусор веков - вуаля, ты получил конкурент Go и C++. Да-да, такой язык сделает ненужным в том числе кресты.

в большинстве дистрибутивов пихают старушку Glibc от GNU, не пора бы её “переписать” заменой, выкинув или оптимизировав лишнее с оглядкой на musl и всякие dietc

Львиная доля стандартной либы опирается на нуль-терминированные строки, потому подлежит искоренению. К сожалению, в рамках стандартного Си не смогли придумать ничего лучше, чем strcat_s, strcpy_s, strncpy_s - слишком уж сильно язык держится за своё прошлое.

не пора бы её “переписать” заменой

Переписать - можно. Заставить индустрию хотя бы попытаться посмотреть на эту технологию/решение менее чем через 10 лет - практически нереально, инертность коммерческого IT очень высока.

Исходная версия byko3y, :

Что нужно добавить в новый стандарт языка Си

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

И почему язык Си по сути не развивается?

Потому что это язык, который был создан на коленке, без архитектуры, прототипирования, и даже без банального понимания создателями принципов построения ЯП и компиляторов. Причем, тяжкий груз наследия он получил с самого начала. пройдя цепочку BCPL->B->C, и должен был бы отправиться на помойку уже в момент своего выпуска. Но в то время программирование было некоммерческой и малоконкурентной средой, доминируемой государством, по этой причине выбор языка Си был сделан по соображениям «остальное ещё хуже».

Все эти C17 ничего толкового не привнесли, никакой тебе нормальной и удобной многопоточности, ни удобных новых структур данных, во многом Си остался в 98 и ничего не поменялось в лучшую сторону

Работает принцип «мы не можем признать ошибки предыдущих комитетов, потому что тогда и наша работа встанет под сомнение». Чтобы стать удобным языком, Си нужно:
- автоматический контроль времени жизни объектов;
- удобная обработка ошибок (без goto и сложных аргументов-ссылок);
- удобные средства работы с локальными данными. Лямбды просятся очевидным вариантом, но они сами вносят свои проблемы в виде неясности областей видимости захваченных переменных и высвобождения захваченных объектов; - быстрые и безопасные строки.

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

Придумай, как выполнить эти условия, плюс выкинь из языка мусор веков - вуаля, ты получил конкурент Go и C++. Да-да, такой язык сделает ненужным в том числе кресты.

в большинстве дистрибутивов пихают старушку Glibc от GNU, не пора бы её “переписать” заменой, выкинув или оптимизировав лишнее с оглядкой на musl и всякие dietc

Львиная доля стандартной либы опирается на нуль-терминированные строки, потому подлежит искоренению. К сожалению, в рамках стандартного Си не смогли придумать ничего лучше, чем strcat_s, strcpy_s, strncpy_s - слишком уж сильно язык держится за своё прошлое.

не пора бы её “переписать” заменой

Переписать - можно. Заставить индустрию хотя бы попытаться посмотреть на эту технологию/решение менее чем через 10 лет - практически нереально, инертность коммерческого IT очень высока.