Кто-либо сделал предложение или реализовал языки, помещаются в ту же (огромную) нишу как C, с намерением быть альтернативой, при поддержании всей применимости для ОС, высокой производительности, встроенных и других ролей?
Уместны ли какие-либо предложенные или реализованные языки в той же (огромной) нише, что и 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).
Еще один интересный язык системного программирования от Google: Go
Очевидным является C ++.
Выполняет все, что вы описываете, но немного расширяет C другими функциями (объектно-ориентированная и т. Д.).
Вы можете рассмотреть D . С домашней страницы:
D - язык системного программирования. Его основное внимание уделяется объединению мощи и высокой производительности C и C ++ с производительностью программистов современных языков, таких как Ruby и Python. Особое внимание уделяется требованиям обеспечения качества, документации, управления, мобильности и надежности.
Язык D имеет статическую типизацию и компилируется непосредственно в машинный код. Это мультипарадигма, поддерживающая множество стилей программирования: императивный, объектно-ориентированный и метапрограммирование. Это член семейства синтаксиса C, и его внешний вид очень похож на C ++.
Существует довольно много языков, которые были специально разработаны для соответствия всей этой нише:
Интересно, что есть также ряд языков, не специально предназначенных для заполнения этой ниши, но которые были очень успешно использованы в этой нише:
Есть также много языков, которые еще не использовались в этой нише, но они, безусловно, могли быть. (В основном это потому, что сами эти языковые сообщества настолько внушали чушь, что «операционные системы можно писать только на C», что они на самом деле считают, что их собственный язык непригоден для использования.)
[Обратите внимание, что для каждой из трех категорий, которые я перечислил, есть буквально тысячи других языков, которые подходят туда.]
На самом деле, иногда возникает ощущение, что языки, которые не специально разработанные, скажем, для программирования операционных систем, на самом деле лучше для такого рода вещей.Сравните, например, уровень инноваций, стабильность, количество дыр в безопасности, производительность в чем-то вроде ОС Smalltalk 1970-х годов и Windows или OSX 2010 года.
Лично я считаю, что это основано на некоторых глубоких данных. укоренившие мифы в сообществе системного программирования. Они считают, что системное программирование на языке, например, со строгой типизацией, безопасностью типов, безопасностью памяти, безопасностью указателей, автоматическим управлением хранилищем, невозможно и что единственный способ получить производительность или гарантии в реальном времени - отказаться от мощных средств абстракции. Однако оказывается, что когда вы пытаетесь разработать язык программирования для людей вместо машин, тогда люди могут действительно понимать программы, которые они написали, находить дыры в безопасности, исправлять ошибки, а также обнаруживать и устранять узкие места производительности намного лучше. в понимании монады в 1 строку, чем в цикле for из 100 строк.
Например, SqueakNOS, который является вариантом системы Squeak Smalltalk, работающей без ОС (другими словами: это ОС), имеет почти все функции, которые можно ожидать от современная ОС (графический пользовательский интерфейс, ...) плюс некоторые, которых у вас нет (встроенный язык сценариев, который может изменять каждую часть ОС во время выполнения), весит всего 300 тыс. SLOC и загружается менее чем за 5 секунд, в то время как, например, Windows весит 50 миллионов SLOC.
Ada, вероятно, является наиболее широко используемым языком в этой области, помимо C.
Он предназначен, прежде всего, для создания надежного кода без ошибок, но большинство компиляторов Ada также производят хорошо оптимизированный эффективный машинный код.
Некоторое время этот язык был обязательным для проектов Министерства обороны, и он до сих пор широко используется в авиации, радиолокации, навигации и системах управления оружием.
BitC - это конкретная попытка. Вот отличная статья об альтернативах C и о том, почему они потерпели неудачу.