Yoda писал(а):
исправлять косяки С++ можно только с потерей совместимости, и никак иначе. А если терять совместимость, то можно и остальное в мусорку выкидывать.
Ну, собсно, в Расте это и попытались сделать. Но хорошее дело браком не назовут -- и ржавчиной тоже

(а если серьёзно, надо именно что отказываться от совместимости, но не пытаться впихнуть невпихуемое и решить нерешаемое -- типа полной надёжности прямой работы с адресами памяти, без чего невозможно низкоуровневое программирование).
Цитата:
По этим причинам я и написал, что чисто теоретически портировать можно, но лично мне такая перспектива совсем не нравится
Понял и, в общем-то, согласен. А насчёт порядка перечисления библиотек и объектников -- это, конечно, идиотизм. Многократно просматривать объектники/библиотеки умеют и штатный компоновщик RSX-11 (а ему примерно столько же, сколько и классическим униховым инструментам), и OS/360 (а он старше, грубо говоря, на 10 лет). Уних -- масдай

Цитата:
Вот Брусиловский пишет, что даже RSX-11M и RT-11 написана на языке FORTRAN-4
Нагло врёт. Обе этих системы целиком и полностью написаны на ассемблере. Исходников RT-11 у меня нет, а вот RSX-11 имеются -- могу, как говорится, предоставить. Единственная роль Фортрана там -- что в системной библиотеке объектных модулей были предусмотрены фортрано-совместимые подпрограммы, чтобы дёргать системные вызовы прямо из Фортрана (или, например, из Паскаля, который умел вызывать фортрановские подпрограммы, т.е. поддерживать его соглашения о связях, а не только свои собственные). Но, повторюсь, системы эти целиком и полностью написаны на ассемблере. Как, есно, и намного более крупная OS/360 (и тоже исходники имеются).
Цитата:
Тут скорей надо определиться, что мы включаем в состав даже не оси, а ядра. С осью понятно — это не только ядро, но и минимальный набор утилит, которые, очевидно пилятся на ЯВУ. Но если, например, мы хотим многопользовательскую защиту, то мы не можем вынести ни межпроцессную коммуникацию, ни работу с файловой системой, ни планировщик целиком в юзерспейс (имя ввиду под юзером текущего пользователя, а не сервис). А там всё можно написать на ЯВУ.
Все перечисленные вещи и не надо, вообще говоря, выносить из ядра (из его адресного пространства и режима работы процессора). Реальных микроядерных осей не просто так не существует -- концепция оказалась мёртворождённой, как и концепция RISC-процессоров (то, что сейчас величают микроядрами или РИСКами, ни разу ими не являются).
Исключение -- большие и тяжёлые драйверы, при этом не требующие прямого доступа к аппаратуре, -- типа тех же файловых систем или большей части драйверов видюх, включая компиляторы шейдеров. Их реализовать как задачи (процессы) режима пользователя, но постараться организовать эффективное взаимодействие между ними и прикладными задачами -- по возможности, с минимальным участием ядра или вообще без оного. Последнее, есно, зависит от особенностей архитектуры процессора. Скажем, на IBMовских мэйнфреймах очень эффективно можно использовать механизм множества адресных пространств и вызова программ по номерам -- они, собсно, и предназначены, чтобы задача режима "пользователь" могла вызвать некий код в другой задаче режима "пользователь", не дёргая ОС, но при этом с обеспечением проверки прав, защитой памяти и т.д. и т.п.; на IA-32 аналогичного, хотя сложней и черезжопней, можно было бы добиться с помощью сегментов и шлюзов вызова, но их в АМД64, как известно, полностью выпилили, так что на нём или, скажем, на АРМах уже никак без вызова ОС не обойтись.
Цитата:
Но я склонен всё это называть ядром операционной системы — по функциональным, а не формальным критериям.
О терминах не спорят, о терминах договариваются

Лично я к ядру отношу код больше по формальным критериям: работа в адресном пространстве ядра и режиме процессора "супервизор" ("ядро", нулевое кольцо -- от архитектуры название зависит, но смысл везде одинаков). Понятно, что, например, драйвер файловой системы, реализованный как задача, к ядру в этом случае не относится -- но, с точки зрения пользователя, для выполнения операций ввода-вывода пользователь пользуется сервисами ядра, а как оно там реализовано -- уже не его забота. (А ядро будет работать и без этого драйвера -- естественно, при этом окажется недоступной часть функций ввода-вывода, но не более того.)
Цитата:
Как раз в порядке "потренироваться на кошечках" я и реализовал в своём компиляторе ассемблер на i8080/z80. Им успешно собираю и запускаю под эмулятором ОС CP/M. Нормального макроассемблера даже для этих архитектур нет, ASM80 содержит грубейшие ошибки, например, неправильно считает A+B*C — ошибка в приоритете выполнения операций

Ну, с хорошими ассемблерами вообще проблема, поскольку они давно не мэйнстрим. На 8080 я вообще ничего сколько-нибудь нормального не видел -- и если те, которые работают на самом 8080, ещё могут отмазываться малыми доступными ресурсами, то кросс-трансляторы... (Впрочем, и ресурсы -- тоже отмаза; ассемблер OS/360 может успешно работать в разделе памяти 16 Кбайт, а по функционалу в плане макросредств ему трудно найти равного -- хотя синтаксис временами ужасен, а использование для всей условной трансляции, циклов и т.д. только ИФ и ГОТО порождает понятно насколько читабельный исходник

Правда, если памяти у него мало, он будет нещадно насиловать диски, что медленно и печально -- но работает же.)
А приоритет операций -- это не баг, это фича

)) На самом деле, к этому приноровиться ещё можно, хотя и неудобно, конечно, но вот если нормальных макросредств нет -- ничего ты с этим уже не сделаешь. Понятно, что для хелловорлда они и не нужны, а вот для чего-то серьёзного...