Архитекторы многих современных языков, таких как Java, Eiffel и C #, полностью согласны с вами - эти языки извлекают метаданные о модуле из реализации. Однако сама по себе концепция заголовков не исключает этого - очевидно, что для компилятора будет простой задачей извлечь файл .h
при компиляции, например, .c
, точно так же, как компиляторы для других языки делают неявно. Тот факт, что типичные современные компиляторы C не делают этого, не является проблемой проектирования языка - это проблема реализации; очевидно, что пользователи не нуждаются в такой возможности, поэтому ни один из поставщиков компиляторов не потрудится реализовать ее.
Как вариант выбора языка, наличие отдельных .h
файлов (в удобочитаемом и редактируемом текстовом формате) дает вам лучшее из обоих миров: вы можете начать отдельно компилировать клиентский код на основе реализации модуля, которая не еще существует, если хотите, записывая файл .h
от руки; или вы (предполагая абсурдом реализацию компилятора, которая его предоставляет ;-), вы можете автоматически получить файл .h
из реализации в качестве побочного эффекта его компиляции.
Если C, C ++ и &, продолжают процветать (по-видимому, они все еще в порядке сегодня ;-), и спрос, как и у вас, на то, что вы не пишете заголовки вручную, растет, в конце концов, разработчики компиляторов должны будут предоставить опцию «генерации заголовков», и «лучшее из обоих миров» не останется теоретическим! -)