Цитата:
За базу взят ChromeOS. О подробном функционале - в прикреплённой теме.
В каком смысле за базу взят? СhromeOS - на ассемблере?
Насчет сложности писания на ассемблере скажу так. Нужно различать сложность и трудоемкость. Это немного разные вещи. По сложности концепций ассемблер, пожалуй одна из наиболее примитивных технологий программирования. От платформы, под которую необходимо писать зависит трудоемкость. Языки программирования высокого уровня и современный веб, к примеру, требуют от программиста знания огромного количества технологий и концепций. Поэтому на той же Java писать ничуть не легче, чем на ассемблере, а скорее наоборот.
С другой стороны трудоемкость написания на ассемблере высокая. Программист пишет в единицу времени примерно одинаковое количество строк. Не важно на каком языке. Строки в ассемблере не сильнофункциональные в прикладном смысле. С точки зрения системной, как раз наоборот. Программа на ассемблере напоминает высокоуровневую программу с большим количеством глобальных переменных (регистры). Каждая операция в программе эти переменные меняет. Код с большим количеством переменных писать трудоемко, чревато ошибками и не производительно. Такой стиль программирования ни к чему хорошему не приводит. Поэтому ассемблером стоит пользоваться только в случае невозможности использовать что-то иное.
Еще один аспект. Сопряжение с чужим кодом. Языки высокого уровня привносят в код т.н. Calling Conventions. Что упорядочивает код и по-крайней мере пытается внести упорядоченность в сопряжение одного кода с другим. Поверх Calling Conventions ограничения накладывают форматы объектных файлов и т.д.
Ассемблер предоставляет наинизший (наихудший) уровень совместимости и сопрягаемости. На ассемблере писали первые поколения операционных систем. На тех же мейнфреймах ОС была на ассемблере, MS DOS был писан на ассемблере по большей части по крайней мере.
Язык Си следующий шаг по сравнению с ассемблером. Он предоставляет совместимость на уровне исходного кода. На нём написано подавляющее большинство системного кода на сегодняшний день. На самом деле между голым Си и ассемблером очень мало прогресса. У Си есть проблемы - он достаточно примитивен, чтобы на нём было писать быстро. Но при всей своей примитивности Си достаточно сложен, чтобы компилятор с него был достаточно сложным (отнимал много процессорного времени на компиляцию). Поэтому следующий шаг развития языков высокого уровня - языки с виртуальными машинами.
Виртуальная машина может быть не обязательно интерпретируемой. Она может быть средством обеспечения переносимости. А на target платформе компилироваться в native - код. Пример LLVM. Виртуальные машины позволяют существование нескольких высокоуровневых языков программирования, компилирующихся в одинаковый код виртуальной машины. На конкретной платформе код виртуальной машины может компилироваться в native-код. Байт-код виртуальных машин значительно проще компилировать, чем язык высокого уровня, поэтому компилировать байт-код в native можно либо c помощью предварительной компиляции, либо с помощью JIT.
За счет байт-кода (виртуальной машины) Java имеет уровень совместимости - "один раз скомпилировал - работает везде"... Код совместим не только на уровне исходников, но и на уровне скомпилированного байт-кода. Это ведет к высочайшему уровню совместимости разных библиотек и тулкитов.
Что и приводит к тому, что найти в интернете необходимый фрагмент кода на Java чаще всего ничего сложного не представляет. Сложности возникают только с какой-нибудь малоиспользуемой экзотикой или чем-нибудь очень современным и малораспространенным... (пока). Сегодня, правда, с появлением Android, появилось большое ответвление Java, что не радует. Назвали бы её по-другому... чтобы не нарушать принципа.
Ещё одна проблема с написанием операционных систем - отсутствие большого количества проработанных архитектур. Причем большая часть из того, что есть базируется на Си. Чем руководствуются разработчики операционных систем на ассемблере вообще загадка.
Хулиганский Hello World на ассемблере:
Код:
mov si, hello
call print_msg
hello:
db 'Hello',0
mov si, world
call print_msg
world:
db 'World',0
ret
print_msg:
mov ah,0xe
int 0x10
pop si
lodsb
push si
jnz print_msg
ret
Или что-нибудь наподобии:
Код:
getcodeaddr:
call $+3
mov ax,[sp+2]
...
Ассемблер это позволяет. Почему бы все это не использовать в коде?
UNIX по сравнению с операционными системами на ассемблере - это продуманная архитектура. Пусть и устаревшая местами, но в классическом её виде элегантная как сам Си.
Тем не менее, прогресс не стоит на месте. Думаю наиболее интересными разработками на сегодняшний день являются эксперименты вроде Mona или (присутствущий на этом форуме) Phantom OS.
P.S. Сорримногобукв. Пока писал, тред уже разросся.