Честно, меня не беспокоит отсутствие вменяемых инструментов работы с юникодом. Меня в C и C++ отталкивают две вещи.
Первая - прототипы функций. Если написать вызываемую функцию ниже её вызывающей - компилятор ругнётся, что функцию не видно. Когда-то, насколько я помню, такой код вообще не компилировался. Решается добавлением прототипа функции где-то в начале файла.
Вторая - заголовочные файлы. Как-то раз, давно, я писал простенькое приложение. Я создал заголовочный файл, в котором хранились глобальные (для всего приложения) значения. Подключаю его в нескольких .cpp файлах - линкер ругается, не может он что-то там слинковать. Добавляю в заголовочник #pragma once
- компилятор ругается, что у многих .cpp нет к нему доступа. Бомбанул, перестал писать. Конечно, жопы прожжёных сишников и крестовиков и не такое видали, но я не выдержал.
При чём тут новомодные недоязычки? В них такого нет. Их компиляторы умеют разруливать такие вещи. Понятно, что C создавался ещё тогда, когда компьютеры могли только по одному файлу построчно читать код, и все эти видимости функций были оправданы. Но уже в конце 90х и начале 00х были огромные проекты. Операционные системы, браузеры, игры. Памяти в компьютерах уже должно было хватить на то, чтобы обрабатывать огромные объёмы информации. Да даже сейчас есть огромные жирные проекты (привет, Chrome), которые написаны на C++ и требуют по 16 гигов оперативки для сборки. Неужели наличие таких «особенностей» - преимущество перед другими языками?
Проблема с заголовочными файлами вроде как решается модулями в C++, но их добавили только вот недавно (или ещё нет, я так и не понял), спустя более трёх десятков лет.
Как перейти с новомодных языков на C/C++ и перестать бомбить с описанных в посте проблем?
Да, я знаю, что C и C++ - очень разные языки. Но всё же это некая основа программирования во всём мире, поэтому я упомянул их вместе.