Разница между языком системного программирования и языками прикладного программирования - PullRequest
11 голосов
/ 03 декабря 2010

Каковы различия между systems programming language и Application programming language?

Ответы [ 5 ]

16 голосов
/ 03 декабря 2010

На мой взгляд, следует учитывать несколько факторов

  1. В языке системного программирования вы должны быть в состоянии достичь низкоуровневых вещей, приближаясь к реальному аппаратному миру.Вместо этого в языке приложений есть своего рода «виртуальный мир» (который, как мы надеемся, более приятный и с ним легче взаимодействовать), который был разработан с использованием языка, и вам нужно только справиться с этим.

  2. В языке системного программирования не должно быть никаких уступок с точки зрения производительности.Нужно уметь писать код, который выжимает весь сок из аппаратного обеспечения.Это не самая большая проблема в языке прикладного программирования, где время, необходимое для фактического написания программы, играет большую роль.

  3. Из-за 2 язык системного программирования можно считать свободнымчто программист не ошибается и поэтому не будет никаких «ошибок времени выполнения».Например, индексирование массива будет означать конец света, если только оборудование не даст эти проверки бесплатно (но в этом случае вы, вероятно, могли бы выбрать менее дорогое или более быстрое оборудование вместо этого).Идея состоит в том, что если вы предполагаете, что код верен, то нет смысла платить даже небольшую цену за проверку невозможного.Кроме того, язык системного программирования не должен мешать программисту делать то, что он / она хочет делать намеренно ... предполагается, что он / она знает, что это правильно.В языке прикладного программирования вместо этого считается полезным помогать программисту проверять код, а также пытаться заставить код использовать определенные философские схемы.В языках программирования приложений такие вещи, как скорость выполнения, время набора текста и размер кода, могут быть принесены в жертву, пытаясь помочь программистам избежать стрельбы самим по себе.

  4. Из-за 3-х языков язык системного программирования будет гораздо сложнее выучитьэкспериментально.В некотором смысле они являются мощными, но опасными инструментами, которые следует тщательно продумывать для каждого утверждения, и по той же причине они являются языками, где отладка намного сложнее.В языках прикладного программирования вместо этого может быть разумным подход «попробуй и посмотри» (если абстракция виртуального мира не слишком протекает), и допуск ошибок для их последующего удаления считается приемлемым вариантом.

9 голосов
/ 03 декабря 2010

Как и во многих вещах в сфере ИТ, линия размыта. Например, C начал свою жизнь как язык системного программирования (и использовался для реализации Unix), но также использовался и для разработки приложений.

Сказав это, очевидно, что некоторые языки лучше подходят для системного программирования, чем другие (например, C / C ++ лучше подходят, чем COBOL / FORTRAN для системного программирования). Также существуют языки, которые лучше подходят для разработки приложений, а не системного программирования, например. VB.NET.

Функции языка, которые выделяются из приведенных выше примеров, являются функциями низкого уровня языков системного программирования, таких как C / C ++ (например, указатели, операторы битовых манипуляций и т. Д.). Конечно, существует старая шутка о том, что C - это язык уровня «море» (где-то между уровнем сборки и «высоким» уровнем).

Предупреждение. Я занимаюсь системным программированием с точки зрения разработчика ОС / разработчика ОС.

Я думаю, что будет справедливо сказать, что несмотря на проекты по разработке ОС с Java (хотя я считаю, что в основном это нативная компиляция, а не байт-код и JIT-кодирование / интерпретация), языки системного программирования ориентированы на нативный машинный код их целевые платформы. Таким образом, языки, которые в основном предназначены для управляемого кода / интерпретируемого кода, с меньшей вероятностью будут использоваться для системного программирования.

Во всяком случае, этого вполне достаточно, чтобы вызвать некоторые комментарии как в поддержку, так и в оппозицию :)

5 голосов
/ 03 декабря 2010

Это не точные понятия, но по сути, языки системного программирования подходят для написания операционных систем (поэтому они имеют низкоуровневые понятия, такие как указатели, интеграция с ассемблером, типы данных, соответствующие памяти и организации регистров), тогда какЯзыки прикладного программирования больше подходят для написания приложений, поэтому они обычно используют концепции более высокого уровня для представления вычислений (такие как ООП, замыкания, встроенные сложные типы данных и т. д.).

2 голосов
/ 04 декабря 2010

я не думаю, что здесь уже есть окончательный ответ.

perl и python поставляются по умолчанию почти с каждым дистрибутивом Linux ... оба могут быть встроенными в C ... оба могут выполнять управление заданиями и другие«низкоуровневые» задачи ... многопоточность и т. д.

любой язык с хорошим набором привязок системных вызовов и / или FFI должен быть настолько же системно-ориентированным, как C или C ++.

единственными языками, которые я бы исключил из-за того, что они являются системными языками, являются те, которые специально предназначены для другой платформы (jvm, clr) и активно стремятся предотвратить нативное взаимодействие

2 голосов
/ 03 декабря 2010

В общем, язык системного программирования является более низким уровнем, чем языки прикладного программирования. Тем не менее, сам язык не имеет к этому никакого отношения .. это скорее особенности реализации языка.

Например, Паскаль начал свою жизнь как язык обучения и был в значительной степени строгим приложением ... однако он превратился в системный язык и использовался для создания ранних версий MacOS и Windows.

C # не является, как правило, системным языком, поскольку он не может выполнять низкоуровневую работу, хотя даже эта линия размыта по мере появления управляемых операционных систем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...