Язык системного программирования
Эта статья нуждается в дополнительных цитатах для проверки . ( апрель 2022 г. ) |
Язык системного программирования — это язык программирования, используемый для системного программирования ; такие языки предназначены для написания системного программного обеспечения , которое обычно требует иных подходов к разработке по сравнению с прикладным программным обеспечением. Эдсгер Дейкстра называл эти языки машинно-ориентированными языками высокого порядка , или мохол . [1]
Языки программирования общего назначения, как правило, фокусируются на общих функциях, позволяющих программам, написанным на этом языке, использовать один и тот же код на разных платформах. Примеры таких языков включают АЛГОЛ и Паскаль . Это общее качество обычно достигается за счет отказа в прямом доступе к внутренней работе машины, что часто отрицательно влияет на производительность.
Системные языки, напротив, разработаны не для обеспечения совместимости, а для обеспечения производительности и простоты доступа к базовому оборудованию, в то же время обеспечивая концепции программирования высокого уровня, такие как структурированное программирование . Примеры включают ESPOL и SPL , оба из которых похожи на ALGOL по синтаксису, но настроены на соответствующие платформы. Другие являются кроссплатформенными, но предназначены для работы близко к оборудованию, например BLISS , JOVIAL и BCPL .
Некоторые языки охватывают системную и прикладную области, устраняя разрыв между этими использованиями. Каноническим примером является C , который широко используется как для системного, так и для прикладного программирования. Некоторые современные языки также делают это, например Rust и Swift .
Особенности [ править ]
В отличие от языков приложений, языки системного программирования обычно предлагают более прямой доступ к физическому оборудованию машины: архетипическим языком системного программирования в этом смысле был BCPL . В языках системного программирования часто отсутствуют встроенные средства ввода-вывода (I/O), поскольку проект системного программного обеспечения обычно разрабатывает свои собственные механизмы ввода-вывода или основывается на базовых средствах ввода-вывода монитора или управления экраном. Различие между языками, используемыми для системного программирования и прикладного программирования, со временем стало размытым с широкой популярностью PL/I , C и Pascal .
История [ править ]
Самое раннее системное программное обеспечение было написано на языке ассемблера прежде всего потому, что не было альтернативы, а также по таким причинам, как эффективность объектного кода, время компиляции и простота отладки. Для системного программирования использовались прикладные языки, такие как FORTRAN , хотя обычно все же требовалось писать некоторые процедуры на языке ассемблера. [2]
Языки среднего уровня [ править ]
Языки среднего уровня «имеют большую часть синтаксиса и возможностей языка более высокого уровня, но также обеспечивают прямой доступ к языку (а также ассемблеру) к функциям машины». [2] Самым ранним из них был ESPOL на мэйнфреймах Burroughs примерно в 1960 году, за ним последовал Никлауса Вирта ( PL360 впервые написанный в системе Burroughs как кросс-компилятор ), который имел общий синтаксис ALGOL 60 , но чьи операторы напрямую манипулировали регистрами ЦП и памятью. . Другие языки этой категории включают MOL-360 и PL/S .
Например, типичный оператор PL360: R9 := R8 and R7 shll 8 or R6
, что означает, что регистры 8 и 7 должны быть соединены вместе, результат сдвинут влево на 8 бит, результат этого объединен с содержимым регистра 6, а окончательный результат помещен в регистр 9. [3]
Языки более высокого уровня [ править ]
Хотя PL360 находится на семантическом уровне языка ассемблера, другой вид языка системного программирования работает на более высоком семантическом уровне, но имеет специальные расширения, предназначенные для того, чтобы сделать язык пригодным для системного программирования. Ранним примером такого языка является LRLTRAN. [4] который расширил Фортран функциями манипулирования символами и битами, указателями и таблицами переходов с прямой адресацией.
Впоследствии были разработаны такие языки, как C, в которых комбинации функций было достаточно для написания системного программного обеспечения, а также компилятор можно было разработать , который генерировал эффективные объектные программы на скромном оборудовании. В таком языке обычно отсутствуют функции, которые не могут быть эффективно реализованы, и добавляется небольшое количество машинно-зависимых функций, необходимых для доступа к определенным аппаратным возможностям; встроенный ассемблерный код, например C asm
заявление, часто используется для этой цели. Хотя было разработано множество таких языков, [1] C и C++ выжили.
Основные языки [ править ]
Язык | Создатель | Дата рождения | Под влиянием | Используется для | |
---|---|---|---|---|---|
ВЕСЕЛЫЙ | Корпорация системного развития | 1960 | АЛГОЛ 58 | Многие системы, в основном военные | |
ЭСПОЛ | Корпорация Берроуза | 1961 | АЛГОЛ 60 | МКП | |
ПЛ/Я | IBM , ПОДЕЛИТЬСЯ | 1964 | АЛГОЛ, ФОРТРАН, добавить КОБОЛ | Мультикс | |
ПЛ/С | ИБМ | 1960-е годы | ПЛ/Я | OS/360 и его преемники | |
ПЛ360 | Никлаус Вирт | 1968 | АЛГОЛ 60 | АЛГОЛ W | |
Паскаль | Никлаус Вирт | 1970 | АЛГОЛ W | Apollo Computer Aegis, Apple MacApp , UCSD p-System | |
БЛАЖЕНСТВО | Университет Карнеги-Меллон | 1970 | АЛГОЛ-ПЛ/И [5] | ВМС (порции) | |
Язык системной разработки (LSD) | Р. Дэниел Бержерон и др. (Университет Брауна) | 1971 | ПЛ/Я | ||
С | Деннис Ричи | 1972 | БКПЛ , Б | Большинство ядер операционных систем , включая Unix-подобные системы. | |
Язык системного программирования (SPL) | Хьюлетт-Паккард | 1972 | АЛГОЛ 60 , ЭСПОЛ | Системное программное обеспечение HP 3000 , включая MPE | |
НЬЮП | Берроуз | 1970-е годы | ЭСПОЛ, АЛГОЛ | МКП | |
пл.8 | ИБМ | 1970-е годы | ПЛ/Я | разработка компилятора, AIX (только версии 1 и 2), прошивка мэйнфрейма IBM | |
ПЛ-6 | Ханивелл, Инк. | 1970-е годы | ПЛ/Я | КП-6 | |
СИМПЛ | CDC | 1970-е годы | ВЕСЕЛЫЙ | Подсистемы NOS , большинство компиляторов, редактор FSE | |
С++ | Бьерн Страуструп | 1979 | С , Симула | Приложения с графическим интерфейсом ( Qt , Windows и т. д.), игры ( Unreal Engine ) | |
S3 | ICL | 1980-е годы | АЛГОЛ 68 | ICL VME | |
Есть | Джин Ичбиа , С. Такер Тафт | 1983 | Алгол 68 , Паскаль , C++ , Эйфель | Военный, [6] аэрокосмический [7] массовый транспорт, [8] высокоинтегральные вычисления и ядра операционной системы [9] [10] [11] | |
Д | Цифровой Марс | 2001 | С++ | ||
Nim | Андреас Румпф | 2008 | Python , Ада , Лисп , Оберон , C++ , Модуль-3 , Объектный Паскаль | ||
Идти | 2009 | Оберон , К , Паскаль | Кубернетес , Докер | ||
Моджо | Модульная Инк. [12] | 2023 | C , C++ , Python , Rust , Swift , Zig | ||
Ржавчина | Исследования Мозиллы [13] | 2010 | С++ , Хаскелл , Эрланг , Руби | Сервопривод , Redox OS , ядро Linux | |
Быстрый | Apple Инк. | 2014 | C , Objective-C , D , Ржавчина | для macOS , iOS , watchOS и tvOS Разработка приложений [а] | |
Зиг | Эндрю Келли | 2016 | C , C++ , LLVM IR , Go , Rust |
См. также [ править ]
Примечания [ править ]
- ^ Swift использует автоматический подсчет ссылок.
Ссылки [ править ]
- ^ Jump up to: Перейти обратно: а б ван дер Поэль, WL; Маарссен, Лос-Анджелес, ред. (27–31 августа 1973 г.). Машинно-ориентированные языки высокого уровня . Рабочая конференция ИФИП по машинно-ориентированным языкам высокого уровня (MOHL). Тронхейм, Норвегия: Международная федерация обработки информации. Труды опубликованы в 1974 году.
- ^ Jump up to: Перейти обратно: а б Саммет, Жан (октябрь 1971 г.). «Краткий обзор языков, используемых для реализации систем» . Уведомления ACM SIGPLAN . 6 (9): 1–19. дои : 10.1145/942596.807055 .
- ^ Вирт, Никлаус (1968). «PL360, язык программирования для компьютеров 360». Журнал АКМ . 15 (1): 37–74. дои : 10.1145/321439.321442 .
- ^ Мендичино, Сэм Ф.; Хьюз, Роберт А.; Мартин, Жанна Т.; МакМахон, Фрэнк Х.; Ранеллетти, Джон Э.; Цвакенберг, Ричард Г. (1968). «Компилятор LRLTRAN». Коммуникации АКМ . 11 (11): 747–755. дои : 10.1145/364139.364154 .
- ^ Вульф, Вашингтон; Рассел, Д.Б.; Хаберман, А.Н. (декабрь 1971 г.). «БЛИСС: язык системного программирования». Коммуникации АКМ . 14 (12): 780–790. CiteSeerX 10.1.1.691.9765 . дои : 10.1145/362919.362936 .
- ^ «Пример использования BAE Systems Eurofighter Typhoon» (PDF) .
- ^ «Какие языки программирования используются для бортового оборудования самолетов?» .
- ^ «TGVweb — система сигнализации TGV» .
- ^ «Железноносец» .
- ^ «M2OS.RTOS с поддержкой простых задач для небольших микроконтроллеров» .
- ^ "Jgrivera67/HiRTOS" . Гитхаб .
- ^ «Модуляр Инк.» www.modular.com . Проверено 25 марта 2024 г.
- ^ «Исследовательские проекты Mozilla» . Архивировано из оригинала 4 января 2014 г.
Внешние ссылки [ править ]
- Корбато, Фернандо (6 мая 1969). «PL/I как инструмент системного программирования» . Дататация : 68–76. Архивировано из оригинала 21 сентября 2012 г. Проверено 23 января 2012 г.