Программирование
Лучшие исходники, которые должен увидеть каждый разработчик
Предыдущие поколения разработчиков проделали огромную работу, чтобы дать нам самые разнообразные инструменты. Как современные программисты, мы должны ценить их впечатляющий труд.
Иногда я просматриваю репозитории Github, когда у меня появляется свободное время. Кроме того, когда я начинаю использовать новое компьютерное ПО, инструменты или утилиты, мне нравится понимать, как работает конкретное программное обеспечение. В большинстве случаев я смотрю на его код, чтобы разобраться, как именно работают внутренние модули и внешние зависимости.
Несколько лет назад я проверял исходный код реализации языка Python. После этого я заметил несколько исходных файлов C и внезапно проверил реализацию коллекции компилятора GNU C. Я обнаружил, что этот современный компилятор C был написан на самом языке C. Изучение чего-либо изнутри и возвращение назад на более глубоком уровне дают нам удивительные чувства и большие знания. Предыдущие поколения разработчиков проделали огромную работу, чтобы дать нам самые разнообразные инструменты. Как современные программисты, мы должны ценить их впечатляющий труд.
Когда я просматривал репозитории на Github, я заметил следующие интересные работы, которые были проделаны разработчиками по всему миру.
Программа наведения Аполлона-11
Аполлон-11 был первой успешной миссией, отправившей людей на Луну. Управляющий компьютер Apollo (AGC), который имел всего 4 килобайта физической памяти, обеспечивал управление космическим кораблем. Программное обеспечение для AGC было написано на языке ассемблера и хранилось в специальной постоянной памяти, называемой “веревочной” памятью. Некоторое время назад в Интернет были загружены отсканированные копии исходного кода. После этого кто-то преобразовал несколько модулей в текстовые файлы и загрузил их в репозиторий Github.
Команда инженеров Apollo приложила огромные усилия, чтобы добиться такого удивительного достижения, написав множество строк кода на ассемблере. В 1960-х программировать было труднее, чем сейчас. Потому что в то время у языков программирования был меньший уровень абстракции. Кроме того, программистам приходилось писать супероптимизированный код для эффективного использования оборудования.
Quake III Arena
Quake III Arena — шутер от первого лица, разработанный id Software. Он был разработан в 90-х годах, когда индустрия 3D-игр только начинала свой путь, с использованием игрового движка id Tech 3. В то время аппаратные ресурсы были очень ограничены, в отличие от наших дней. Поэтому разработчикам игр пришлось написать тщательно оптимизированный код для рендеринга графических элементов.
Многие расчеты в программировании требуют векторной нормализации, которая вызывает необходимость вычисления обратного квадратного корня. Как уже упоминалось, разработчики должны были выбрать наиболее эффективные алгоритмы для всех работ, связанных с компьютерной графикой. Поэтому команда Quake III Arena использовала очень умный подход для быстрого вычисления обратного квадратного корня, как показано ниже, с использованием вычислений на битовом уровне.
Уровень оптимизации, использованный в этом фрагменте кода и во всем коде, написанном для создания такой красивой компьютерной игры в 90-е годы, очевидно, поражает. В настоящее время разработчики игр обычно не занимаются таким уровнем вычислений, поскольку физические функции уже реализованы игровыми движками.
Коллекция компиляторов GNU
Язык программирования C — отец современного ПО, потому что он расположен очень близко к аппаратному обеспечению, а также предлагает хороший уровень абстракции, понятный человеку. Сам компилятор GNU C написан на самом языке программирования C с использованием концепции bootstrapping-а. Я заметил самый длинный исходный файл C, который я когда-либо видел (наверное могут быть и более длинные исходные файлы C, чем этот, но это тот, который я видел) из кодовой базы GNU Compiler Collection на Github.
Chromium
Популярные веб-браузеры, такие как Google Chrome, Microsoft Edge и Opera, основаны на проекте с открытым исходным кодом Chromium, который имеет две основные зависимости: механизм рендеринга Blink, который является форком библиотеки WebCore, разработанной командой Webkit, и движок JavaScript v8, который разработан командой проекта Chromium. Несомненно, кодовая база Chromium очень велика, и в ней также есть много сторонних модулей, таких как gRPC и Skia. Однако команда Chromium отлично структурировала все компоненты. Они разумно разделили логику, связанную с пользовательским интерфейсом, и логику внутренних функций, чтобы добиться очень хороших показателей поддерживаемости на протяжении всего проекта.
Кроме того, в кодовой базе есть исходники приложений Chromium для Android и iOS. Структурирование крупномасштабного кроссплатформенного приложения может быть немного сложным. Тем не менее, Chromium имеет впечатляющее разделение кода платформы для Linux, Windows и Mac.
Gitk
В настоящее время Git помогает почти каждой команде разработчиков программного обеспечения управлять историей кода и его версиями. Первоначально Git был создан основателем ядра Linux Линусом Торвальдсом. В кодовой базе Git есть волшебный пример работы — исходный файл Gitk. Gitk — это приложение с графическим интерфейсом, которое помогает нам визуально перемещаться по коммитам. Мы можем использовать следующую команду CLI, чтобы проверить разницу между двумя коммитами.
$ git diff <commit hash> <commit hash>
Но Gitk позволяет нам так быстро видеть изменения, потому что это визуальный инструмент. Весь исходный код Gitk — это всего лишь один файл. Он написан на языке сценариев Tcl с использованием Tk UI, который является расширением Tcl. Проделана огромная работа в реализации приложения с графическим интерфейсом пользователя всего в одном исходном файле, а также в выборе языка динамического программирования для более быстрой разработки приложений с графическим интерфейсом.