Какой язык вы бы использовали в своей ОС? - PullRequest
10 голосов
/ 12 июня 2009

Вероятно, это скорее субъективный вопрос, но какой язык (кроме API, например .NET или JDK) вы бы использовали, если бы вы писали свою собственную операционную систему? Какой язык обеспечивает гибкость, простоту и, возможно, низкоуровневый интерфейс к оборудованию? Я думал о Java или C ...

Ответы [ 26 ]

32 голосов
/ 12 июня 2009

С, конечно.

12 голосов
/ 12 июня 2009

Haskell.

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

Во всяком случае, это не просто сумасшедшая идея, которую я приду к SO. Вот операционная система, написанная на Haskell: http://programatica.cs.pdx.edu/House/

Лисп - еще один хороший выбор; оригинальные машины Lisp были бесконечно более гибкими (во время выполнения), чем «современные» ОС, такие как UNIX и Windows.

Иногда история забывает хорошие идеи (часто во имя «максимальной производительности»), и это меня огорчает.

8 голосов
/ 12 июня 2009

D будет интересным выбором. Из собственного описания:

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

Среда выполнения D предполагает наличие сборщика мусора, который не подходит для самых низких уровней ядра. Тем не менее, это было бы целесообразно для многих из более высоких слоев.

6 голосов
/ 12 июня 2009

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

Я полагаю, что именно так Windows XP была построена тоже (не уверены насчет Windows Vista и Windows 7 ).

5 голосов
/ 12 июня 2009

Определенно ... C

5 голосов
/ 12 июня 2009

C, ASM, C #

Singularity

3 голосов
/ 12 июня 2009
  • Низкий уровень в чем-то вроде Haskell или D . Производительность выше производительности, на мой взгляд. Вы можете переписать медленные детали на C ++ или даже на сборке позже, если возникнет такая необходимость.
  • Высокий уровень in Python или Ruby . В идеале у меня также была бы очень быстрая JIT-совместимая ВМ для этого языка, но какое-то время этого не произойдет ни с одним языком. Lua была бы хорошей альтернативой, если бы мешала скорость.
2 голосов
/ 12 июня 2009

BitC , кажется, имеет это в виду. Несмотря на его название, кажется, это середина ассемблера и языка. Цель состояла в том, чтобы сделать язык с сильным соответствием машинному языку, но иметь промежуточное представление, которое поддерживает более точные выводы о правильности, чем это возможно в большинстве других распространенных языков. Языки были созданы в рамках проекта Coyotos, операционной системы с высокими целями безопасности и надежности. Формальная проверка стала значительно возможной с помощью ИК, используемой в BitC.

2 голосов
/ 12 июня 2009

Честно говоря, я бы либо использовал C, либо какую-то иерархию языков, которые я либо разработал, либо совместил бы полностью без проблем. То, что я хотел бы найти, - это плавный опыт, который начинается на уровне «голого металла», а затем я могу переходить к языкам более высокого и более высокого уровня по мере продвижения в проблемном пространстве. Я бы, наверное, выбрал что-то вроде:

  • C - для простых вещей, таких как драйверы, ядро ​​и т. Д.
  • Java / C # - для таких приложений, как консоли администрирования, приложения для ОС
  • Python / PowerShell - для сценариев, таких как общие административные задачи (создание нового пользователя и т. Д.)

Лично я думаю, что C / C # / PowerShell более тесно интегрированы и тот тип опыта, который я бы искал. Конечно, если бы я когда-либо стал настолько амбициозным, что написать операционную систему, у меня было бы много свободного времени, и, возможно, мне действительно понравилось бы сначала заняться языковым стеком. Так что, возможно, это будет L / L # / LScript ...

2 голосов
/ 12 июня 2009

Ядро должно быть написано на низкоуровневом языке, C - безусловно, лучший выбор для этого, потому что он настолько эффективен для памяти. Более высокие уровни могут быть созданы с помощью комбинации Java или, в идеале, Objective-C и языков сценариев, таких как python и ruby, или lua.

...