Вопрос такой. Заголовочные файлы в С позволяют:
1. Увидеть, какой интерфейс у библиотеки
2. Прилинковаться к ней.
В Pascal есть скомпилированный модуль. Не знаю, можно ли из него достать интерфейс (скорее нет), но можно прилинковаться. Т.е., нужен либо исходник, либо урезанный исходник, если closed source.
В Лиспе - примерно то же самое, что и в Паскале. Если повезёт, то удастся узнать сигнатуры функций.
В tcl - сплошное позднейшее связывание. Единственное, не знаю, можно ли написать в исходнике функцию из несуществующего пространства имён. А так можно писать что угодно, и, если повезёт, оно заработает. Но и мощная рефлексия, позволяющая, в принципе, восстановить полный исходник, а не то, что только сигнатуру.
А как Java, Golang и Rust с этим обходятся? Есть ли там вообще понятие «библиотека» (то, что в C есть .lib) и возможность её предоставить без предоставления исходников?
Конечно, я мог бы и сам это почитать, просто в контексте предыдущей темы это может быть и другим интересно.
А клонится тут всё к тому, что при закрытости исходников или просто при отсутствии желания их устанавливать (как это сплошь и рядом есть в Linux), самые что ни на есть «плохие» заголовочные файлы - это то, что надо. И там, где их нет, их всё равно придётся поддерживать, но это будет не истинный исходник, а лишь какой-то побочный продукт процесса сборки.
Либо формат «объектного файла» или «библиотеки» должен содержать в себе информацию из заголовочника, чтобы его можно было использовать. Но это решение имеет свои недостатки.
Ваши мнения?