Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > e4xu

Всякие разные штуки сомнительной полезности сделанные в свободное от работы время.
Оценить эту запись

Первое знакомство с NaCl

Запись от wvxvw размещена 06.01.2012 в 03:43
Обновил(-а) wvxvw 07.01.2012 в 15:54

Очень давно руки тянулись попробовать что-то сделать, и все никак не было времени. Вот, наконец, время образовалось. Спешу поделиться первыми впечатлениями. Заранее скажу, что много из того, что было заявлено, я не попробовал, более того, пример получился самый простецкий, исключительно, чтобы попробовать, ничего сногсшибательного.
Но сначал несколько слов о технологии в целом. Возможно вы уже слышали про эту нее, но, естесственно, пока сам не попробуешь - тяжело оценить ситуацию. NaCl предоставляет возможность писать на C/C++ (в будущем обещают чего-нибудь еще добавить...) для браузера. В каком-то смысле, можно писать на Си и для Алхимии, но есть нюанс. NaCl - это не виртуальная машина, это промежуточный слой между вашим кодом и системой (два, если быть точным). При этом ваш код не интерпретируется, не перекомпилируется во время загрузки, а выполняется компьютером пользователя практически в том виде, в котором вы его написали. Звучит на первый взгляд заманчиво, работает быстро! прям дух захватывает Никаких дурацких фреймвокров, библиотек, третьих, четвертых и пятых лиц, которые вообще не понятно о чем думали, когда писали те библиотеки, которыми вам сейчас позарез нужно воспользоваться...
Но со свободой приходит и ответсвенность, а с ней и многие неочевидные осложнения. Так, например, если Флеш вам "из коробки" предлагает графический фреймворк, то, у NaCl его, как такового нет, заявлена поддержка OpenGL ES, но OpenGL - это гораздо более низкоуровневая библиотека, на базе которой еще самому нужно много чего достраивать. С другой стороны - есть, хоть раз в жизни возможность попробовать свои силы и сделать лучше!
Есть и предрассудки другого плана - Mozilla категорически против, сравнивая технологию с ActiveX, и считая ее потенциально опасной. По утверждениям некоторых представителей код, который нельзя прочитать человеку потенциально опасен. Естественно, про Гугловский "компилятор" JavaScript (Closure) они наверное не слышали. А еще инженеры в Mozille считают, что если код никому не показывать, то это затормозит развитие (наверное JavaScript так круто развился за последние 15 лет именно потому, что исходники были всем доступны).

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

Инстументы: Google предоставляет загрузчик с обновлялкой, которая по вашему требованию обновит SDK, которой тот же Google и предоставляет. Никаких неудобств при "установке" обнаружено не было, ни даже "оракловскиx" навязчивых усилий побрататься с программистами, ни "майкросовтовских" попыток подписать вас на автоматическую рассылку. Может быть там где-то в контракте оговорено, что в крайнем случае левая почка достанется победителю... но ни на какие кнопки типа "подтвердить" / "согласен" / "одобряю" кликать не нужно было. Если вы делали что-нибудь для Андроида пользуясь гугловскими инструментами, то логика происходящего будет вам абсолютно понятна и очевидна.
Из интересных моментов связаных с SDK: для билдов используется scons - это очень приятная альтернатива Make, или даже Ant / Maven. В двух словах - инстумент для сборки проектов использующий Python для своих непосредсвенных целей. Чем это удобно - не нужны никакие "плагины", "модули" и т.п. замечательные дополнения, изза которых порой самые доброжелательные программистры превращаются в самых недоброжелательных программистoв. Т.е. если вам кажется, что чего-то в вашем билде не хватает, то, все шансы за то, что используя Python вы это как-нибудь да напишете.
Еще один интересный момент - нет жесткой привязки к компилятору. Т.е. конечно, есть нюансы, но ситуации типа "в Гугле перестали работать над компиляторм - можно расходиться по домам" скорее всего не будет. Проект, который прилагается к этой заметке компилировался gcc.
Кроме этого с SDK вы получаете какие-то шаблоны (не то, чтобы очень уж так чтобы прям вообще... но жить можно) Опять же, шаблоны сделаны на Питоне, так что, если не нравится - как хотите, так и переделывайте.
И, последнее, не так, чтобы очень нужное, но все равно приятно: вместе с SDK и примерами прилагается минимальный HTTP сервер на Питоне, я им в итоге не пользовался, но запустил для порядку - работает

Документация: Я, честное пионерское, валенок в том, что касается C++, но мне хватило. Опять же, никакой специфической документации мне, для того, что я пытался сделать не потребовалось. Наверняка, если вам C++ роднее, у вас и вопросов может быть по-более. Мой примитивный пример заработал, и я счастлив. Из того, что есть на сайте / в комплекте с SDK - прямо скажем, не много, а с другой - не найти справку по C++ - это нужно очень постараться... В конце статьи есть ссылки на нужные ресурсы, мануал и обучалку.

Что я попробовал сделать: программу, которая общатестя с JavaScript, получает строку, кодирует ее в Base64 и декодирует обратно. Безусловно, очень ценная в хозяйстве вещь. Примечательным моментом является разве что то, что кодировщик я не писал - что первое нагуглилось, то и взял. Собственно, только этим пример и примечателен. Благодарности и кредиты автору Base64 выражены в исходниках.

Что необходимо для того, чтобы увидеть результат: Google Chrome 14+, удостовериться, что в chrome://plugins NaCl в состоянии enabled, и что в chrome://flags/ он так же enabled - почему 2 раза - не знаю, но так нужно.
Кстати, по-дороге нашлась интересная страница: chrome://chrome-urls/.
Принципиально важный момент: *.nexe нельзя загружать из файловой системы! Так задумано. Так что, чтобы полюбоваться экспериментом вам нужен будет работающий HTTP сервер. Вы можете воспользоваться тем, что в SDK - он очень простой. Я пользовался Apache - просто потому, что уже был установлен, и мне так удобнее.
Редактор: если у вас нет ничего такого под рукой - Eclipse в принципе должно быть нормально. Интересным образом в FlashDevelop вроде как была подсветка синтаксиса для Питона. В Emacs - просто замечательно, если что, как будто прямо для него и придуман Скриншот прилагается.

Ссылки:
Скачать и установить SDK.
Примеры.
Группа рассылки.
Справка.

Отладка в Линуксе 64 бит: не все так просто, но вроде как работает.

Ну и сам эксперимент. Если вы хорошо знаете C++ - просьба относится снисходительно
Всего комментариев 5

Комментарии

Старый 06.01.2012 03:57 in4core вне форума
in4core
 
Аватар для in4core
Примеры у меня пошли в Mozille на раз. в чем косяк у вас ?
Старый 06.01.2012 04:04 wvxvw вне форума
wvxvw
 
Аватар для wvxvw
Косяк файлообменника в смыле? - я не знаю, проще у них спросить.
Старый 06.01.2012 11:54 Fillini вне форума
Fillini
 
Аватар для Fillini
Из названия я подумал что автор занялся химией))) Ожидал "берем натрий хлор, и кидаем его в соляную кислоту" ))
Старый 06.01.2012 12:24 alatar вне форума
alatar
 
Аватар для alatar
Отсутствие виртуальной машины можно рассматривать и как недостаток. Весь геморрой по обеспечению кроссплатформенности ложится на разработчика, плюс под разные платформы придется компилировать отдельную версию.
Старый 06.01.2012 13:31 wvxvw вне форума
wvxvw
 
Аватар для wvxvw
Fillini: ну, как бы поэтому инструменты так и называются: соль, перец и т.п.

alatar: во таком же плане, как и отсутсвие высокоуровнего фреймворка, да. Но, тут уже как повезет, если в ВМ сделано хорошо - то все замечательно, а когда нет - то можно только ногти кусать. Учитывая то количество ситуаций, когда, например Adobe не фиксили баги годами, или регрессии, или просто отсутсвие любых возможностей сделать что-то нужное... опять же, я не говорю, что это решает любой вопрос, но... хз, я буду пробовать HaXe + NME прикрутить... посмотрим, что выйдет

Да, еще недостаток... в виду того, что в самом NaCl почти ничего нет (библиотек), то весь код, практически, нужно линковать статически, и файлы получаются не маленькие.
Обновил(-а) wvxvw 06.01.2012 в 15:15
 

 


Часовой пояс GMT +4, время: 17:58.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.