Введение
Системный язык программирования — это язык программирования, используемый для системного программирования; такие языки предназначены для разработки системного программного обеспечения, которое обычно требует иных подходов к разработке, чем прикладное программное обеспечение. Эдсгер Дейкстра называл эти языки машинно-ориентированными языками высокого уровня, или МОЯВ. Языки программирования общего назначения, как правило, ориентированы на универсальные возможности, чтобы программы, написанные на этих языках, могли использовать один и тот же код на различных платформах. Примерами таких языков являются ALGOL и Pascal. Эта универсальность обычно достигается за счет отсутствия прямого доступа к внутренним механизмам машины, что часто негативно сказывается на производительности. Системные языки, напротив, разрабатываются не для обеспечения совместимости, а для достижения высокой производительности и упрощения доступа к базовому аппаратному обеспечению, при этом сохраняя концепции высокоуровневого программирования, такие как структурированное программирование. Примерами служат ESPOL и SPL, синтаксически схожие с ALGOL, но оптимизированные для соответствующих платформ. Другие языки являются кроссплатформенными, но предназначены для работы в непосредственной близости от аппаратного обеспечения, например, BLISS, JOVIAL и BCPL. Некоторые языки занимают промежуточное положение между системной и прикладной областями, объединяя возможности обоих типов. Классическим примером является C, который широко используется как для системного, так и для прикладного программирования. Некоторые современные языки также сочетают эти возможности, например, Rust и Swift.
A system programming language is a programming language used for system programming; such languages are designed for writing system software, which usually requires different development approaches when compared with application software. Edsger Dijkstra referred to these languages as machine oriented high order languages, or mohol. General purpose programming languages tend to focus on generic features to allow programs written in the language to use the same code on different platforms. Examples of such languages include ALGOL and Pascal. This generic quality typically comes at the cost of denying direct access to the machine's internal workings, and this often has negative effects on performance. System languages, in contrast, are designed not for compatibility, but for performance and ease of access to the underlying hardware while still providing high level programming concepts like structured programming. Examples include ESPOL and SPL, both of which are similar to ALGOL in syntax but tuned to their respective platforms. Others are cross platform but designed to work close to the hardware, like BLISS, JOVIAL and BCPL. Some languages straddle the system and application domains, bridging the gap between these uses. The canonical example is C, which is used widely for both system and application programming. Some modern languages also do this such as Rust and Swift.
Особенности
В отличие от прикладных языков, языки системного программирования обычно предоставляют более прямой доступ к физическому аппаратному обеспечению машины: типичным примером языка системного программирования в этом смысле был BCPL. В языках системного программирования часто отсутствуют встроенные средства ввода-вывода (I/O), поскольку проект системного программного обеспечения обычно разрабатывает собственные механизмы ввода-вывода или использует базовые средства мониторного ввода-вывода или управления экраном. Со временем различие между языками, используемыми для системного и прикладного программирования, стало менее четким с распространением PL/I, C и Pascal.
История
Самые ранние системные программы были написаны на языке ассемблера главным образом из-за отсутствия альтернативы, но также и по соображениям эффективности объектного кода, времени компиляции и удобства отладки. Для системного программирования использовались языки прикладного программирования, такие как FORTRAN, хотя зачастую все равно требовалось написание некоторых подпрограмм на языке ассемблера.
Языки среднего уровня
Языки среднего уровня "обладают большей частью синтаксиса и средств языка высокого уровня, но также предоставляют прямой доступ из языка (наряду с ассемблером) к аппаратным возможностям".