Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

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


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

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

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

Ответ 2

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

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

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

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

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

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

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

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

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

Вы можете рассмотреть D. На главной странице:

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

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

Ответ 7

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

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

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

Ответ 8

FreePascal. pascal был создан еще до C, когда для виртуальных машин не было достаточного количества ОЗУ и ЦП и до сих пор используется точно для тех же самых пор, кроме C. современные инкарнации паскаля, а именно Delphi и freepascal, добавили OO и дженерики, следуя эволюции С++. они имеют много концепций и дизайна, таких как указатели, прямое выделение памяти, прямой вызов ASM внутри программ, они настолько похожи, что не редкость загружать dll или код c/С++ в программы pascal и наоборот. вероятно, глядя на древние языки, такие как Basic, можно найти реализации, которые соответствуют той же нише c. языки следуют платформам...

Ответ 9

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