Pull to refresh

Comments 193

Сколько системные требования?
На какие устройства встанет?
Системные требования:
CPU: x86_64
RAM: > 128 MB

Но пока рекомендуется использовать эмуляторы (вроде QEMU), вместо установки на реальное устройство, так как ОС находится в разработке
Но зачем? Написали бы хоть какие цели у этого проекта.
Так-то, кросплатформенные JS приложения можно создавать/запускать и на существующих ОС
Смысл не в том, что приложения на JS, а в том, что сама ОС на JS (включая драйвера и прочее)
Про драйвера вроде как речь не идёт. Только про API и окружение
Идет. Есть драйвера PS/2, PCSpeaker, BGA, ATA, что-то под карты RealTek.
Интересно, при печати в 400 символов в минуту будет сильно заметно, что ввод тормозит? Надеюсь, какой-нибудь механизм отложенной обработки прерываний имеется и колбэк irq.on(...) вызывается не из обработчика прерываний?
Возможно, будет подтормаживать рендеринг…
JsOS состоит из двух частей (уровней):
Низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler. Используется для базовой загрузки и передачи управления на высокий уровень. Так же, ядро предоставляет API для работы с аппаратной частью.
Высокий уровень полностью написан на JavaScript и реализует работу операционной системы.

Вот тут написано что ядро и какой-то низкоуровневый API на C++ и ассемблере. А что тогда на js?
Утилизировать свободное время вестимо.
Ну этот проект больше похож на os-js.org.
Смысл JsOS в том, что это реальная операционная система, а не GUI в браузере
UFO just landed and posted this here
А кто-нибудь в курсе как там обстоят дела с многопоточностью? Насколько я знаю v8 жестко завязан на однопоточной модели то есть запускать отдельные инстансы, (isolates, или как они там называются) чтобы обеспечить параллельность для вебворкеров — пожалуйста, но вот настоящей многопоточности — а именно c доступ к разделяемой памяти c zero-copy v8 в принципе не поддерживает. Поэтому что если задействовать в итоге можно будет только одно ядро то мне кажется не было никакого смысла вообще начинать разработку JsOS
SharedArrayBuffer даже если и позволит шарить данные между процессами (кстати для этого нужна реализация процессов или точнее виртуальной адресации в JsOS) не позволяет работать с объектами. То есть это просто массив чисел. И вместо создания объектов и обновления их свойств, удаления в общем вместо работы с деревом или графом связанных объектов из разных потоков нужно будет все это реализовывать самостоятельно через массив чисел — собственные классы, объекты, наследование и главное собственный сборщик мусора и все это с диким оверхэдом. В итоге от js останется жалкое подобие Cи без указателей.
На сколько знаю я, пока проект однопоточный, но с какой-то хитрой системой управления этим самым протоком…
Но ничто не мешает в будущем сделать многопоточность
А процессор хоть в защищённый режим переводится?
И это делает код на уже JS или ещё низкоуровневый?
Довольно идиотский вопрос. Ни в одной известной мне ОС это не делается иначе, как на ассмеблере. Что в Linux, что в Windows, что в любой другой ОС.

Слишком сильно эта часть завязана на специфику конкретного процессора. Документация буквально говорит: сначала установите такой регистр, потом сякой, потом сделайте long jump… Как вы это на платформно-независимых языках собрались делать?
Так в том и суть вопроса была! Что ж сразу с козырей-то… %)
Это делает GRUB.
А вот в 64-битный режим уже переводит сама система
Простите, очень тяжело было удержаться.
Картинка, которую все ждали в комментариях

С вами бывает такое когда кто-то говорит глупость, а неудобно почему-то становится вам?

Глупость — это писать «операционную систему» на JS. В которой собственно главная часть ядра ОС — даже не на этом самом JS. Да-да, без hardware-dependent ассемблера никуда, но при наличии Си(плюсплюс)-прослойки оно не имеет права называться «ОС на JS».

P.S. Вот если б автор встроил JS с утилитами прямо в GRUB, и то было бы интереснее (я писал модули под GRUB2, он в принципе заслуживает право называться маленькой операционной системой).
Как не странно, эффект получился бы, примерно, тот же…
Просто интерпретатор имел бы немного другой вид…

UDP: И да, ядро ≠ ОС. Ядро — C++/Asm. ОС — JS.
А какое определение ОС вы используете? Согласно вики, ядро — центральная часть ОС. Следовательно называть это ОС на JS не совсем корректно.
UFO just landed and posted this here

Я понимаю, что это сугубо концептуальная и учебная работа, но все-таки в чем смысл, если «низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler»? В том, что на JS можно писать консольные приложения, никто и не сомневался.


Ну и взяли бы тогда уж Rust для ядра, хипстерить — так уж по полной:) да и какая-никакая гарантия от ряда ошибок, свойственных C++.

И вместо JS — wasm!

Потому что на вопрос «Можно-ли написать OS на JS?» по-настоящему правильный ответ — «нельзя» ;)

Можно, если его компилировать
Но это не тот случай.
«В том, что на JS можно писать консольные приложения, никто и не сомневался.»
Нет) Сама консоль, драйвера для видеокарты/мыши/клавиатуры и прочее написано на JS.
На низком уровне только загрузчик и сам V8
ИМХО пустая трата времени и баловство. Если есть свободное время то лучше потренироваться с Go или Nim. Какой смысл писать ОС на Яве, а Сапёр-на ассемблере? Посадите тогда уже несколько деревьев если заняться больше нечем. Пользы больше будет.
потренироваться с Go
Зачем тренироваться с Гоу?

на Яве
Зачем путать Java и JS?

Посадите тогда
Зачем указывать людям, как им баловаться?
Это у Вас юношеский максимализм, скоро пройдёт.
О! Аппеляция к возрасту, сразу виден ваш интеллектуальный уровень.
Мне 28, батенька. Я уже минимум 5 лет как не юноша.
А максимализм — у вас. Люди должны делать только то, что вы считаете правильным. JS — это плохо, а Go — хорошо, просто потому что вам нравится Go. Это и есть максимализм.
Дело не в возрасте, а в интеллектуально-нравственном развитии. Можно и в 50 быть мальчиком и играть в машинки, только большие.
Я не говорил что мне нравится Go, это ваши детские выдумки. Мне нравится Pascal. Дело в том что с точки зрения элементарной логики такие критические по времени/производительности приложения как элементы ОС нет смысла писать на интерпретируемых и даже прекомпилируемых языках. Это называется рациональное мышление.
Вы так говорите «играть в машинки» как будто это что-то плохое.
Это не я говорю, специалисты так считают.
Цитата из википедии:
Инфантилизм (от лат. infantilis — детский) — незрелость в развитии, сохранение в поведении или физическом облике черт, присущих предшествующим возрастным этапам.

Термин употребляется как в отношении физиологических, так и психических явлений.

В переносном смысле инфантилизм (как детскость) — проявление наивного подхода в быту, в политике и т. д., также неумение принимать своевременно продуманные решения.


Но бывает и хуже. Есть ещё в России мальчики, которы носят погоны и не наигрались в солдатики. А чьи-то матери получают похоронки. Так хорошо это или плохо, как считаете?
Есть ещё в России мальчики, которы носят погоны и не наигрались в солдатики.
Если бы только в России.

А чьи-то матери получают похоронки. Так хорошо это или плохо, как считаете?
Это вопрос очень философский. Если бы была возможность сделать так, чтобы «не наигравшиеся в солдатики» мальчики из других стран перестали делать то, что они делают — то всем было бы гораздо лучше.

Но поскольку это невозможно, то, разумеется, лучше оправить мальчиков, желающих «играть в солдатики» куда-нибудь в другую страну, тогда можно уменьшить общее количество похоронок…
у мужчин детство сложное только первые 40 лет =)
у мужчин детство сложное только первые 40 лет =)

Уверяю, дальше не становиться легче. Игрушек, с которыми хочется поиграть, все больше, а времени — все меньше )
мужчины — это чудом выжившие мальчики…
>> Мне нравится Pascal
А дальше можно и не читать.
Можно и в 50 быть мальчиком и играть в машинки, только большие.

Вы про те, которые в афганистане или сирии?

Лучше играться в jsOS, а еще лучше не указывать людям, которые живут не за ваш счет, как им жить и развлекаться.
Простите конечно, но какое вам дело до времени разработчика, а уж тем более до практической пользы его труда?
Да просто печально смотреть как люди впустую тратят время. А жизнь коротка.
Ну так не тратьте вашу, а другим не мешайте тратить ее как им хочется, другие люди вам не принадлежат и к вам отношения не имеют.
Я и не трачу. И вам не советую.
Да вообще. Некоторые комментарии на хабре пишут, вместо того, чтобы деревья сажать. Ужас просто.
Так посади уже дерево — это намного полезнее чем печально смотреть.
ДА просто печально смотреть как люди впустую тратят время на комментарии на хабре, о экономии времени. А жизнь коротка.
Если работа над проектом приносит удовольствие (а также дополнительные знания и опыт), это нельзя считать тратой «впустую». Или вы из тех, кто считает напрасной тратой времени все что не приносит денег?
Есть более краткое выражение: «лучше бы водку пили».
А как же жизненный опыт? Да коротка жизнь, но если данный проект даст новый опыт, который в будущем автор сможет применить в других проектах, может оказаться бесценным

В первую очередь хотелось бы сказать ловите наркомана
А во-вторую: если это пустит JS разработчиков в embeded сегмент — то очень даже клёво. Разумеется это будет совершенно не так производительно как аналоги, но она далеко не везде нужна.

Их туда уже пустили. Есть espruino, есть даже его реализация от амперки. Или я не правильно понял embeded?

UFO just landed and posted this here

Нормально, производители железа как раз ждут более прожорливый софт.

Производители железа под текущий софт не успевают.


Раньше под задачу "кино, офис, пасьянс, интернет" подходил любой купленный компьютер. Дорогой неигровой компьютер отличался от дешёвого неигрового только количественно: монитор пошире, жёсткий диск побольше, корпус покрасивше, побольше клавиш на клавиатуре.


Сейчас же если купить системный блок или ноут из нижнего сегмента, то на них уже сразу после покупки сайты тормозят. Недавно Гугл отключил возможность переключиться на старый интерфейс Ютуба, пришлось на нетбуке перейти на левый десктопный клиент, потому что пользоваться сайтом стало невозможно.

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

Но Ютуб ведь в Линуксе такой же, и JS в нём тот же самый.

Я не знаю, что там, я просто говорю, что у нее все работает прекрасно
Пользуясь случаем, хочу помочь братьям-ретроградам — старые браузеры гугл часто сам перенаправляет на старый фейс, а новые можно заставить, дописывая к концу урлов ключ вида /videos?disable_polymer=1

Ещё хуже. Пробовал через плагины Enhancer for YouTube и Tampermonkey дописывать disable_polymer=1 автоматически. Сначала пытается открыться тормозная страничка, некоторое время тормозит, потом происходит перекидывание на менее тормозную страничку с disable_polymer=1. Щёлкаешь по какое-нибудь ссылке, и опять открывается тормозная страничка, потом вместо неё менее тормозная.


Плюнул, поставил десктопный клиент. Просто летает.


Блин, на этом ноуте можно играть в Factorio, которой ничего не надо, кроме процессора. Неделю напролёт отстраивать базу и она отлично играется, ничего не тормозит и не лагает. А огромная межгалактическая корпорация не может родить нормальный интерфейс к своему сайту. С каждой итерацией получается всё хуже.

Я через Redirector сделал. Обычно только раз пытается открыть, потом помнит, вроде.
Что за десктопный клиент?

То помнит, то не помнит, я не понял принцип. Клиент Perfect Tube из магазина Windows 10. Он вовсе не "perfect", но просто нормальный. Не пожалел 69 рублей.

Низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler. Используется для базовой загрузки и передачи управления на высокий уровень. Так же, ядро предоставляет API для работы с аппаратной частью.

Глядя на заголовок, надеялся на больший уровень упоротости. Но нет, всё более ожидаемо.
Просто хипстеры еще не достигли самого дна. Где их, гаденько хихикая, поджидает Фабрис Беллар. :3
Как вы думаете, можно ли создать полноценную операционную систему на языке программирования JavaScript, с которой можно загружаться?

Правильный ответ — можно! Если вместо JS использовать С++ и ассемблер.

Ожидал, что будет хотя бы о компиляторе, который позволил собрать из JS кода загрузчик.
А так — с таким же успехом можно сказать что NodeMCU — это ОС на Lua.
«Ожидал, что будет хотя бы о компиляторе, который позволил собрать из JS кода загрузчик.»
Это — следующий шаг)
Интересно, а какие врожденные недостатки С и ассемблера возможно исправить, переписав/написав с нуля операционную систему на одном из более современных языков? Или десятилетия разработки и новые компиляторы довели ядра основных ОС до идеала?
Как Вы собираетесь получить доступ к низкоуровневым возможностям железа получить доступ? Тот же планировщик задач, обработку аппаратных исключений/прерываний и т.п. без всего этого никак не выйдет.
В любом случае это код на Си и какой-то мост в JS. Собственно, я и пытаюсь из статьи и комментариев понять, где проходит граница между низкоуровневым языком, где проходят границы, где какой API. В статье же нету никаких схем, которые дали бы об этом представление, да и вообще значимых технических деталей не густо.
Посмотрел описание, посмеялся. Спасибо. Очень полезная инфа.
  • debug — Предназначение неизвестно.
  • takeHeapSnapshot — Снимает снимок кучи V8, но зачем?
  • systemInfo — Зачем?
Это осталось в наследство от runtime.js
Интересно, а какие врожденные недостатки С и ассемблера возможно исправить, переписав/написав с нуля операционную систему на одном из более современных языков

Такие ошибки, как переполнение стека, там будут невозможны (в предположении, что у V8 их нет), например.
Но вообще мне не кажется, что основной смысл именно в исправлении недостатков C / Asm.
Хорошо: в v8 нет массштабирования по ядрам процессора, как предлагаете исправлять? В синтаксисе нет поддержки конкурентного доступа к данным, локи, мютексы, и прочие примитивы, вы уже озвучили свои предложения по дополнению синтаксиса?
Ну, а если честно, на мой взгляд, писать ОС на JS, все равно что от дождя прикрываться ладошкой, как ни старайся, лучший выход — бросить эту идею и бежать до ближайшего укрытия.
Потому что это интересно.
посмотреть с папке
в тексте поправьте :)
Когда делали JavaOS то хотя бы причины были очевидны.

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

Ээ, Вы там не из 2005 пишете, случаем?

Классный проект, спасибо за статью. Пишите о том, как двигается разработка, хотя бы раз в месяц =)
Если проект заинтересовал — можете наблюдать за GitHub репозиторием ;)
Стоит присмотреться к данному проекту повнимательней…

Тема с JavaScript OS крутая, но как же я ожидал что терминальный доступ придумают сделать в нотации JavaScript, а не в какой-то другой, например самостоятельно придуманной. Идеально — полноценный JavaScript shell. То есть, например, не start screenfetch, а start.screenfetch().

Ну тогда уже app.start("screenfetch") =)
На самом деле, тут 2 выхода:


  1. Использовать кастомный шелл
  2. Использовать eval режим (#$$.stdio.defaultStdio.writeLine("Hello world"))

В моём опыте не было таких, кто использовал кастомные шеллы на юниксе просто потому, что кому-то не нравится синтаксис шелловского языка для написания скриптов. Все мирились и использовали shell script. Точно так же будет и тут, если тема JsOS зайдёт, большинство смирится и будет использовать то, что успешно работает "из коробки".


Но коли скрипты здесь можно писать, используя "eval-режим", проблема псевдо-языков для скриптинга вроде пропадает. Но опять таки, почему бы с самого начала полёта не убрать непривычный для JS синтаксис в шелле типа (#/*JS code*/), если эта ОС стремится быть такой JavaScript (стремится же?). То есть сделать шелл в точности таким, каким мы его видим в NodeJS или Developer Tools.

Тут shell нужно воспринимать не как язык программирования, а как командную строку (like DOS)
а как командную строку (like DOS)

На нём тоже батнички писали.
Стоит ли ожидать появления в будщем огромного кол-ва ОС на JS как в случае с JS фрэймворками?
Сомневаюсь, если считать, что runtime.js появился в 2014 году и уже в 2017 прекратил своё развитие.
Да и сам процесс разработки невероятно сложен…
Как вы думаете, можно ли создать полноценную операционную систему на языке программирования JavaScript, с которой можно загружаться?
Правильный ответ — можно!

Низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler.\

Оукей.

А еще интерпретатор js написан на c/c++ :)
По сути тут «CLI на js»
Как ни странно, интерпретируемый язык требует интерпретатор для своего выполнения :)
В данном случае интерпретатор, написанный на C++, и есть «ОС», вы же написали CLI на js, не более ;)
Интересно, как бы интерпретатор работал без самого js кода? (в контексте работы ОС)
По этой логике, если я напишу на ZX-Spectrum Basic свое CLI, то смогу уверять что написал ОС на ZX-Spectrum Basic.
Хочу задать тебе один вопрос: ты ОС-то запускал?
Хочу задать Вам один вопрос: Вы ОС-то запускали?
Если у вас там будут свои программы, которые можно будет загружать — то да, можно… а может и нельзя… никто не знает точно.

Собственно вопрос «что такое ОС» — он ни разу не прост. Почему, к примеру, Windows 10 — это ОС, а MS Word — это не ОС? И то и другое позволяет программы запускать (в случае с MS Word'ом — на VBA).

Потому что MS Word требует другой OS для запуска? Но если потребовать, чтобы OS обязательно запускалась бещ другой OS, то у нас и GEOS и Netware перестанут быть операционками! Первая стартует из BASIC'а, вторая — из DOS.

Ладно, пусть у нас OS — это что-то, что хотя и загружается из другой OS, но после этого выгражающая эту самую OS и не использующая её… годится? Снова нет: мало того, что у нас все современные OS окажутся «не-ОС» (так как EFI предоставляет определённые процедуры, которые все современные ОС используют в своей работе). Так ещё и Windows95 станет «ОС» или «не-ОС» в зависимости от настроек! Так как по умолчанию она после загрузки полностью выгружает MS-DOS, однако если вы используете нестандартный диск со своим драйвером — то оставляет её и использует!

И это всё — только при попытке классифицировать «большие», «настоящие» ОС с миллионами пользователей. Если же вспомнить про всякую разную экзотику — то там всё будет ещё запутанней…
Небольшая неточность — серверы Netware были afair вполне standalone OS. И DOS не требовали. DOS — это клиентская часть вроде.
Небольшая неточность — серверы Netware были afair вполне standalone OS.
Более или менее.

И DOS не требовали.
Ну да, конечно. А как вы иначе SERVER.EXE загрузите? Я с поздними версиями не общался, но версии 3.x точно стартовали из DOS — и никак иначе.

DOS — это клиентская часть вроде.
Клиентская часть там много под что, я про серверную.
Там еще с тегов все было понятно:
Смысл не в том, что приложения на JS, а в том, что сама ОС на JS (включая драйвера и прочее)

Node.JS

ну ок
на ЯП у которого с наследованием даже так себе (не учитывая волшебную типизацию и асинхронное велосипедирование) пытаться ОС писать… nocomment
Можно подумать у ассемблера и си с наследованием хоть как-то.

лол, наследование и системное программирование, в чем связь?
И низкий уровень написан на С++/асм, а js фигачит всё остальное через апи.

подобное, к сожаление, хорошо иллюстрирует положение развития методов разработки современного ПО, не 1 в 1, но очень много параллелей =)
Когда-то была шутка:
У Майкрософт спрашивают: «Можете написать виндоуз на бэйсике?»,
а они отвечают: «Ну пишем же».

Да ладно вам, в коде драйвера делать запись в порт через промисы – это же бесценно.
Запись в порт происходит синхронно…
… таким образом, мы создали ОС на языке <ВСТАВЬТЕ ЧТО ХОТИТЕ>, схема:
1. низкоуровневый слой c,asm
2. апи-коннектор для низкого уровня
3. работа с апи на языке <ВСТАВЬТЕ ЧТО ХОТИТЕ>
4. охапка дров и ОС готов =)
Хотелось бы узнать (помахивая томиком Танненбаума), что Вы подразумеваете под интерпретацией…
Процесс считывания инструкций с файла и выполнения их от своего имени
Современные процессоры x86 транслируют машинные инструкции в микрокод, и выполняют уже микрокод. Машинные инструкции — это интерпретация или выполнение?
Это интерпретация…
Но я думал, мы говорим про языки программирования, а не про особенности их выполнения на конкретных процессорах.
Ещё раз помашу томиком Танненбаума, в котором очень хорошо описана интерпретация и исполнение. «Архитектура компьютера» книга зовётся чуть что. И там одна из основных идей в том, что граница между ними, во-первых, нечёткая, а во-вторых, плавает в процессе эволюции компонентной базы.
В принципе возможна аппаратура, напрямую выполняющая байткод JVM, к примеру, и с равным успехом возможна аппаратура, которая интерпретирует машинный код другой, не родной платформы.

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

Но мост, как оказалось, не к аппаратуре, а к стороннему движку JS, а низкоуровневые сервисы написаны живут не поверх, а рядом с этим движком. То есть утверждение, что на JS операционка, в корне неверно. На JS клиентский рантайм.
В общем, заголовок статьи совершенно не соответствует действительности, о чём я уже писал выше.
Ещё раз прошу нарисовать схему со слоями и взаимодействием для полноты картины.
Вон у них вроде fat32 драйвер на js. Если из бинарных апи они используют чтение байтов, а работу с файлами реализовали сами, то я вполне готов считать это всё ОС на js. Другими словами, в вашем пункте 3 вставить что хочется не так просто, надо еще дофигище кода написать сначала.
Какова связь между языком разработки самой ОС, и разработкой прикладных процессов? Если следовать вашей логике, то разрабы на Go должны переходить на ОС, написанную на этом языке.
Если я решил разрабатывать, например, на Си, то я должен портировать gcc на js, чтобы им пользоваться?
Это первое, что пришло в голову, не заглядывая в исходники.

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

Вот этой вашей фразы я вообще не понял. Многообразие яыков — это неизбежное зло потому что это необходимое условие для успеха вашей ОС… где противоречие?

Поддержка множества языков не является необходимым условием существования или успеха ОС. В процессе эволюции системы стали достаточно универсальными и научились запускать все подряд (некоторые разработчики стали полагать, что это обязательное требование к ОС, что есть заблуждение). При этом сегодня есть узкоспециализированные ОС для IoT, Web и мобильных платформ. Как вы знаете, некоторые из этих систем поддерживают ограниченный набор языков и при этом являются лидерами отрасли.

При этом сегодня есть узкоспециализированные ОС для IoT, Web и мобильных платформ.
Это о каких ОС идёт речь? Насколько я знаю все ОС делятся на два класса:
1. ОС, которые не предназначены для запуска программ, написанных сторонними разработчиками (услнов говоря «ОС для кофемолок»). Тут да — могут быть любые ограничения.
2. ОС, предназначенные для запуска программ, написанных сторонними разработчиками. Тут некоторое время так же могу существовать ОС, которые не позволяют исполнять программы в машинных кодах. Но это кончается либо уходом операционки с рынка (пример: Blackberry), либо добавлением такой возможности (примеры: Android, ChromeOS). Ну или сочетанием двух этих вариантов (пример: Windows Phone).

Если у вас есть пример операционки, где приложения не поставляются только производителем железки и при этом не умеющие запускать «всё подряд» — то было бы интересно на такое чудо посмотреть…

Если рассматривать вторых, то QNX (купленная Blackberry) до сих пор жива и используется в нише отказоустойчивых ОС. Тот же Android вполне успешно существует в рамках JVM и добавление в него поддержки запуска машинного кода вовсе не следствие его неполноценности.

Если рассматривать вторых, то QNX (купленная Blackberry) до сих пор жива и используется в нише отказоустойчивых ОС.
Где конкретно? Во всех местах, про которые я знаю и которые предполагают установку приложений «не от производителя» поддерживается нативный машинный код и POSIX.

Тот же Android вполне успешно существует в рамках JVM и добавление в него поддержки запуска машинного кода вовсе не следствие его неполноценности.
Как человек, общавшийся с разработчиками оного творения я могу вас уверить: запуск машинного кода был частью дизайна с самого первого дня. Именно отсюда — Binder в ядре для IPC (вместо какого-нибудь Java-протокола), отсюда — права доступа на основе UID'ов (а не встроенные в Dalvik/Art) и прочее, прочее, прочее.
...gcc на js...
А месье знает толк в извращениях. :)
Ну, я вообще то был максимально саркастичен.
Хотя сама идея компилера написанного на js не выглядит сильно уж невозможной. Исходники — это текст, результаты разбора — структуры в памяти, это в js есть, трансляция ast в js скорее всего возможна, хуже всего с двоичными данными, если вдруг потребуется записать бинарь, я сходу ни чего похожего припомнить не смог.

да давно уже с llvm сбиндили, компиляй — не хочу. llvm-node

Я имел ввиду сам факт компиляции с низкоуровневого Си на высокоуровневый js

Ну зачем же сразу GCC-то портировать? Можно Emscripten обойтись. Хуже с бинарными модулями. Не знаю насколько просто wine под эту странную операционку будет портировать…
Как вы думаете, можно ли создать полноценную операционную систему на языке программирования JavaScript, с которой можно загружаться?

Нет.
Правильный ответ — можно!

Нельзя, потому что
Низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler.


А этот вот извр велоси программный код — он зачем? Какое есть хотя бы теоретическое применение, кроме экспериментов?
полноценную операционную систему на языке программирования JavaScript, с которой можно загружаться

Потому что существует куча операционных систем, работающих в браузере

И вы эти поделия всерьёз называете хотя бы операционными средами (даже не системами)?
Тут Вы правы… Но разработчики этих графических окружений называют свои творения «операционными системами», так что тот текст был призван отделить реальную ОС от браузерных рабочих столов
Был у меня один знакомый, который еще в далеком 1990-м году на Turbo С++ 2.0 писал интерпретатор языка Форт (Forth) под MS-DOS 3.30. Занимался он этим всё свободное и не свободное от работы сисадмином в «аквариуме» МГТУ им. Баумана. Когда я его спросил, зачем он он пишет интерпретатор Форта, от ответил: «Я потом на Форте хочу написать ЭКСПЕРТНУЮ СИСТЕМУ!»
Следует уточнить: писал он это всё на и для IBM-PC/AT, 80286 процессор, 1МБ оперативки и хард на 40 метров.

А вы тут про ось на джаваскрит :)

Ссылки:
Язык Форт
Turbo C++
В те годы экспертные системы были модными. Как нейронки и прочие AI сейчас. Много было модных направлений за историю человечества, и ничего…
Серебряная пуля пролетела мимо тогда, внимательно смотрим за траекторией сейчас.
А почему бы на Форте не написать экспертную систему? А разработка интерпретатора Форт — это, как я понял, популярное развлечение среди тех, кто знаком с форт-системами.
>А почему бы на Форте не написать экспертную систему?
потому что пролог и градиентный спуск больше подходят под концепцию экспертной системы чем тупая стек машина? И кстати непонятно что он там писал все свободное и несвободное время — форт нормальный программист за пару вечеров раскатает.
Пару вечеров это вы загнули. Я когда-то давно писал, так примерно месяц ушел. Плюс у него ещё и отягощающее обстоятельство: C. Это серьёзно усложняет процесс.

Хотя всё равно, конечно, странно.
Да, не увидел что на С. Когда писал — думал про плюсы. На плюсах за один вечер вытащил стек интерпретатор из исходников битка, отвязал его от глобальных зависимостей, прикрутил кое что свое и то что на выходе получилось было вполне сопоставимо в форт интерпретатором. При том что опыта на плюсах у меня было пара десятков часов. То есть только синтаксис и std, никаких сторонних либ и бест практикс, только хардкор и велосипеды.
Ну три команды форта можно и за один вечер сделать, в это я верю. Но полноценный FORTH-83 включает в себя довольно много вещей: ввод-вывод всякий, работу с диском и прочее.
Второй символ в нижнем регистре вместо верхнего.
Да, настораживает когда ошибка уже сразу в названии. Но если исправить, то получится не лучше — JSOS.
Я так и не понял, где допущена ошибка :/
Ошибка допущена не у вас, а у разработчиков проекта. Второй символ в нижнем регистре вместо верхнего.
Это не ошибка, это стиль. Обычно в адекватных стилях программирования аббревиатуры пишутся как слова — первая буква большая, а остальные — маленькие, Ведь XmlHttpRequest читается значительно лучше, чем XMLHTTPRequest.
Тогда всё равно ошибка, в случае camel-case должно быть JsOs. Стиль, основанный на ошибке, как-то прям совсем расстраивает.

Думал, может, какая-то особенная предыстория есть у именно такого необычного названия.
Согласен. Но это ведь название. Как автору нравится — так и называет. К примеру, Konqueror
Да, автор имеет полное право называть как угодно, часто даже умышленно ошибку допускают. Поэтому и возник вопрос «почему ошибка?», т. е. это могла быть отсылка к чему-то, но я не понял к чему.

JsOs было бы, если бы Operating System было бы одним словом :)

JavaScript — не совсем одно слово, а два склеенных, написанных в стиле camel-case. И официальная аббревиатура у JavaScript — это JS — именно обе заглавные.
JavaScript (/ˈdʒɑːvɑːˌskrɪpt/; аббр. JS /ˈdʒeɪ.ɛs./)
Ведь XmlHttpRequest читается значительно лучше, чем XMLHTTPRequest.

С этим многие могут поспорить )
Раньше писал только на Java и на самом деле каждый раз внутренне страдал когда писал HttpRequest, но осознал это только после того как попробовал Python где принято писать HTTPRequest — сразу отлегло :)
Тогда в underscore нужно писать `h_t_t_p_request`?

пс. меня вообще… смущает, когда люди пишут ID как две больших буквы, хотя, по сути, это просто сокращение слова identifier
Нет, ID — это сокращение от «identity document» которое в свою очередь часто сокращают до «identity».
Ну если это документ, а не цифровой индекс, то да.
А я говорю именно про такие глупости, как `ID: number`, а именно таких использований — большинство. Как в MooTools String.uniqueID. Это именно сокращение от identifier, а не i. document
В underscore будет http_request — всё по правилам, т. к. аббревиатура приводится к нижнему регистру и не разделяется подчёркиваниями.

А вот с value1 или value_1 вопрос открытый.
Можно вопрос, а как с таким непоследовательным подходом делать методы а-ля hyphenate?

А что именно кажется непоследовательным?

Я считаю, что должны быть легкие правила перевода underscore/hyphenate в camelCase и обратно. Пример такой функции (и того, что она правда необходимо) — трансформация названий свойств между css и javascript. Сможете написать функцию, которая корректно переформатирует XMLHTTPRequest в xml_http_request без словаря?
Теперь понятно. Да, такую функцию написать не получится.

Как не странно, а этой аббревиатуре зашифровано 3 слова…
Javascript, Operating и System…
JOS звучит не совсем понятно, по этому, было выбрано название JsOS
(Та же ситуация и с JsMB (Javascript Mobile Basic))
Хотя, так же, правильным было бы название JSOS (JavaScript => JS), но такая ОС уже есть.
Так что, это просто дело случая.

JavaScript обычно сокращается как JS, а не Js.
Sign up to leave a comment.

Articles