История изменений
Исправление 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 очень высока.