Полезная информация

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№101-07-2007 06:14:58

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Об использовании препроцессора C при сборке расширений

Сборка расширений сродни компиляции, ECMAScript - C-подобный язык, так почему бы не воспользоваться ?

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

Сейчас занимаюсь небольшим проектом, в котором я решил воспользоваться cpp, соответственно есть небольшая наработка, делюсь.

Препроцессор вызывается из пакетного файла jpp.bat, который вызывается из общего сборочного пакетного файла командой

Выделить код

Код:

for /r . %%i in (*.s??) do call jpp %%~dpni %%~xi %PRJPATH%\inc

Обрабатываю пока что только *.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ентов на части порвет !!!

Отсутствует

 

№201-07-2007 14:56:06

Dark-Demon
Участник
 
Группа: Members
Зарегистрирован: 20-02-2006
Сообщений: 1278
UA: Firefox 2.0

Re: Об использовании препроцессора C при сборке расширений

на мой взгляд паттерн "рееестр" тут больше бы подошёл... вообще говоря Components.classes... - это уже реестр, но уж больно многословный, поэтому можно сделать реестр-враппер с более коротким синтаксисом.

что-то вроде: var io = Reg.getservice('io');

насчёт дампов - не спорю.


ps: в твоём случае экономия получается какая-то однобокая...

Выделить код

Код:

#define PREF_COMPONENT_IID nsIPref

:sick:


!

Отсутствует

 

№301-07-2007 16:22:14

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Об использовании препроцессора C при сборке расширений

можно сделать реестр-враппер с более коротким синтаксисом

Идея хорошая, знать бы как. Неочевидно, как скриптом преобразовать короткое имя в имя интерфейса, а затем по имени интерфейса вычислить contract id класса (мне, по крайней мере неочевидно; есть только соображение об использовании в конкретном проекте оболочки с конкретным набором сервисов). Если у тебя есть идеи по этому поводу, поделись пожалуйста.

в твоём случае экономия получается какая-то однобокая

Все эти "X_COMPONENT_IID", "Y_SERVICE_CID" и т.п. нужны для макросов SERVICE, COMPONENT.
А экономия касается только "исходных" текстов, разумеется. После препроцессора всё будет развёрнуто, форматирование не сохранится в полном объёме. Тут вопрос в упрощении навигации по "исходникам" (букв меньше, куски кода которые уже отлажены, можно выносить в отдельные файлы) и использовании общих для нескольких файлов определений/констант, которые можно определять/изменять в одном файле.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№402-07-2007 02:02:58

Dark-Demon
Участник
 
Группа: Members
Зарегистрирован: 20-02-2006
Сообщений: 1278
UA: Firefox 2.0

Re: Об использовании препроцессора C при сборке расширений

ну, как минимум @mozilla.org можно добавлять по дефолту...
вообще, я сейчас юзаю вот такую штуку:

Выделить код

Код:

var parser =	_('@mozilla.org/xmlextras/domparser;1','nsIDOMParser');
var alertserv=	_('@mozilla.org/alerts-service;1','nsIAlertsService');

если ещё и @mazilla.org обрезать, то вполне себе нормально получится...

Выделить код

Код:

форматирование не сохранится в полном объёме

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


!

Отсутствует

 

№502-07-2007 12:55:23

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Об использовании препроцессора C при сборке расширений

вообще, я сейчас юзаю вот такую штуку:

Выделить код

Код:

var parser =	_('@mozilla.org/xmlextras/domparser;1','nsIDOMParser');
var alertserv=	_('@mozilla.org/alerts-service;1','nsIAlertsService');

Всё равно короче:

Выделить код

Код:

var parser =	COMPONENT (DOM_PARSER);
var alertserv=	COMPONENT (ALERT_SERVICE)

А COMPONENT может развернуться в 'Components.classes["@mozilla.org...' или в '_("@mozilla.org...'

кстати, да. потом же комуто копаться в полученном коде

Это проблемы гипотетического "кого-то".

либо осваивать твой препроцессор...

Если кто-нибудь ещё сочтёт это полезным, будут готовые решения, можно будет говорить о каком-нибудь едином "стандарте" на удобные решения. Затем ветка и создана.

Отредактировано Anton (02-07-2007 12:56:01)


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№602-07-2007 14:02:10

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Об использовании препроцессора C при сборке расширений

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ентов на части порвет !!!

Отсутствует

 

№708-07-2007 10:06:53

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Об использовании препроцессора C при сборке расширений

Немного вне темы, но посетила такая мысль: есть, допустим, некая стандартная библиотека, большинство разработчиков её использует. Есть некий инструмент для сборки xpi и xul-приложений, в состав которого эта библиотека входит. Есть, предположим, приложение, работающее только на FF какой-нибудь десятой версии. Пользователь скачивает исходники приложения и пересобирает его под свой FF восьмой версии, или под SM четвёртой. Или вообще под TB (вдруг да получится).

А по теме, в JavaScript 2, возможно, будет условная компиляция (на самом же js реализованная).


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№808-07-2007 14:50:05

Dark-Demon
Участник
 
Группа: Members
Зарегистрирован: 20-02-2006
Сообщений: 1278
UA: Firefox 2.0

Re: Об использовании препроцессора C при сборке расширений

думаю не стоит это слишком усложнять... а то, для создания расширений придётся знать не только язык программирования "яваскрипт",  но и язык программирования "препроцессор" :)


!

Отсутствует

 

№908-07-2007 17:15:10

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Об использовании препроцессора C при сборке расширений

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

ага, сишный препроцессор - неимоверно сложный. Хотя, в первом случае, им одним не отделаешься, да и не о нём была речь.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]