Разница между системным языком программирования и прикладным языком программирования

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

5 ответов


несколько факторов должны, по моему мнению, принять во внимание

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

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

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

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


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

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

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

предупреждение: Я иду на системное программирование с точки зрения OS developer / OS tool разработчик.

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

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


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


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

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

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


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

perl и python поставляются по умолчанию почти с каждым дистрибутивом linux...оба могут рядный С...оба могут выполнять контроль работы и другие задачи "низкого уровня"...продевать нитку etc.

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

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