Есть ли какие-либо языки, которые соответствуют тем же нишам как C?

Кто-либо сделал предложение или реализовал языки, помещаются в ту же (огромную) нишу как C, с намерением быть альтернативой, при поддержании всей применимости для ОС, высокой производительности, встроенных и других ролей?

17
задан PeeHaa 3 November 2013 в 17:31
поделиться

8 ответов

Уместны ли какие-либо предложенные или реализованные языки в той же (огромной) нише, что и C, с намерением быть альтернативой, сохраняя при этом всю применимость к ОС, высокую производительность, встроенные и другие роли?

ОС исторически реализовывались на ассемблере. Позже разработка перешла на C, который изначально был своего рода макроассемблером.

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

Это означает, что использование C в разработке приложений в большей степени обусловлено тем простым фактом, что если вы используете C, вы автоматически получаете доступ ко всем функциям ядра (ОС), которое также написано на C.

Единственный язык, который может как-то конкурировать с C, - это язык, основанный / совместимый с C. Единственная известная мне альтернатива - это C ++. В прежние времена были также относительно популярные переводчики, такие как p2c (Паскаль на C): программы для разработчиков на одном языке, но исходный код автоматически переводился на C для компиляции. Но переводчики были довольно глючными, и без знания C часто программы не могли быть отлажены. Так что, если вам все равно нужно немного знать C, зачем возиться с переводчиками.


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

Пока (1) C остается единственным языком для системного программирования и (2) интерфейсы ОС все еще развиваются, все несовместимые с C языки по другую сторону забора, разработку приложений, будут в еще более невыгодном положении.

P.S.На самом деле это одна из форм, которые, я надеюсь, LLVM / clang могут сломаться. clang реализован как многоразовая библиотека, теоретически позволяющая смешивать языки. Например. основной исходный файл может быть на одном языке (и анализироваться одним интерфейсом), но #include могут быть на C (и анализироваться clang).

0
ответ дан 30 November 2019 в 11:51
поделиться

Еще один интересный язык системного программирования от Google: Go

4
ответ дан 30 November 2019 в 11:51
поделиться

Очевидным является C ++.

Выполняет все, что вы описываете, но немного расширяет C другими функциями (объектно-ориентированная и т. Д.).

6
ответ дан 30 November 2019 в 11:51
поделиться

Вы можете рассмотреть D . С домашней страницы:

D - язык системного программирования. Его основное внимание уделяется объединению мощи и высокой производительности C и C ++ с производительностью программистов современных языков, таких как Ruby и Python. Особое внимание уделяется требованиям обеспечения качества, документации, управления, мобильности и надежности.

Язык D имеет статическую типизацию и компилируется непосредственно в машинный код. Это мультипарадигма, поддерживающая множество стилей программирования: императивный, объектно-ориентированный и метапрограммирование. Это член семейства синтаксиса C, и его внешний вид очень похож на C ++.

3
ответ дан 30 November 2019 в 11:51
поделиться

Ada и в большинстве случаев Objective-C.

0
ответ дан 30 November 2019 в 11:51
поделиться

Существует довольно много языков, которые были специально разработаны для соответствия всей этой нише:

  • BitC
  • Cyclone
  • Forth
  • Mesa
  • CPL
  • ] BCPL (упрощенная версия CPL, язык реализации MULTICS)
  • B (Кен Томпсонс сначала пробует язык системного программирования, в значительной степени основанный на BCPL, предшественнике C)
  • Ada
  • Go
  • D
  • C ++
  • Modula-2 (специально разработан для персонального компьютера Lilith в качестве преемника Pascal для системного программирования, также используется IBM в качестве языка реализации для оригинальной OS / 400)
  • Oberon (специально разработан как более простой преемник Modula-2)
  • Component Pascal (объектно-ориентированный преемник Oberon, несмотря на название, он не является прямым преемником Pascal)
  • Modula-3 (несмотря на то, что название не является преемником Modula-2, но независимая разработка)
  • Sing # (язык реализации операционной системы Microsoft Research Singularity Research)
  • Limbo (язык операционной системы Inferno tem (преемник Plan 9 (преемник Unix)))
  • Ooc
  • Erlang (возможно, не для операционных систем, но для встроенных систем реального времени, особенно в телекоммуникационной отрасли (телефонные коммутаторы и т. д.), также в последнее время (несколько удивительно) изобретателям Эрланга) веб-серверы, системы баз данных и т. д.)

Интересно, что есть также ряд языков, не специально предназначенных для заполнения этой ниши, но которые были очень успешно использованы в этой нише:

  • Smalltalk (несколько ОС Smalltalk, встроенные системы, микроконтроллеры, системы реального времени, наиболее известные: серия цифровых осциллографов Tektronix TDS500)
  • Лисп (несколько ОС Лисп, встроенные системы, микроконтроллеры, некоторые космические аппараты НАСА)
  • Java (несколько ОС Java (JNode, NewOS), встроенные системы, микроконтроллеры, смарт-карты)
  • C # (несколько ОС (Cosmos, SharpOS), Mono используется в высокопроизводительных вычислениях)
  • Haskell (домашняя ОС, микроядро, прошедшее проверку seL4)
  • Паскаль (MacOS)

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

  • Ruby
  • Python
  • ECMAScript (который является , который в последнее время фактически используется для написания высокопроизводительных веб-серверов)

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

На самом деле, иногда возникает ощущение, что языки, которые не специально разработанные, скажем, для программирования операционных систем, на самом деле лучше для такого рода вещей.Сравните, например, уровень инноваций, стабильность, количество дыр в безопасности, производительность в чем-то вроде ОС Smalltalk 1970-х годов и Windows или OSX 2010 года.

Лично я считаю, что это основано на некоторых глубоких данных. укоренившие мифы в сообществе системного программирования. Они считают, что системное программирование на языке, например, со строгой типизацией, безопасностью типов, безопасностью памяти, безопасностью указателей, автоматическим управлением хранилищем, невозможно и что единственный способ получить производительность или гарантии в реальном времени - отказаться от мощных средств абстракции. Однако оказывается, что когда вы пытаетесь разработать язык программирования для людей вместо машин, тогда люди могут действительно понимать программы, которые они написали, находить дыры в безопасности, исправлять ошибки, а также обнаруживать и устранять узкие места производительности намного лучше. в понимании монады в 1 строку, чем в цикле for из 100 строк.

Например, SqueakNOS, который является вариантом системы Squeak Smalltalk, работающей без ОС (другими словами: это ОС), имеет почти все функции, которые можно ожидать от современная ОС (графический пользовательский интерфейс, ...) плюс некоторые, которых у вас нет (встроенный язык сценариев, который может изменять каждую часть ОС во время выполнения), весит всего 300 тыс. SLOC и загружается менее чем за 5 секунд, в то время как, например, Windows весит 50 миллионов SLOC.

15
ответ дан 30 November 2019 в 11:51
поделиться

Ada, вероятно, является наиболее широко используемым языком в этой области, помимо C.

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

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

3
ответ дан 30 November 2019 в 11:51
поделиться

BitC - это конкретная попытка. Вот отличная статья об альтернативах C и о том, почему они потерпели неудачу.

4
ответ дан 30 November 2019 в 11:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: