Страницы

Поиск по вопросам

вторник, 9 июля 2019 г.

Почему так много строк кода в исходниках библиотек?

Заглянул в класс String в Java и был поражен количеством строк в одном файле - 3169. И так во многих библиотечных классах. Более того, во многих других языках, например, в Python исходные файлы тоже огромные. В любой компьютерной литературе рекомендуется делать небольшие файлы с четким разграничением. Почему так получается, что библиотечные модули часто нарушают это правило ?


Ответ

Код, о котором в говорите, используется миллионами человек, а потому к нему применяются очень (вот прям очень-преочень) жёсткие требования по надёжности и производительности. По сути он должен быть идеальным (или очень близким к идеалу). Скорость, надёжность и компактность алгоритма встречаются вместе нечасто, и если уж чем-то здесь и жертвовать, то это размерами исходников классов. Даже если какой-то метод сам по себе короток, несколько "лишних" строк могут добавить проверки его входных аргументов и каких-либо условий с выбросом исключений, если таковые не были пройдены. К тому же, как верно заметили в комментариях, очень значительную часть файла могут занимать комментарии.
Кроме того, код подобных библиотек, как правило, очень высокого качества, в том числе и обладающий хорошей читаемостью, что существенно сглаживает проблемы с его пониманием и восприятием.
В любой компьютерной литературе рекомендуется делать небольшие файлы с четким разграничением. Почему так получается, что библиотечные модули часто нарушают это правило ?
потому что это код "не такой как все" ввиду всё тех же повышенных требований к нему. Кроме того, классы бизнес-логики "более обычного" кода выполняют куда как меньше задач, чем, скажем, класс String из Java, а потому и не нуждаются в собственном переусложнении. Для подавляющего большинства "обычного" кода эти требования (а точнее рекомендации) будут вполне справедливыми - вы сами себя возненавидите, если сначала напишете манускрипт в 10 000 строк кода, а потом, спустя полгода, будете вынуждены искать в нём затаившийся баг.

Комментариев нет:

Отправить комментарий