Цитата:
SII » Сегодня, 00:38
achesnokov писал(а):
UNIX по сравнению с операционными системами на ассемблере - это продуманная архитектура. Пусть и устаревшая местами, но в классическом её виде элегантная как сам Си.
Самые тщательно продуманные ОС из моей практики -- RSX-11, VAX/VMS и VM/370-- были написаны на ассемблере. Даже весьма хаотичная на первый взгляд OS/360 продумана довольно неплохо. А вот Линух, как и исходный Уних, продуманностью, мягко выражаясь, не отличаются. Винда намного продуманней, но она своими корнями уходит непосредственно в VAX/VMS, и многие идеи пришли оттуда.
И вообще, продуманность с языком вообще никак не связаны, поскольку архитектура системы, набор её компонентов, их взаимодействие на макроуровне никакого отношения к тем или иным языкам не имеют.
Я не могу похвастаться практикой RSX, VAX, VM/370. Программировать начинал на OS/360 на PL/1 в основном. Но боюсь это не аргумент, поскольку на всю жизнь не научишься. Программист глубоко знает только технологии последних пары лет. А о таких древностях - светлые воспоминания из юности. Продуманность идеологии IBM/360 была конечно весьма высокой. Но и цена тоже. Это была эра дорогих машин и дешевых людей. Поэтому программирование в те годы, когда разрабатывались упомянутые операционные системы было совсем другим ремеслом. Сегодня все наоборот. Сегодня эра дешевого железа и дорогих программистов. В юности вообще деревья были выше и небо светлее. Под той же IBM/360 можно было программировать под PL/1 и ассемблером в основном. И как бы, однажды потребовалась такая штука как простейший перекодировщик текста. Дело было году эдак в 87-88. Нужно было из DKOI перекодировать куда-то в KOI-7 кажется. Перекодировшик на PL/1 помнится на EC-1022 минут за 20-ть перекодировал строчек 10-ть текста. Потом ассемблерная версия 250 страниц того же текста перекодировала секунды за полторы. Это о тогдашней продуманности. PL/1 по сравнению с современными Java и .Net пожалуй вряд ли выигрывал концептуально. После PL/1 Си показался просто верхом изящества. Я не знаю как можно сравнивать такие древние архитектуры и сегодняшние компьютеры. "Вы были когда нибудь на Таити? Нет? Ну так вот..."
Линукс не сразу к юниксам причислили. Школьники причислили, чтобы гордо причислять себя к UNIX сообществу, а юниксоиды, чтобы погреться под лучами популярности Linux. Долгое время после появления Линукса юниксом его многие считать не хотели. Юниксов было два SysV и BSD. А Linux ни тем ни другим не являлся и вообще был писан на коленке и позволял такие вещи, какие приличные юникса позволить не могли. Ввиду борьбы за чистоту архитектуры. Сегодняшний Линукс вообще ушёл о UNIX-ов делеко. Поэтому ругать вместе и UNIX и Linux, на мой взгляд, слегка неверно. Linux не юникс. С таким подходом можно вообще все операционки объединить в одно целое.
Цитата:
Bargest » Вчера, 21:29
Половину сообщения achesnokov вообще не понял: при чем тут виртуальные машины? Писать ось на Жаве/.NET?
Языки программирования, вроде Java отличаются от предшественников большой продуманностью технологий программирования, мощными средствами юнит тестирования, средствами continuos integration, средствами статического анализа кода, прекрасными средами разработки типа Intelij IDEA и т.д. Поэтому постараться использовать все выше перечисленное в разработке ОС является мудрым решением. Баланс между производительностью, чистотой концепций, простотой архитектуры и прочее достичь сложно. В этом и заключается мастерство архитектора ОС, чтобы прикрутить виртуальную машину в Операционную Систему эффективно. Пока красиво это сделать никому не удалось.
На асме написать можно всё. Макроассемблер позволяет писать так, что код будет похож на язык высокого уровня. Но тогда почему не воспользоваться языком высокого уровня?
Если использовать Calling Conventions cdecl почему не воспользоваться Cи?
Да некоторые ассемблеры позволяют контролировать изменения регистров. Например встроенный ассемблер в gcc в расширенных выражениях позволяет указывать через какие регистры передаются параметры и результаты, и какие регистры меняются. Это круто и правильно. Но когда моя команда работала на Си++ и ассемблере, я не представлял, что проекты с zero bug quality могут программироваться месяца за три (включая обсуждение технического задание, документирование, программирование, покрытие юнит тестами, функциональное тестирование и полную сдачу в эксплуатацию). А сейчас такое возможно (на Java для японцев)... На Си++ и асме такие сроки просто нереальны. Плюс баги никогда не возвращаются. Сдали, оно работает... Хочется такого же и в ОС.
Я одно время внедрял FreeBSD массово в качестве маршрутизаторов. Было это в до Cisco-вскую эпоху. Так вот FreeBSD образца 1996 года подвисала в среднем раз в месяц. У меня их было штук 50-т. Соответственно дважды в день мне или админам приходилось звонить и объяснять электрику или тетке где-то в полях, как перегрузить комп. Приходилось жить на работе (мне сильно наскучило тогда из ядра лишние модули выпиливать, чтобы найти конфигурацию, которая будет работать максимально стабильно). Поэтому надежность операционной системы и кода вообще - на первом месте.
Ассемблер - круто. Но чудес не бывает. Человеческий фактор нужно уменьшать. Для этого и нужны ЯВУ.
Да, и совершенно согласен, насчет читаемости кода. Код приходится больше читать, чем писать. Поэтому читаемость очень нужная штука.