Почему примитивные типы C не переносимы, а весь язык?
Во время создания C считалось наиболее важным, чтобы int
использовал натуральный размер слова (или размер полуслов) целевой машины (которая в те дни могла быть 18 или 36 бит на PDP-10). !) и менее важно, чтобы число бит в int
было легко предсказуемым, не говоря уже о том же самом на всех аппаратных средствах. Эффективность имела первостепенное значение, и было особенно важно, чтобы в программе не было слишком много инструкций, чтобы она могла быть упакована в небольшие воспоминания дня. Никто не захочет, например, имитировать 32-разрядную арифметику на 16-разрядной машине - это может утроить количество инструкций, необходимых для выполнения арифметики, делая невозможным размещение более крупных программ в памяти.
Почему сложно реализовать универсальную библиотеку?
Это совсем не сложно. Проблема не в том, что нет универсальной библиотеки; проблема в том, что люди не могут договориться о том, что составляет универсальную библиотеку. (См. GTK, KDE, QT, AT & T U / WIN + AST и т. Д. И т. Д.). Но реализация хорошей библиотеки действительно трудна. Что касается того, почему это сложно: дизайн библиотеки - это просто сложная проблема, и разумные люди могут и не согласны с тем, что является хорошим дизайном. Таким образом, разрабатываются многочисленные проекты, и портативность идет за борт.
Ситуация усугубляется очень тонкой стандартной библиотекой, поставляемой с C. Но давайте не будем забывать, что библиотека была разработана в те времена, когда программисту повезло получить 64 КБ для кода и еще 64 КБ для данных. К тому времени, как появился C ++, они могли позволить себе стандартизировать огромную раздутую свинью, такую как Стандартная библиотека шаблонов. Но когда была разработана библиотека C, вещи должны были быть маленькими. Теперь, когда стандартная библиотека C не подходит для сегодняшних более амбициозных приложений, всем программистам на C слишком поздно согласиться на единый стандарт.
Ткните профессора, прочитайте лекцию ...