Универсальных языков для написание ОС не существует (имхо).
Лучший вариант может быть свой DSL, оптимально подходящий под архитектуру ОС.
(Опять же в процессе, разработки «придет озарение», и придется изменять архитектуру и соответственно язык.)
Мой разумный вариант: DSL написанная на DSL, которая написана на другой DSL.... Так и только так....
Почему, если она же на DSL написана, код будет на порядок короче. И нечего лишнего. Каждый кто сможет понять, суть ОС суть DSL. Сможет изменив пару строк кода, существенно поменять архитектуру ОС. Тут главное не отступать, для каждого модуля свой четко выверенный DSL, отражающий и черты самой ОС и архитектурные отличия модуля от общей идеи ОС.
Ну это та штука на моем компе, в которой не обязательно будет MyPaint & Co. Ну ты понел, да? Прослойка между твоим прикладным ПО и твоим железом. Или слишком узко?
писать ОС и без упомянутых языков..это не ОС будет а хрень...и если не ядро, а программы - это называется просто разработкой ПО под ОСи. определись с направлением... углубись в ембеддед девелоп()
Да не, я-то знаю, поэтому и спросил, какого ты рожна приплетаешь сюда прикладное ПО:)
Даже вики, какой-никакой, а все-таки источник, вот здесь: http://en.wikipedia.org/wiki/Operating_system содержит диаграммку, где все твои пейнты и жабоклиенты вынесены отдельно от ОС. А ты смешал мух с котлетами, и не можешь это признать.
DSL оправданы в алгоритмически сложных задачах, когда средств абстракции самого языка уже недостаточно чтобы кратко выразить суть программы. В ОС это не нужно, там нужен низкоуровневый доступ к регистрам/памяти и примитивные, но эффективные структуры данных.
ух ты ж, блин, какой ты умный. я тебе задал вполне прямой вопрос: что ты называешь ОС?; на что ты ответить так и не соизволил, очевидно из-за своего скудоумия.
давай же отделим твоих мух от твоих котлет, и так:
загрузчик (syslinux, lilo, grub?), это операционная система? нет, это прикладная программа, но для него нужен ассемблер или C
ядро (linux, hurd), это операционная система? нет, это не ОС, а программа которая должна помочь при работе с железом. то есть, грубо говоря, linux - это драйвер.
ты работаешь с драйверами на прямую? нет, ты работаешь с программами (прикладными), а программам нужны базовые библиотеки. и тут мы подходим к libc. но ведь сама по себе libc не операционная система, так как ты с ней на прямую не работаешь.
а вот coreutils (cp, rm) - это прикладная программа или операционная система?
или может быть bash - операционная система? или всё таки это прикладная программа? но ты же ведь используешь его для работы с прикладными программами, такими как imagemagick?
а наутилус или тюнар ты используешь для того чтобы работать с прикладным ПО? а ведь и наутилус и тюнар могли бы быть написаны на Python
вот тут мы и подошли к тому, что ОС - это совокупность всего ПО, которое тебе нужно для совершения тобой грязных делишек.
При чём, необходимый минимум ассемблера и C - это загрузчик, драйвера и glibc
так что держи свои котлеты с мухами при себе, умник.
В курсе «системное программное обеспечение» нам давалось дофольно формальное определение термина «операционная система». Только я его уже подзабыл. :) Читал Сергей Кузнецов, бывший руководитель SUUG (Soviet UNIX User's Group).
GC нужен для поддержки таких фич как замыкания, неограниченные ФВП и свободно создаваемые динамические структуры данных (без необходимости следить за их освобождением).
Например, если мы вернём лямбду из функции и эта лямбда использует аргументы функции (замыкает их), то нужно, во-первых, переместить их со стека в кучу (память+, время+) и, во-вторых, должен быть код который будет вести учёт таких данных в куче (память+) и постоянно занимать процессорное время, проверяя не пора ли эти данные освободить (время+).
Ядро это совсем другой уровень - нужно не то что следить за динамически создаваемыми структурами данных, обычно там даже стек фиксированного и небольшого размера. Это просто другой уровень.
Что касается ПО из base system - если его можно писать «линейно» (без замыканий, ФВП, и свободных динамических данных), а это как раз можно и предпочтительно, то GC и не нужна в такого рода ПО.
Ололошеньки! Загрузчик это операционная система!! ах-ах-ах :D И только децелы называют Linux операционной системой. Такчто пойди и толкни себя в стену!
Это потому, что я привык опираться на общепринятые определения, а не на глубокомысленное «ос - это едро, кореутилс и майпеинт, а ты захлопнись». Смотри:
Это то, что я нагуглил - самые релевантные ссылки, выданные гуглом. А теперь дай мне ссылку ты, где будет написано, что ОС - это все-все-все программы на ПК. Только пусть это будет посещаемый сайт, а не наколенное школоподелие.
Повторяю вопрос - нафига козе баян? Вопрос «почему нельзя» это не вопрос (мало ли что не имеет отношения к вопросу рассмотрения и, таким образом, не нужно, в контексте данного вопроса), вопрос - «зачем это нужно». Зачем?
Как бы, область design, особенно OS design, это область вообще не лежащая в плоскости языков программирования. Писать-реализовывать то что ты напридумывал можно на любом языке. Но
С какой радости драйвера нельзя писать с блямбдами и LINQ-ами?
Это всё позволительно только в прототипах. И
Коран запрещает, штоле?
Обычный здравый смысл - зачем делать хуже, если можно делать лучше. Выскоуровневые фичи стоят накладных ресурсов. Вот если они перестанут иметь такую стоимость - тогда уже будет другой разговор.
Например, за L4 лежат определённые чёткие идеи, но первая версия была вовсе на ассемблере, потом уже на C++ (в одной реализации был верификатор времени компиляции на Haskell). И ни у кого так и не возникло необходимости переписывать это (условно) на лиспах, потому что наличие или отсутсвие в языке высокоуровневых фич никак не сопряжено с наличием или отсутсвием в разработке концептов.
С какой радости драйвера нельзя писать с блямбдами и LINQ-ами?
Это всё позволительно только в прототипах
Это всё _технически возможно_ только в прототипах, потому что нынешние компиляторы так себе.
а L4 лежат определённые чёткие идеи, но первая версия была вовсе на ассемблере, потом уже на C++ (в одной реализации был верификатор времени компиляции на Haskell). И ни у кого так и не возникло необходимости переписывать это (условно) на лиспах
Потому что L4 - игрушка. Когда операционная система становится серьезным продуктом и растет в размерах, ей таки нужно что-то более выразительное, чем Си.
Когда операционная система становится серьезным продуктом и растет в размерах, ей таки нужно что-то более выразительное, чем Си.
Например что? C++? ATS / Cyclone / ...? Сторонние верификаторы? Или какой-то несуществующий пока язык - достаточно высокоуровневый и (вопреки) с эффективным компилятором?
Когда операционная система становится серьезным продуктом и растет в размерах, ей таки нужно что-то более выразительное, чем Си.
Например что? C++? ATS / Cyclone / ...? Сторонние верификаторы? Или какой-то несуществующий пока язык
Это точно не Си++ и не AST. Наверное, это и не Cyclon, хотя он ближе всего. Я не знаю, что это будет, но попытки создать этот новый язык периодически предпринимаются - Cyclon, BitC, в меньшей степени - Rust, D. Или более «верификаторный» подход - Ivy. Насколько я могу судить, растет понимание того, что ОС и низкоуровневый софт нужно писать на чем-то более безопасном, чем Си, но создать это «что-то» пока не получается.
The most important program that runs on a computer (определеня ОС не дали, назвали её программой и не сказали что входит в состав операционной системы). Every general-purpose computer must have an operating system to run other programs.(опять же, для запуска и выполнения программ, кроме linux, используется ещё и куча другого софта, в том числе загрузчик(для запуска самого ядра, винды или другой программы), bash, glibc и файловые менеджеры, причём последние - самые настоящие прикладные программы, и, ещё раз, могут быть написаны на Python) ) Operating systems perform basic tasks, such as recognizing input from the keyboard (это выполняют драйверы входящие в состав ядра, но всё это поделено на ноль, пока к этому не подключен эмулятор терминала и интерпритатор команд. при чём, это не ядро запускает agetty и bash, а другие программы), sending output to the display screen(linux это не делает сам: в этом процессе как минимум участвуют такие программы как agetty, bash, xorg, gtk+, qt, wxwidgets. при чём, gtk+, qt, wxwidgets сами по себе ничего не делают, а руководствуются инструкциями прикладных программ), keeping track of files and directories on the disk(это понимать буквально или с прикладной точки зрения? если буквально, то всё что делает linux - это записывает или читает файлы с помощью драйверов файловой системы, а полезный труд по работе с файлами выполняют файловые менеджеры - которые являются прикладным ПО), and controlling peripheral devices such as disk drives and printers(принтеры: linux не контролирует принтеры, он помогает другим программам их контролировать).
An Operating System is a computer program that manages the resources of a computer. It accepts keyboard or mouse inputs from users and displays the results of the actions and allows the user to run applications, or communicate with other computers via networked connections.
В книжке Таненбаума (Operating Systems: Design and Implementation, глава 1) браузеры и офисы называются «программами-приложениями», уровнем ниже - системные программы (оболочка, компиляторы, редакторы, системные утилиты), т.е. то без чего нельзя администрировать систему, ещё уровнем ниже - ОС (видимо, загрузчик, ядро, драйвера, сервисы, и всё то, что позволяет работать программам-приложениям и системным программам), а дальше уже - машинный язык, микроархетиктура и непосредственно железо.
То есть, вот написал я свой helloworld, положил его, скажем, в /usr/bin, и теперь он тоже - «операционная система»? Имхо, ты уже существенно перегибаешь.
если перейти на совсем буквальные понятия, то Linux, как ядро, можно приложить к чему угодно: PC, PS(sony), mobile, тостеры, микроволновки, чайники, часы и на что только фантазии хватит.