ermouth: (Default)
[personal profile] ermouth

Снимок экрана 2013-12-25 в 15.28.33Я недавно наткнулся на эмулятор Mac OS 7 в браузере. На javascript. Поигрался с любопытной игрушкой – и как-то не придал особого значения.

Именно с System 7 кста я в своё время пересел на Win95. Правда, это была 7.5, но не так уж они с 7.0 и отличаются.

Вообще, Win95 выиграла у Мака в моей картине мира всего по одной причине. В Вин95 была правая кнопка и всё, что с этим связано. На Маке не было ничего даже похожего тогда, штатная мышь была однокнопочной.

В эмуляторе выложен всякий софт того времени – Microsoft Word 4.0 и Excel 2, Aldus (ещё не Adobe) PageMaker 2 и тп. И этот софт прекрасно работает, примерно с той скоростью, как я помню. Я не сразу осознал значение этого – а оно имхо довольно интересное явление само по себе.

Снимок экрана 2013-12-25 в 15.26.28

Дело в том, что эмулятор полноценной графической ОС это уже куда менее игрушка, чем всякие там ZX-Spectrum и подобные. Под Макосью 7.6 работали Adobe Photoshop 4, Quark XPress 3.32 и Macromedia Freehand 5.5 – на этих продуктах держалось тогда процентов 90 западной издательской индустрии. Всей вообще. Ну, где-то Illustrator был вместо Freehand.

Интерфейс этих систем по нынешним меркам минималистичен, но вполне понятен. Просто за прошедшие 20 лет немного что придумано нового, находки восьмидесятых-девяностых просто раскрашены и обросли пузырями.

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

И ещё замечу, что весь комплект из Макоси, Ворда, Экселя и Пижамкера при передаче по сети “весит” 10Мб, передаётся в один javascript-файл и кэшируется на клиенте. По этому параметру современные веб-решения просто вообще далекоооо отстают.

Всё это вместе открывает очень любопытные перспективы поставки старых приложений бандлами. Единственные ограничение – localStorage браузера, но это пройдёт.

В общем, готов поспорить, что в 2014, макс в 2015 мы увидим полный порт Win95 на яваскрипте.

Date: 2013-12-25 09:18 pm (UTC)
From: [identity profile] service-picky.livejournal.com
"Всё это вместе открывает очень любопытные перспективы поставки старых приложений бандлами" - а практическое применение какое-то у этих игрушек есть?

Date: 2013-12-25 09:47 pm (UTC)
From: [identity profile] ermouth.livejournal.com
Ну, не думаю, что кто-нибудь будет всерьёз юзать кварк например под таким эмулятором. Плюс ко всему localStorage, если его делать хранилищем, диском, это пока мало совсем, в зависимости от браузера 10-50Мб на сайт, хотя это не единственный механизм.

Область применения видится немного иной. Есть очень много хорошего софта, написанного под самые разные архитектуры и ОС. Иногда уникального софта. Обработка данных там, экспертные системы и прочая и прочая. Многие из них могут обмениваться через текстовый буфер.

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

Связывание всяких таких компонентов внутри одной сессии браузера (или на сервере под node.js) как минимум даёт огромный буст в разработке. А объединение их в бандлы и прикручивание современного интерфейса и пошире возможности открывает.

Date: 2013-12-26 03:29 am (UTC)
From: [identity profile] archaicos.livejournal.com
Круто. И всего-то надо было допилить JavaScript. Хочу тоже кой-чего запускать в браузере. Может, сделаю как-нибудь.

Date: 2013-12-26 06:35 am (UTC)
From: [identity profile] ermouth.livejournal.com
его не надо даже допиливать было. первоначальная идея базировалась на стандартном js, 1996 года розлива.

это уже позже мозилла добавил инструкцию компилятору "use asm", только потому, что нативный компилятор мозиллы гораздо слабей V8 и ему требуется подсказка для выбора специального компилятора, оптимизированного только под asm.js. V8 и без директив сразу показывал великолепные результаты.

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

Date: 2013-12-27 11:39 am (UTC)
From: [identity profile] archaicos.livejournal.com
В том то и дело, что оптимизировали исполнение js. Раньше только flash или на сервере (если мощности позволяли) можно было что-то крутое делать. А теперь и в невзрачном на первый вид js'е. Удивительная история у js. Задизайнен был практически на коленке за короткое время.

Date: 2013-12-27 01:24 pm (UTC)
From: [identity profile] ermouth.livejournal.com
я немного дополню.

use asm – это не директива рантайму, это директива компилятору. она энфорсит статическую типизацию внутри контекста, больше она ничего существенного не делает.

можно и без неё. "подсказать" компилятору, какого типа будет переменная при рантайме, можно определённого типа конструктами в правой части. Скажем, объявление var bar = foo|0; и все присваивания внутри контекста вида bar=anything|0; в V8 фактически тоже энфорсят статическую типизацию.

фишка в том, что это происходит не сразу. в V8 два компилятора. причём они не независимы.

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

в файерфоксе примерно также, но там есть третий компилятор, который включается с помощью use asm. в V8 это просто не нужно, потому что после прохода второго компилятора код уже вполне себе оптимален.

-------------

Про историю. За javascript надо ещё msft сказать спасибо. Не клонируй они его в ИЕ до мелочей, js не выжил бы.

Date: 2013-12-27 09:03 pm (UTC)
From: [identity profile] archaicos.livejournal.com
Забавные подробности реализации.

Я тут было хотел сказать, что большее спасибо надо говорить goog, но потом вспомнил, что были люди, ушедшие из msft работать над v8 в goog, и засомневался в размерах спасиб. :)

Date: 2013-12-30 11:43 pm (UTC)
From: [identity profile] ermouth.livejournal.com
Ну и каэш в связи с нестрогой типизацией в какой-то момент код, сгенерённый вторым компилятором на основании runtime-guess о типе, может стать невалидным. И даже код первого компилятора. В этот момент происходит "разматывание" обратно до intermediate representation и перекомпиляция нужного куска.

Любопытно здесь то, что в V8 IR не байт-код, как в spidermonkey, а абстрактное синтаксическое дерево исходника. Ну то-есть практически сам исходный текст после минимального чернового разбора.

Ещё любопытно то, _как именно_ оптимизированный код определяет, что пора разматываться до IR. Это в большинстве случаев делается в одну инструкцию and процессора по маске в байт длиной. Я недавно в тви картинку постил про это https://twitter.com/ermouth/status/414737331166261249/photo/1

Date: 2014-01-26 04:06 pm (UTC)
From: [identity profile] ktototam-lj.livejournal.com
Дима, а тонкие клиенты у тебя в офисе есть?

Profile

ermouth: (Default)
ermouth

November 2021

S M T W T F S
 123456
78910111213
14151617181920
21 222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 8th, 2025 11:31 pm
Powered by Dreamwidth Studios