LINUX.ORG.RU

Энтузиасты обеспечили возможность запуска передовой ОС на ширпотребном оборудовании!

 , ,


1

2

Группа энтузиастов ретро-систем опубликовала первый выпуск симулятора мейнфрейма Honeywell DPS-8/M, пригодного для запуска операционной системы Multics, выпускавшейся с 1965 по 1992 год и рассматриваемой как прародитель UNIX. Симулятор доступен как в исходных текстах, так и в виде готовых сборок для Linux, Windows и macOS.

Для запуска в симуляторе предлагается образ операционной системы Multics 12.6f (код Multics в 2007 году был открыт Массачусетским технологическим институтом). Предоставляется возможность работы с Multics через эмулятор терминала. Возможна симуляции ленточных и дисковых накопителей через локальную ФС, но поддерживается и ввод/вывод через симулированные перфокарты.

Симулятор, доки и плюшки: http://multicians.org/simulator.html

ну теперь-то винде точно капец!

dikiy ★★★★★ ()

Энтузиасты-некрофилы или просто студенты от нефиг делать?

Ramil ★★ ()

Роб Пайк неоднократно говорил, что следует продолжать делать новые ОС, инновации в системной сфере. Сам со своим примером Плана 9 попытался, но не взлетело. Но изучать хорошо забытые наработки старины, чтобы изобретать новое, не помешает.

Valeg ★★★ ()
Ответ на: комментарий от Valeg

А потом Роб Пайк сделал Go. В котором generic programming делается ОТДЕЛЬНОЙ СОФТИНОЙ, КОТОРАЯ ТЕБЕ КОД ГЕНЕРИТ.

kirk_johnson ★☆ ()
Ответ на: комментарий от kirk_johnson

Что не мешает Go постепенно становиться глобальным и надёжным.

Valeg ★★★ ()
Ответ на: комментарий от kirk_johnson

А почему нет? Разве это не даёт удобство написания промежуточных утилит ценой снижения скорости компиляции?

Типа сложный для парсинга генерик код -> простой код на го -> утилиты для анализа кода, либо прочие внешние генераторы кода -> кмпилятор.

next_time ★★★ ()

«Ну не может человек быть настолько сексуально неудовлетворен» (с)

imul ★★★★★ ()
Ответ на: комментарий от next_time

Почему нельзя было сделать это частью языка и перестать насиловать труп сишного препроцессора?

kirk_johnson ★☆ ()
Ответ на: комментарий от kirk_johnson

потому что это редкая в контексте Go задача?

вот мне, например, чаще нужны алгебраические типы (парсеры, бывает, приходится писать) чем генерики.

Joe_Bishop ()
Ответ на: комментарий от Joe_Bishop

в плюсах алгебраические типы шаблонами на раз реализуются

next_time ★★★ ()

И какой интересный и полезный софт имеется под Multics?

frigate_freedom ★★ ()
Ответ на: комментарий от next_time

в плюсах это как игрушка:

  • Компилятор не гарантирует на match-е проверки всех комбинаций, т.е. теряется типобезопасность. Таким образом и interface{} можно считать генериками ). А, ну да, матча тоже нет, т.е. нет, фактически того, ради чего это вообще стоило затевать.
  • Синтаксис настолько угрёбищен, что (учитывая предыдущий пункт) не остаётся практически никакого смысла в использовании балалайки
Joe_Bishop ()
Последнее исправление: Joe_Bishop (всего исправлений: 1)
Ответ на: комментарий от kirk_johnson

Не помню уже, когда в последний раз приходилось эти min с max-ом использовать. У нас обычно для задач такого рода был кликхаус. А на go сервачки всякие, запускалки, сборщики логов, разборщики данных и пр. Т.е. я это про то, что когда такая задача встречается раз в несколько месяцев, то претензия по поводу 5 строчек вместо 1 выглядит достаточно странно.

Joe_Bishop ()
Ответ на: комментарий от Joe_Bishop

Компилятор не гарантирует на match-е проверки всех комбинаци

Пример, пожалуйста. Если я правильно понял вашу мысль, вы неправы.

т.е. теряется типобезопасность

не теряется

Синтаксис угрёбищен

многословен, но благодаря этому выглядит универсально, позволяя некоторые фичи, которых нет в других ЯП, параметризацию значением, а не типом, например

next_time ★★★ ()
Ответ на: комментарий от Joe_Bishop

в плюсах это как игрушка

очень сильное заявление, учитывая что Boost и STL состоят почти целиком из шаблонов

next_time ★★★ ()
Ответ на: комментарий от Joe_Bishop

Не помню уже, когда в последний раз приходилось эти min с max-ом использовать.

сборщики логов, разборщики данных и пр.

типичная операция же для вашего случая

next_time ★★★ ()
Ответ на: комментарий от Joe_Bishop

Не помню уже, когда в последний раз приходилось эти min с max-ом использовать. У нас обычно для задач такого рода был кликхаус. А на go сервачки всякие, запускалки, сборщики логов, разборщики данных и пр.

И чо? Мне почти в любом сервачке на C рано или поздно требуются generic'и. С чего вдруг мне это не потребуется в Go?

kirk_johnson ★☆ ()
Ответ на: комментарий от next_time

условно так (покажу как бы это было на каскеле):

data Chunk =
  Option Chunk           |
  PassString String      |
  PassChar Char          |
  StartString String     |
  StartChar Char         |
  Take String String     |
  TakeRest               |
  TakeUntilOrRest String |
  PassFirst String;

-- и потом куча кейсов
case item of
  Option x => ...
  PassString pattern => ...
  PassChar char =>
  ....


канпелятор потом, пусть хоть с ключами но должен ругаться, если одна из ветвей не покрыта и при этом нет явного дефульта.
Joe_Bishop ()
Ответ на: комментарий от Joe_Bishop

switch по типу противоположен самой идее шаблонов

next_time ★★★ ()
Ответ на: комментарий от next_time

алгебраические типы сделаны для свитча, это их идея. это даёт гарантию на уровне системы типов того, что будут обработаны все возможные варианты.

Поэтому вариативные типы на шаблонах - игрушка, т.к. никакой задачи они не решают.

Joe_Bishop ()
Ответ на: комментарий от next_time

типичная операция же для вашего случая

до того типичная, что я прямо помню как мне где-то в январе или феврале пришлось находить минимум. А, да, был не такой явный случай где-то с месяц назад: пришлось находить значение, у которой один из аттрибутов был минимальным среди всех в массиве. Только здесь минимум как-то не особо был в помощь: скорее нужно было запоминать оба значения (аттрибута и искомого). В общем, типичная ситуация: задроты клепают всякие map и filter, ну а потом всё равно приходится итерироваться в цикле, т.к. нужно в процессе правильно рисовать ошибки и прочее. В итоге они выгадывают пару строчек (которые потом приходится удалять и писать по-нормальному) и носятся с этим как с писанной торбой.

Joe_Bishop ()
Ответ на: комментарий от Joe_Bishop

это даёт гарантию на уровне системы типов того, что будут обработаны все возможные варианты

а смысл? шаблон просто даёт гарантию, что любой тип вставленный в шаблон, работоспособен.

а где вы применяете ограниченный список типов для обработки? мне он ни разу не был нужен, разве что для фабрики объектов мог бы пригодиться, наверное

но вполне возможно, что штука годная

в принципе, такой список типов можно запилить, используя шаблон с переменным кол-вом аргументов, но довольно некрасивый код получится, да

next_time ★★★ ()
Ответ на: комментарий от Joe_Bishop

ну уж операцию min можно везде применять, хоть в map и filter, хоть в процессе итерации по циклу, хоть ещё где

next_time ★★★ ()
Ответ на: комментарий от next_time

повторяю, алгебраические типы данных сделаны для ветвления.

в обеспечении легко читаемого и воспринимаемого ветвления, подкреплённого на уровне компилятора, весь их смысл.

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

Joe_Bishop ()
Ответ на: комментарий от Joe_Bishop

повторяю, алгебраические типы данных сделаны для ветвления. в обеспечении легко читаемого и воспринимаемого ветвления, подкреплённого на уровне компилятора, весь их смысл.

это-то понятно, более того, такое же ветвление делается наследованием и виртуальными функциями, из-за чего, switch(case для выбора нужного типа вообще говоря считается моветоном в С++ и его потомках (жаба, шарп)

вопрос именно в сценарии применения алгебраических типов, что оно даёт сверх возможностей С++-стиль ООП (не включая, пускай, шаблоны)? Или, скорее, в чём идея применения?

плюсовый variadic тип

variant? не, он вообще про динамику

next_time ★★★ ()
Последнее исправление: next_time (всего исправлений: 2)
Ответ на: комментарий от Joe_Bishop

Ну вот, например, здесь чувак пытается применять немного похожий по своей идее тип variant:

https://www.youtube.com/watch?v=ojZbFIQSdl8 19:32

Но ведь в примере сразу очевиден идиотизм: вместо того, чтобы пихать вариант 3 типов, надо было просто пронаследовать структуры Idle, Chasing, Fighting от MonsterState и выделить виртуальные функции для обработки событий. А далее, всего лишь держать указатель на нужный стэйт.

Поэтому, тип variant на деле не нужен.

Но это variant, очевидно, алгебраические типы, будучи компил-тайм, предлагают более интересные сценарии использования, вот мне и интересно, какие?

next_time ★★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)