Ответ Javе и Flash'у [тема для программеров]

Any topics and questions
User avatar
NightRadio
Site Admin
Posts: 3152
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Ответ Javе и Flash'у [тема для программеров]

Post by NightRadio » Thu Sep 11, 2008 3:59 pm

Всем привет!

Есть проблема. Накопилось со временем некоторое разочарование в таких вещах, как Java, Flash (и, возможно, еще .NET). Что именно не нравится: чрезмерная навороченность, периодическая глюкавость, периодические тормоза, требовательность к ресурсам, неполная открытость.
Что предлагаю: кроссплатформенная виртуальная машина. Со своим байт-кодом, компиляторами и т.д. Полностью открытая. В основе принцип минимализма - машина очень мелкая, набор операций байт-кода небольшой, но эффективный. Байт-код без привязки к конкретному языку, чтобы можно было делать компиляторы Си, Си++, Java, Pixilang. Возможностей у машины самый минимум: математика, память, клавиатура, мышь, файлы, звук, сеть, графика, какие-то мультимедийные команды (типа MMX). Но именно этих возможностей хватит, чтобы решить любую задачу. При запуске машины по всей видимости будет какая-то примитивная ОС (хотелось бы с намеком на UNIX).
Сейчас решается самый важный вопрос - структура виртуальной машины и байт-кода (какие команды, регистры и т.д.). Хотелось бы услышать ваши предложения на этот счет.
Если кто-то готов серьезно подключиться к разработке - пишите здесь, или мне на мыло nightradio@gmail.com.

Zuf
Posts: 110
Joined: Fri Dec 21, 2007 7:30 pm
Location: Msc
Contact:

Re: Ответ Javе и Flash'у [тема для программеров]

Post by Zuf » Thu Sep 11, 2008 5:08 pm

0. Если бы это предложил не NightRadio я бы спросил: "А вы точно осилите?" =)
1. Про команды сразу бы хотелось floating point. Так же думаю не стоит ограничиваться архаичными MMX для мультимедии. А еще в современном компе обычно есть очень мощный вычислитель - графическая карта...
2. Про кроссплатформенность что имелось в виду? Мобильные платформы планируются к поддержке? Думаю будущее за всякими "супер-мобильниками" с выходом в интернет. А вообще кросплатформенность очень сильно упирается в "зоопарк устройств" и всякой переферии.
3. Поясни про ОС, не очень понял. На виртуальной машине будет еще и виртуальная ОС?

PS Вообще, конечно, тема интересная. Но мне кажется поставленная цель почти недостижима, или я просто не могу понять как может быть виртуальная машина быстрой =) А вообще меня тоже не устраивает скорость и удобство явы и флеша и т.п. Но есть ряд идей, которые я бы хотел реализовать на чем то подобном. В том числе и для применения в web...

goglus
Posts: 122
Joined: Tue Dec 04, 2007 4:19 pm
Contact:

Re: Ответ Javе и Flash'у [тема для программеров]

Post by goglus » Thu Sep 11, 2008 5:28 pm

ну нужно именно с целями определиться и с задачами

есть ли у вас план мистер фикс - был но весь искурился

User avatar
NightRadio
Site Admin
Posts: 3152
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: Ответ Javе и Flash'у [тема для программеров]

Post by NightRadio » Thu Sep 11, 2008 10:44 pm

Согласен, что нужно четко определить все цели. Но именно для этого я и написал такой пост :) Чтобы совместно выстроить проработанный план действий.

0. =)
1. floating point в обязательных планах - без этого на серьезность претендовать сложно.
На счет MMX - вот это открытый вопрос... Я предлагаю не добавлять в виртуальную машину всяческие аудио/видео кодеки так, как это делает Flash, а просто реализовывать такие фичи обычным способом, как в любой операционке - при помощи опционально-подключаемых библиотечек. А библиотечки эти будут представлять собой бинарники на нашем же ассемблере виртуальной машины. И вот тут может возникнуть проблема нехватки скорости. Но у всех мультимедийных задач как правило есть одинаковые куски кода, которые особенно напрягают процессор - всяческие FFT, матричные умножения и т.д... Вот такие операции я и хочу выделить в отдельный блок команд MMX. Только точных список операций я пока не определил.
На счет ускорителя - есть мысль вообще по умолчанию приделать небольшой кусочек OpenGL (хардварный и софтово-эмулируемый, если нужно) и дальше всю графику выводить через этот интерфейс.
2. Кроссплатформенность: это и настольные системы и наладонники и совсем микро-версия для микро-контроллеров. Зоопарк устройств - лишь вопрос времени. Главное начать и подключить народ.
3. Да. На виртуальной машине предпологается ОС. То есть, машина изначально не будет пустой, в ней будет какой-то наборчик библиотечек простых, unix-подобное древо файлов. Вот и получается небольшая ОС.

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

Итак.. Попробую еще разок все проструктурировать..
Цель: виртуальная машина (наподобие Java или Flash) для выполнения в первую очередь задач, связанных с графикой и звуком, на любой платформе или в браузере (интеграция в Web).
Какие приемущества по сравнению с аналогами:
* минималистичный код виртуальной машины с простым байт-кодом;
* отсутствие привязки к конкретному языку программирования высокого уровня;
* внутри виртульной машины простейшая ОС, напоминающая среду UNIX: дерево файлов, как в *nix; стандартные функции, знакомые "юниксоидам";
* полная открытость кода (скорее всего GNU GPL);
* ну и просто особая атмосфера для пользователей и разработчиков, не похожая на аналоги; фирменный стиль и качество, так сказать :)

Почему ставлю на первое место мультимедийные задачи? Да потому что, при интеграции с Web это очень важно: апплеты мелкие, баннеры, демки, видео, звук. Сейчас все идет в этом направлении. Причем, подобные апплеты часто не очень сложные, и на странице их может быть с десяток, и при этом они не должны отжирать все ресурсы компа :)

Zuf
Posts: 110
Joined: Fri Dec 21, 2007 7:30 pm
Location: Msc
Contact:

Re: Ответ Javе и Flash'у [тема для программеров]

Post by Zuf » Fri Sep 12, 2008 12:45 am

Про MMX. Я хотел сказать что лучше поддерживать более продвинутые наборы комманд. SSE есть сейчас в любом актуальном настольном компьютере. SSE2-3 тоже уже не редкость совсем. В последних процессорах и более новые наборы комманд есть, причем достаточно высокоуровневые (например подсчет CRC32 см http://ru.wikipedia.org/wiki/SSE4). Тем более пока развиваться машина будет эти наборы начнут устаревать уже, появятся новые...

Про ОС. Не очень понятно какую задачу призвана решать встроенная ОС. Наша вирутальная машина будет работать в многозадачной ОС. Каждый апплет/программка может работать в отдельном процессе основной ОС (хоста, Linux к примеру). Думаю это избавит от лишней сложности с созданием микро-ОС, всяких проблем с безопасностью (программы, запущенные в разных машинах не знают друг о друге). Другое дело, что нужен какойто продвинутый загрузчик с какой-то подсистемой ввода/выводв (типа BIOS). Конечно будет немного больший расход памяти в схеме "одна программа - одна машина - один процесс внешней ОС", зато так проще. Хотя может я чего не понимаю, прошу разъяснить ;)

User avatar
NightRadio
Site Admin
Posts: 3152
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: Ответ Javе и Flash'у [тема для программеров]

Post by NightRadio » Fri Sep 12, 2008 7:08 am

Ну на самом деле я не имел в виду те самые MMX-инструкции из процессора Пентиум. Это я просто так обобщил некоторый набор - MultiMedia Xtensions. В нем могут быть и те самые MMX и SSE и SSE-2,3. Мне кажется, определенные алгоритмы со временем не устаревают... Ну желательно бы конечно в будущее сразу заглянуть. Вот это первый важный вопрос, который надо решить.

Про ОС. Ну видимо этот самый загрузчик я и называю микро-ОС :)
Похоже, появляется два варианта работы виртуальной машины:
1) Одна машина. Каждая прога (апплет) работает в рамках этой машины. Несколько прог могут видеть друг дружку и общаться.
2) Каждая прога - отдельная машина.
Надо подумать..

Zuf
Posts: 110
Joined: Fri Dec 21, 2007 7:30 pm
Location: Msc
Contact:

Re: Ответ Javе и Flash'у [тема для программеров]

Post by Zuf » Fri Sep 12, 2008 12:19 pm

Ну с MultiMedia Xtensions теперь все ясно, я тоже самое хотел сказать )
NightRadio wrote:Похоже, появляется два варианта работы виртуальной машины:
1) Одна машина. Каждая прога (апплет) работает в рамках этой машины. Несколько прог могут видеть друг дружку и общаться.
2) Каждая прога - отдельная машина.
Я голосую за второй вариант - "Каждая прога - отдельная машина".
Плюсы:
1. Меньше проблем с безопасностью
2. Меньше сложность кода
3. Можно пускать разные апплеты в разных машинах (например разных версий) на одном компьютере
4. Сама машина меньше по размеру (и наверное быстрее т.к. переключение контекстов осуществляется ОС, которая в свою очередь пользуется "ускоренными" функциями процессора)

Минусы:
1. Больше потребление памяти (хотя с учетом современных объемов RAM и минималичтичности виртуальной машины это не так уж страшно)
2. Затрудняется общение между апплетами (нужно городить какие-то сокеты/файлы/разделяемую память/буффер обмена и т.п. или вообще принципиально отказаться от взаимодействия между апплетами)

User avatar
NightRadio
Site Admin
Posts: 3152
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: Ответ Javе и Flash'у [тема для программеров]

Post by NightRadio » Fri Sep 12, 2008 1:40 pm

А мне, честно говоря, пока нравится вариант "Одна машина - несколько апплетов".
Что делать, если машин несколько, а каждый апплет захочет скачать библиотечку FFMPEG, скомпиленную в кодах нашей машины. Весить она может несколько мегабайт. И вот десяток апплетов, каждый подключает несколько мегабайт стороннего кода. Система разбухает, прямо как Java :)
Вариант же с одной машиной сделать не сильно сложнее, чем с несколькими. Просто тут надо дать несколько уточнений:
1. Многозадачность реализуется средставами ОС хоста (то есть как бы на аппаратном уровне виртуальной машины).
2. Нужны четкие правила взаимодействия апплетов, чтобы один не мешал другому... Хотя если бы даже один апплет убил другого, браузеру на это совершенно пофиг, он продолжает работать.
3. Загруженная одним апплетом библиотека сохраняется в локальной файловой системе (/usr/lib/) и лежит там сколько угодно, в то время как другие апплеты её юзают.
4. Запустить два апплета на разных машинах всеравно можно при желании - если вызывать машину в ручном режиме из консоли :)

Zuf
Posts: 110
Joined: Fri Dec 21, 2007 7:30 pm
Location: Msc
Contact:

Re: Ответ Javе и Flash'у [тема для программеров]

Post by Zuf » Fri Sep 12, 2008 1:53 pm

Ну аргумент с библиотеками понятен.
Кстати коговоря, Ява роазве не в одной ВМ все выполняет?
А с библиотеками не начнется "DLL-Hell" или что-то в этом роде?
Насколько разумно, что апплеты загружают свои библиотеки в системную директорию типа /usr/lib?

User avatar
NightRadio
Site Admin
Posts: 3152
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: Ответ Javе и Flash'у [тема для программеров]

Post by NightRadio » Fri Sep 12, 2008 2:03 pm

Про Java я не в курсе :)
Я конечно имел в виду не системную директорию хоста, а внутреннюю файловую систему виртуальной машины. Ну и.. получается, как в любом Unix :) Не то чтобы, Dll-hell :) Да и в любой момент можно отформатировать виртуальный диск и получить нулевую систему.

Zuf
Posts: 110
Joined: Fri Dec 21, 2007 7:30 pm
Location: Msc
Contact:

Re: Ответ Javе и Flash'у [тема для программеров]

Post by Zuf » Fri Sep 12, 2008 2:20 pm

Да, я тоже имел в виду "виртуальную" /usr.lib но она тоже ведь важна.

Что же касается собственно построения ВМ, регистры комманды и т.п. то имею очень смутное представление на этот счет )

User avatar
NightRadio
Site Admin
Posts: 3152
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: Ответ Javе и Flash'у [тема для программеров]

Post by NightRadio » Fri Sep 12, 2008 3:39 pm

Наверное, можно и более аккуратный способ инсталляции библиотек придумать =)
Касательно ВМ мне предложили глянуть вот на эти: Parrot, NekoVM. Дабы не изобретать велосипед, надо их внимательно изучить =)

Zuf
Posts: 110
Joined: Fri Dec 21, 2007 7:30 pm
Location: Msc
Contact:

Re: Ответ Javе и Flash'у [тема для программеров]

Post by Zuf » Fri Sep 12, 2008 4:46 pm

Да про parrot я тоже сегодня посмотрел немного, и хотел еще посмотреть как JVM работает...

User avatar
NightRadio
Site Admin
Posts: 3152
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: Ответ Javе и Flash'у [тема для программеров]

Post by NightRadio » Thu Sep 18, 2008 3:57 pm

Немного подумав и пересмотрев задачу, я решил сместиться в сторону Pixilang :) Всетаки Пикси - хороший язык.
То есть, кроссплатформенный байт-код всеравно придется придумать. Но за верхушку, мне кажется, лучше взять некое логическое продолжение виртуальной машины Pixilang. И не привязываясь изначально к Веб и безопасности... хотя это конечно можно будет реализовать в будущих версиях, если возникнет необходимость.
В итоге получаем подобие Pixilang с такими изменениями:
1) убить команды, в которых нет явной необходимости (оптимизация виртуальной машины по размеру)
2) новые posix-совместимые команды для полного комплекта работы с файлами и сетью.
3) убить поддержку форматов (XM/MOD/JPG/GIF) и вынести её в виде внешних библиотек, написанных на пикси-коде. Это еще под вопросом.
4) поддержка человеческой математики и чисел с плавающей запятой
5) OpenGL.. Тут тоже вопросы: насколько полная поддержка? как связать с пикси-контейнерами?
6) встроенный движок синтезатора АНС.

Zuf
Posts: 110
Joined: Fri Dec 21, 2007 7:30 pm
Location: Msc
Contact:

Re: Ответ Javе и Flash'у [тема для программеров]

Post by Zuf » Fri Sep 19, 2008 1:12 pm

Пикси - хороший язык, поддерживаю :)

А как библиотеки на пикси то писать? Хватит мощности и возможностей?
Представляю сложность создания JPEG-библиотеки...

Что касается OpenGL - нужна максимально полная и расширяемая поддержка, иначе смысл использовать OpenGL почти пропадает.

Ну, конечно, надо еще думать над этим...

Post Reply