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

В чем разница между systems programming language и Application programming language?

Ответ 1

В моем понимании следует учитывать несколько факторов.

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

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

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

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

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

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