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

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

Ответы [ 26 ]

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

Ada

Ada - это структурированный, статически типизированный, императивный и объектно-ориентированный язык программирования высокого уровня, расширенный от Pascal и других языков. Первоначально он был разработан командой во главе с Жаном Ичбиа из CII Honeywell Bull по контракту с Министерством обороны США (DoD) с 1977 по 1983 год, чтобы заменить сотни языков программирования, которые затем использовались DoD. Ada строго типизирована, и компиляторы проверены на надежность в критически важных приложениях, таких как программное обеспечение для авионики.

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

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

Не поймите меня неправильно, C, очевидно, работает для очень многих проектов, но как только проект достигнет определенного размера (например, ядро ​​Linux, gcc, GNOME), вы неизбежно оцените некоторые функции языков более высокого уровня. сделать процесс разработки менее утомительным, а также менее запутанным.

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

Кроме того, Ada является единственным известным мне языком программирования, который фактически обеспечивает стандартизированную поддержку анализа исходного кода с использованием ASIS , однако наличие такого средства является необходимым условием для фактического быть в состоянии поддерживать и преобразовывать / реорганизовывать базу кода в долгосрочной перспективе (подумайте о рефакторинге).

Наличие такого интерфейса, как ASIS, означает, что вы действительно можете реализовать «семантическое исправление», при котором вы можете автоматически переименовывать файл, функцию или переменную / структуру данных, и это на самом деле будет работать.

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

Оберон? Думаю, я иногда слишком скучаю по Паскалю. Си довольно долго оплачивал счета, но мне это не очень нравится.

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

Я бы пошел с D, чтобы посмотреть, сможет ли он это сделать.

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

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

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

Я бы выбрал только 3 из практических.

  • C (старомодный)
  • C ++ (C с прикрепленным материалом. Windows частично написана на этом)
  • Java (язык среднего уровня, который может иметь способный сборщик мусора с управляемыми паузами с G1).
1 голос
/ 12 июня 2009

Ява ?? на виртуальной машине не работает jave, для работы которой требуется ОС, возможно C и немного ASM;)

1 голос
/ 20 ноября 2010

Лисп конечно!

With Apologies to Robert Frost

Текст заголовка: Некоторые говорят, что мир кончится огнем; некоторые говорят в сегфо.

0 голосов
/ 27 июня 2009

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

Кроме того, (и я еще не собирал ОС, так что примите это с большой долей солидарности), я думаю, что библиотеки времени выполнения c будет намного проще перенести на вашу новую ОС, чем, скажем, .NET.

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

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

Гм ... А как насчет FORTH?

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

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

edit: Я бы попробовал это только для встроенной среды с одним известным набором оборудования. Попытка написать ОС, которая могла бы конкурировать с Linux или Windows, - дурацкая работа.

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

Микроядро C или C ++ с JIT для высокодинамичного языка, такого как Ruby, или, возможно, для языка с встроенной поддержкой шаблона Prototype. Даже драйверы устройств на этом языке.

Не потому что это практично, а потому что это действительно круто. Круто то, что NeXTStep был классным для использования Obj-C для почти всего.

...