Системное программирование или системное программирование - это деятельность по программированию программного обеспечения компьютерных систем. Основная отличительная черта системного программирования по сравнению с прикладным программированием состоит в том, что прикладное программирование направлено на создание программного обеспечения, которое предоставляет услуги пользователю напрямую (например, текстовый процессор ), тогда как системное программирование направлено на создание программного обеспечения и программных платформ, которые предоставляют услуги другому программному обеспечению, ограничены производительностью или и то, и другое (например, операционные системы, приложения для вычислительной науки, игровые движки, промышленная автоматизация и программное обеспечение как сервисные приложения).
Системное программирование требует большой степени осведомленности об оборудовании. Его цель - добиться эффективного использования доступных ресурсов либо потому, что само программное обеспечение критично к производительности, либо потому, что даже небольшие улучшения эффективности напрямую приводят к значительной экономии времени или денег.
Следующие атрибуты характеризуют системное программирование:
Системное программирование существенно отличается от прикладного программирования, поэтому программисты склонны специализироваться на том или ином.
В системном программировании часто доступны ограниченные возможности программирования. Использование автоматической сборки мусора не является распространенным явлением, и иногда бывает трудно выполнить отладку. Библиотека времени выполнения, если она вообще доступна, обычно гораздо менее мощная и меньше проверяет ошибки. Из-за этих ограничений часто используются мониторинг и ведение журнала ; операционные системы могут иметь чрезвычайно сложные подсистемы ведения журнала.
Реализация определенных частей в операционных системах и сетях требует системного программирования, например, реализации подкачки ( виртуальной памяти ) или драйвера устройства для операционной системы.
Первоначально системные программисты неизменно писали на ассемблере. Эксперименты с аппаратной поддержкой языков высокого уровня в конце 1960-х годов привели к появлению таких языков, как PL / S, BLISS, BCPL и расширенный ALGOL для больших систем Burroughs. Форт также имеет приложения в качестве системного языка. В 1970-х годах C стал повсеместным, чему способствовал рост Unix. Совсем недавно подмножество C ++, называемое Embedded C ++, нашло некоторое применение, например, оно используется в драйверах I / O Kit для macOS.
По историческим причинам некоторые организации используют термин « системный программист» для описания должностных функций, которые можно было бы более точно назвать системным администратором. Это особенно верно в отношении организаций, в компьютерных ресурсах которых исторически преобладали мэйнфреймы, хотя этот термин даже используется для описания рабочих функций, не связанных с мэйнфреймами. Такое использование возникло из-за того, что администрирование мэйнфреймов IBM часто связано с написанием специального кода ассемблера ( IBM's Basic Assembly Language (BAL)), который интегрирован с операционной системой, такой как OS / MVS, DOS / VSE или VM / CMS. В самом деле, некоторые программные продукты IBM внесли значительный вклад в код со стороны программистов-заказчиков. Этот тип программирования становится все менее распространенным, но термин « системный программист» по-прежнему остается фактическим названием должности для сотрудников, непосредственно управляющих мэйнфреймами IBM.