mari_an_shum
@mari_an_shum
Компьютерный лингвист

Если бы вам предложили написать свою ОС с нуля (никаких Linux), какой ЯП вы бы выбрали?

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

Моя гипотеза — на чем-то из семейства С, но, так как не шарю за С-подобные языки, это лишь гипотеза.
  • Вопрос задан
  • 468 просмотров
Пригласить эксперта
Ответы на вопрос 7
15432
@15432
Системный программист ^_^
Rust
Ответ написан
Комментировать
@serhiops
Python/JavaScript/C++
Операционные системы пишут ,в основном, на следующих языках: С, С++, C#, язык ассамблера. Обычно, их смешивают - где особо производительность не нужна - С++, С#. В местах, где важна каждая миллисикунда - С, ассамблер.
На самом деле, как альтернативу в данный момент я вижу только Go. Ненамного медленнее, а скорость разработки растет в разы.
Проблема в том, что большинство популярных ныне языков программирования попросту не настолько низкоуровневые, чтобы сделать хоть что-то весомое в этой области.
На практике вам не придется выбирать на каком языке писать ОС, потому что 95% разработки это поддерживание/переделывание старого кода.
Ответ написан
OCTAGRAM
@OCTAGRAM
Ада 95.

Имеет транслятор в Си (опционально с исключениями C++) AdaMagic, но при этом экранирует программиста от специфичных для Си приколов, когда код на Си не другим транслятором создаётся, а человеком пишется. Вне зависимости от того, трансляция в Си или C++, есть RAII. И есть верификация SPARK. Хотя, если так подумать, в ядре RAII — не очень хорошая идея, а вот верификация — вполне.

У меня на уме как раз есть такая операционка. Это нужно для трансляции для браузеров. Я хочу зелёные потоки на WebAssembly натянуть. При выбранном подходе Wasm становится как бы микроконтроллером, а вызовы из JavaScript становятся прерываниями. User-space код — это код зелёных потоков, а так, как зелёных потоков может быть много, то какой-то код ещё должен переключать контекст. И это получается что-то вроде kernel-space операционной системы. Вот это самое ядро гипотетически ещё можно SPARK верифицировать.
Ответ написан
@Akela_wolf
Extreme Programmer
Учитывая что вопрос теоретический... Ну вот смотрите: что должна уметь делать ОС?
1. Взаимодействовать с железом. Отсюда требование к языку - уметь низкоуровневую работу с процессором, памятью и портами ввода-вывода. Отсюда - ассемблер, Си, Си++
2. Быть переносимой на разное железо (разную архитектуру процессоров). Отсюда - ассемблер, Си, Си++

Собственно все. Ни на чем другом эффективно вы ядро ОС не напишете. Затем, уже поверх ядра, можно наворачивать библиотеки и драйверы/модули ядра на других языках (главное чтобы была ABI-совместимость с вашим ядром). Но прежде чем думать о других языках у вас возникнет еще одна проблема: портировать компилятор оного языка (и компилятор ассемблера/Си/Си++ тоже) на вашу ОС. А потом портировать тучу другого полезного софта. Что, при условии что вы пишете что-то свое, "никакого Linux" будет той еще головной болью.
Ответ написан
1MK-Ultra
@1MK-Ultra
программист
Я уже пишу свою систему с нуля. Пока делаю на ассемблере и си. Далее планирую другие языки подключать, по мере того как спортирую компиляторы и либы
Ответ написан
Vapaamies
@Vapaamies
Психанул и снес свои ответы козлам, не отмечающим…
Разрабатываю сначала язык. Концептуально новую ОС на существующих языках не напишешь, разве что чисто для развлечения и/или практики.
Ответ написан
CityCat4
@CityCat4
//COPY01 EXEC PGM=IEBGENER
Все придумано за нас, до нас и весьма давно...

С, разумеется. В большей части. В критичных местах - asm. Собственно линух так и написан.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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