Страницы: 1
Сборка расширений сродни компиляции, ECMAScript - C-подобный язык, так почему бы не воспользоваться ?
Предлагаю к обсуждению, цель - выявление аналогичных подходов и, возможно, разработка стандартного набора включаемых файлов для упрощения процессов разработки и обмена информацией между разработчиками.
Сейчас занимаюсь небольшим проектом, в котором я решил воспользоваться cpp, соответственно есть небольшая наработка, делюсь.
Препроцессор вызывается из пакетного файла jpp.bat, который вызывается из общего сборочного пакетного файла командой
Обрабатываю пока что только *.sjs. Есть два общих включаемых файла, debug.hjs и stdcomps.hjs, они включаются единым для всех остальных файлов проекта включаемым файлом. С их помощью можно писать, например
var io = SERVICE (IO); var prefs = COMPONENT (PREFS); return NS_ERROR (NO_INTERFACE);
вместо
var io = Components. classes ["@mozilla.org/network/io-service"]. getService (Components. interfaces. nsIIOService); var prefs = Components. classes ["@mozilla.org/preferences;1"]. createInstance (Components. interfaces. nsIPref); return Components. results. NS_ERROR_NO_INTERFACE;
и удалять все 'dump (...)', 'LOG (...)' из расширения, если в общем включаемом файле проекта не определена константа DEBUG.
Включаемый файл проекта: project.hjs, там в основном макросы для определения интерфейса nsIModule 'по умолчанию'.
Отредактировано Anton (01-07-2007 10:22:04)
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
на мой взгляд паттерн "рееестр" тут больше бы подошёл... вообще говоря Components.classes... - это уже реестр, но уж больно многословный, поэтому можно сделать реестр-враппер с более коротким синтаксисом.
что-то вроде: var io = Reg.getservice('io');
насчёт дампов - не спорю.
ps: в твоём случае экономия получается какая-то однобокая...
!
Отсутствует
можно сделать реестр-враппер с более коротким синтаксисом
Идея хорошая, знать бы как. Неочевидно, как скриптом преобразовать короткое имя в имя интерфейса, а затем по имени интерфейса вычислить contract id класса (мне, по крайней мере неочевидно; есть только соображение об использовании в конкретном проекте оболочки с конкретным набором сервисов). Если у тебя есть идеи по этому поводу, поделись пожалуйста.
в твоём случае экономия получается какая-то однобокая
Все эти "X_COMPONENT_IID", "Y_SERVICE_CID" и т.п. нужны для макросов SERVICE, COMPONENT.
А экономия касается только "исходных" текстов, разумеется. После препроцессора всё будет развёрнуто, форматирование не сохранится в полном объёме. Тут вопрос в упрощении навигации по "исходникам" (букв меньше, куски кода которые уже отлажены, можно выносить в отдельные файлы) и использовании общих для нескольких файлов определений/констант, которые можно определять/изменять в одном файле.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
ну, как минимум @mozilla.org можно добавлять по дефолту...
вообще, я сейчас юзаю вот такую штуку:
var parser = _('@mozilla.org/xmlextras/domparser;1','nsIDOMParser'); var alertserv= _('@mozilla.org/alerts-service;1','nsIAlertsService');
если ещё и @mazilla.org обрезать, то вполне себе нормально получится...
кстати, да. потом же комуто копаться в полученном коде либо осваивать твой препроцессор...
!
Отсутствует
вообще, я сейчас юзаю вот такую штуку:
Выделить кодКод:
var parser = _('@mozilla.org/xmlextras/domparser;1','nsIDOMParser'); var alertserv= _('@mozilla.org/alerts-service;1','nsIAlertsService');
Всё равно короче:
А COMPONENT может развернуться в 'Components.classes["@mozilla.org...' или в '_("@mozilla.org...'
кстати, да. потом же комуто копаться в полученном коде
Это проблемы гипотетического "кого-то".
либо осваивать твой препроцессор...
Если кто-нибудь ещё сочтёт это полезным, будут готовые решения, можно будет говорить о каком-нибудь едином "стандарте" на удобные решения. Затем ветка и создана.
Отредактировано Anton (02-07-2007 12:56:01)
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
p.s.: дополнил свой stdcomps.hjs альтернативой, позволяющей использовать wrappers, если определена константа USE_COMPONENTS_WRAPPERS: http://pastebin.mozilla-russia.org/69982
---
+ альтернатива, позволяющая делать подстановки через глобальные переменные, Ci/Cc если определена константа USE_GLOBAL_COMPONENTS_VARIABLES: http://pastebin.mozilla-russia.org/78613
Отредактировано Anton (03-07-2007 11:46:11)
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Немного вне темы, но посетила такая мысль: есть, допустим, некая стандартная библиотека, большинство разработчиков её использует. Есть некий инструмент для сборки xpi и xul-приложений, в состав которого эта библиотека входит. Есть, предположим, приложение, работающее только на FF какой-нибудь десятой версии. Пользователь скачивает исходники приложения и пересобирает его под свой FF восьмой версии, или под SM четвёртой. Или вообще под TB (вдруг да получится).
А по теме, в JavaScript 2, возможно, будет условная компиляция (на самом же js реализованная).
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
думаю не стоит это слишком усложнять... а то, для создания расширений придётся знать не только язык программирования "яваскрипт", но и язык программирования "препроцессор"
!
Отсутствует
думаю не стоит это слишком усложнять... а то, для создания расширений придётся знать не только язык программирования "яваскрипт", но и язык программирования "препроцессор" smile
ага, сишный препроцессор - неимоверно сложный. Хотя, в первом случае, им одним не отделаешься, да и не о нём была речь.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Страницы: 1