Системное программирование , или системное программирование , — это деятельность по программированию [1] программного обеспечения компьютерных систем . Основная отличительная характеристика системного программирования по сравнению с прикладным программированием заключается в том, что прикладное программирование направлено на создание программного обеспечения, которое предоставляет услуги непосредственно пользователю (например, текстовый процессор ), тогда как системное программирование направлено на создание программного обеспечения и программных платформ , которые предоставляют услуги другому программному обеспечению. имеют ограничения по производительности или и то и другое (например , операционные системы , приложения для вычислительной науки , игровые движки , промышленная автоматизация и приложения «программное обеспечение как услуга »). [1]
Системное программирование требует высокой степени осведомленности об аппаратном обеспечении. Его цель — добиться эффективного использования доступных ресурсов либо потому, что само программное обеспечение критически важно для производительности, либо потому, что даже небольшие улучшения эффективности напрямую приводят к значительной экономии времени и денег.
Следующие атрибуты характеризуют системное программирование:
При системном программировании часто доступны ограниченные возможности программирования. Автоматическая сборка мусора используется нечасто, и отладка иногда затруднена. Библиотека времени выполнения , если она вообще доступна, обычно гораздо менее мощна и выполняет меньше проверок ошибок. Из-за этих ограничений часто используются мониторинг и журналирование ; операционные системы могут иметь чрезвычайно сложные подсистемы журналирования.
Реализация определенных частей в операционных системах и сетях требует системного программирования, например реализации подкачки ( виртуальной памяти ) или драйвера устройства для операционной системы.
Первоначально системные программисты всегда писали на языке ассемблера . Эксперименты с аппаратной поддержкой языков высокого уровня в конце 1960-х годов привели к появлению таких языков, как PL/S , BLISS , BCPL и расширенного ALGOL для больших систем Берроуза . Форт также имеет приложения в качестве системного языка. В 1970-х годах язык C получил широкое распространение, чему способствовал рост Unix . Совсем недавно некоторое применение получило подмножество C++ под названием Embedded C++ , например, оно используется в драйверах набора ввода-вывода macOS . [2] Инженеры, работающие в Google , создали Go в 2007 году для повышения производительности разработчиков в больших распределенных системах с ориентированными на разработчиков функциями, такими как параллелизм , сбор мусора и более быстрой компиляцией программ , чем C и C++. [3] В 2015 году вышел Rust — язык программирования общего назначения, часто используемый в системном программировании. Rust был разработан с учетом безопасности памяти и с целью обеспечения такой же производительности, как C и C++.
По историческим причинам некоторые организации используют термин «системный программист» для описания должностной функции, которую точнее было бы назвать системным администратором . Это особенно верно для организаций, в чьих компьютерных ресурсах исторически доминировали мэйнфреймы , хотя этот термин даже используется для описания рабочих функций, которые не задействуют мэйнфреймы. Такое использование возникло потому, что администрирование мэйнфреймов IBM часто включало написание специального ассемблерного кода ( базовый язык ассемблера IBM (BAL)), который интегрировался с такими операционными системами , как OS/MVS , DOS/VSE или VM/CMS . Действительно, некоторые программные продукты IBM внесли значительный вклад в код, написанный программистами клиентов. Этот тип программирования становится все менее распространенным и все чаще выполняется на C, а не на ассемблере, но термин « системный программист» по-прежнему используется как фактическое название должности для сотрудников, администрирующих мэйнфреймы IBM, даже в тех случаях, когда они не занимаются системным программированием регулярно. деятельность.