История изменений
Исправление vbr, (текущая версия) :
Я люблю пользоваться C, но к нему у меня накопился достаточно обширный список претензий. Я их не документирую, но вот некоторые, которые мне сразу в голову приходят:
- Нельзя объявить глобальную неинициализированную переменную.
- Нет удобного синтаксиса для доступа к битам.
- Ушибленная на голову стандартная библиотека, ещё и прибитая гвоздями к языку в некоторых, не всегда очевидных местах.
- Идиотский препроцессор, приводящий к макросам, которые порой без поллитра не разберёшь.
- Куча ненужных фич. Идиотский цикл for, ненужный цикл do-while. Цикла while хватит каждой домохозяйке, а вот break/continue на два уровня выше до сих пор не придумали. switch пофиксить надо было ещё сто лет назад. И такого много на самом деле.
- Вот в этой теме обсосали уже всё, что касается переполнения, это всё неправильно. Как надо: любое переполнение вызывает ошибку, но есть синтаксис, который игнорирует ошибку или позволяет проверить переполнение.
- Нет множественных возвращаемых значений, приходится извращаться со всякими указателями или структурами, это всё неудобно.
- Упоротые оптимизации, которые порой вызывают WTF. Такого не должно быть. Оптимизации должны помогать, а не мешать. Если я пишу пустой цикл из 1000 итераций, значит его надо компилировать, а не выпендриваться. Хочешь выпендриться - выдай warning. То же про выкидывание кода из-за UB при переполнении - такого не должно быть, я написал код, значит я его хочу, есть вопросы - выдавай warning, но компилируй как я написал.
Понятно, что почти всё из этого можно исправить всякими компиляторо-зависимыми трюками или просто жить с этим, но можно было бы лучше.
Исправление vbr, :
Я люблю пользоваться C, но к нему у меня накопился достаточно обширный список претензий. Я их не документирую, но вот некоторые, которые мне сразу в голову приходят:
- Нельзя объявить глобальную неинициализированную переменную.
- Нет удобного синтаксиса для доступа к битам.
- Ушибленная на голову стандартная библиотека, ещё и прибитая гвоздями к языку в некоторых, не всегда очевидных местах.
- Идиотский препроцессор, приводящий к макросам, которые порой без поллитра не разберёшь.
- Куча ненужных фич. Идиотский цикл for, ненужный цикл do-while. Цикла while хватит каждой домохозяйке, а вот break/continue на два уровня выше до сих пор не придумали. switch пофиксить надо было ещё сто лет назад. И такого много на самом деле.
- Вот в этой теме обсосали уже всё, что касается переполнения, это всё неправильно. Как надо: любое переполнение вызывает ошибку, но есть синтаксис, который игнорирует ошибку или позволяет проверить переполнение.
- Нет множественных возвращаемых значений, приходится извращаться со всякими указателями или структурами, это всё неудобно.
- Упоротые оптимизации, которые порой вызывают WTF. Такого не должно быть. Оптимизации должны помогать, а не мешать. Если я пишу пустой цикл из 1000 итераций, значит его надо компилировать, а не выпендриваться.
Понятно, что почти всё из этого можно исправить всякими компиляторо-зависимыми трюками или просто жить с этим, но можно было бы лучше.
Исходная версия vbr, :
Я люблю пользоваться C, но к нему у меня накопился достаточно обширный список претензий. Я их не документирую, но вот некоторые, которые мне сразу в голову приходят:
- Нельзя объявить глобальную неинициализированную переменную.
- Нет удобного синтаксиса для доступа к битам.
- Ушибленная на голову стандартная библиотека, ещё и прибитая гвоздями к языку в некоторых, не всегда очевидных местах.
- Идиотский препроцессор, приводящий к макросам, которые порой без поллитра не разберёшь.
- Куча ненужных фич. Идиотский цикл for, ненужный цикл do-while. Цикла while хватит каждой домохозяйке, а вот break/continue на два уровня выше до сих пор не придумали. switch пофиксить надо было ещё сто лет назад. И такого много на самом деле.
- Вот в этой теме обсосали уже всё, что касается переполнения, это всё неправильно. Как надо: любое переполнение вызывает ошибку, но есть синтаксис, который игнорирует ошибку или позволяет проверить переполнение.
- Нет множественных возвращаемых значений, приходится извращаться со всякими указателями или структурами, это всё неудобно.
- Упоротые оптимизации, которые порой вызывают WTF. Такого не должно быть. Оптимизации должны помогать, а не мешать. Если я пишу пустой цикл из 1000 итераций, значит его надо компилировать, а не выпендриваться.