LINUX.ORG.RU

Ice


0

0

Бывшие разработчики CORBA стандарта реализовали облегченную и упрощенную библиотеку для межпрограммного взаимодействия, так называемого middleware, Internet Communications Engine или ICE. Библиотеку можно использовать как под коммерческой лицензией, гарантирующей поддержку, так и на условиях открытой лицензии GPL.

Библиотека, как отмечается в интервью http://www.itwriting.com/monointervie..., используется во многих многопользовательских играх MMORPG, что говорит в пользу ее пригодности в практическом использовании.

>>> Подробности

anonymous

Проверено: Shaman007 ()

Re: Ice

Бред какой-то… Конторе ZeroC уже лет так 5.

Bacek ()

Re: Ice

Не совсем понимаю "бывшие разработчики CORBA". Я тоже "бывший разработчик CORBA" в смысле, что писал под нее. То есть я так понимаю OMG самораспустилось и его члены организовали частную контору, которая выпустила ПРОДУКТ, не совместимый с CORBA с ограниченной (облегченной) функциональностью, который они хотят продавать за деньги, а в качестве промоушен выпускают GPL версию? Так?

anonymous ()
Ответ на: Re: Ice от anonymous

Re: Ice

Там нет сравнения, там просто сказано, что есть ICE, типа другой IPC, на уровне SOAP и CORBA. Пока что у ICE вижу приимущество в документации, в стабильной и версии, а не #define API_TO_CHANGE, в биндингах в C++ и работе под виндой,у DBUS - более лёгкая лицензия, ориентированность на взаимодействое ПО внутри одного компьютера, а не по сети,биндиги в С(хотя это скорее в Glib). Сам я пользовался DBUS для одного проекта, впечатления - сыровато, надо ждать версии 1.0, часто бывают утечки памяти, при обильном обмене данными иногда падает, к плюсам - очень просто в связке с python. В минусах - нет языка описание интерфейса(да-да, я знаю что есть http://dbus.freedesktop.org/doc/dbus-tutorial.html#glib-server, но это просто XML описание). Вот бы сравнить скорость работы(как локально, так и по сети).

anonymous ()

Re: Ice

Не очень как то этот Ice, потому как идеология у ZeroC - мы не будем внедрять новые поддержки языков и т.п. пока это не будет необходимо нашим коммерческим клиентам. Т.е как бы GPL, а на самом деле коммерция.

anonymous ()

Re: Ice

Чего-то с трудом уже верится, что эти люди могут сделать не монстра, а что-то вменяемое.

anonymous ()
Ответ на: Re: Ice от smartly

Re: Ice

Слишком тонкая связь между статьёй и текстом "новости": разработчики на Mono не имеют возможности пользоваться Indigo, и в качестве одной из альтернатив рекомендуется Ice, причём упоминается вскользь в две строки.

erDiZz ()
Ответ на: Re: Ice от anonymous

Re: Ice

Как-то коряво все сделано, как минимум, Java версия. Есть несколько достаточно серьезных ошибок дизайна и менять что-то, без потери совместимости, уже поздно. Вобщем, хотели как лучше, а получились...

anonymous ()

Re: Ice

ОЧЕНЬ ИНТЕРЕСНО!
Думаю практики заинтересуются.
Аннаннимистам и к ним примкнувшим не рекомендую ходить по ссылке.

NonHuman ★★★ ()
Ответ на: Re: Ice от anonymous

Re: Ice

Что значит только Java-версия? Биндинги кривые - так это лечится спокойно. Хотелось бы увидить эти ошибки.

anonymous ()
Ответ на: Re: Ice от anonymous

Re: Ice

мда.... Сейчас ради интереса скачал у них с сайта rpm-ки, доку, написал hello-world application, так когда клиент заканчивается выдаёт сегфолт, то есть:
$ ./client
*** glibc detected *** ./client: free(): invalid pointer: 0x08125f98 ***
бла-бла-бла...
bff60000-bff76000 rw-p bff60000 00:00 0 [stack]
Аварийный останов
$ cat Client.cpp
#include <Ice/Ice.h>
#include <Printer.h>
using namespace std;
using namespace Demo;
int main(int argc, char* argv[])
{
int status = 0;
Ice::CommunicatorPtr ic;
try {
ic = Ice::initialize(argc, argv);
Ice::ObjectPrx base = ic->stringToProxy(
"SimplePrinter:default -p 10000");
PrinterPrx printer = PrinterPrx::checkedCast(base);
if (!printer)
throw "Invalid proxy";
printer->printString("Hello World!");
} catch (const Ice::Exception& ex) {
cerr << ex << endl;
status = 1;
} catch (const char* msg) {
cerr << msg << endl;
status = 1;
}
if (ic)
ic->destroy();
return status;
}

$ uname -a
Linux krum.lan 2.6.16-1.2127_FC5 #1 Sun May 28 19:44:15 EDT 2006 i686 athlon i386 GNU/Linux
$ gcc -v
Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux
Thread model: posix
gcc version 4.1.0 20060304 (Red Hat 4.1.0-3
Система - федора 5-ая.

anonymous ()
Ответ на: Re: Ice от anonymous

Re: Ice

Пересобрал, перестало падать:)

anonymous ()
Ответ на: Re: Ice от anonymous

Re: Ice

> Что значит только Java-версия? Биндинги кривые - так это лечится спокойно. Хотелось бы увидить эти ошибки.

Я не говорил "только Java", а про биндинги вообще ничего не знаю (а что это, если не секрет?).

Наиболее заметные ошибки в проектировании:

1) Один об'ект - одно TCP соединение. Как кто-то еще умудряется использовать это в онлайн-игрушках для меня - загадка. Либо используется единственный об'ект абсолютно для всего, либо не больше сотни-другой клиентов на сервер.

2) При передаче callback должна быть обеспечена возможность установки обратного соединения (следствие п. 1). Костыли в виде Glacier убивают саму идею отказа от CORBA ради упрощения, но не решают проблему.

3) Адресация и способы разрешения конфликтов версий. К примеру, почти невозможно дать свой адрес, если у вас в /etc/hosts прописано 127.0.0.1 localhost myhostname Кто им сказал, что там должно быть что-то еще, кроме 127.0.0.1? Зачем пытаться определять свой адрес, если, в общем случае, это просто невозможно, поскольку хост может быть за NAT-ом, он может иметь больше, чем один адрес... Короче, фигня полнейшая. И это прибито гвоздями, от этого не избавится, не переписав все заново.

Список можно было бы продолжить, но мне было достаточно и этого.

anonymous ()
Ответ на: Re: Ice от anonymous

Re: Ice

мда... весьма печально....

anonymous ()

Re: Ice

Да уж. Неплохой рекламный ход. Но и только. Всё что написано про CORBA так скажем не совсем правда, направлено на тех кто CORBA никогда не использовал или использовал, но очень мало.

smalex ()
Ответ на: Re: Ice от anonymous

Re: Ice

> То есть я так понимаю OMG самораспустилось и его члены организовали частную контору, которая выпустила ПРОДУКТ, не совместимый с CORBA с ограниченной (облегченной) функциональностью, который они хотят продавать за деньги, а в качестве промоушен выпускают GPL версию?

гыгыгы +5 :))))

// wbr

klalafuda ★☆☆ ()
Ответ на: Re: Ice от anonymous

Re: Ice

> Пока что у ICE вижу приимущество в документации,

ACE/TAO

> в стабильной и версии, а не #define API_TO_CHANGE,

ACE/TAO

> в биндингах в C++

ACE/TAO

> и работе под виндой

ACE/TAO

// wbr

klalafuda ★☆☆ ()
Ответ на: Re: Ice от samy_volosaty

Re: Ice

> а чем этот Лёд круче корбы?

да ничем IMHO. в CORBE конечно же есть неоднозначные места типа C++ биндинга (уж больно он муторный), но к этому в принципе привыкаешь.

// wbr

klalafuda ★☆☆ ()
Ответ на: Re: Ice от klalafuda

Re: Ice

Получается, что только корба работает для всех и вся? Ну кроме, всяких SOAP и XML-RPC.

anonymous ()
Ответ на: Re: Ice от anonymous

Re: Ice

> Получается, что только корба работает для всех и вся? Ну кроме, всяких SOAP и XML-RPC.

ммм.. я не совсем понял смысл вопроса. что значит "для всех и вся" ?

// wbr

klalafuda ★☆☆ ()
Ответ на: Re: Ice от anonymous

Re: Ice

> Хм, ACE/TAO - это реализация корбы?

да. если точнее, то ACE (Adaptive Communication Environment) - это кросс-платформенный фреймворк для разработки приложений, а TAO - реализация ORB с использованием ACE. в том плане, что ACE может быть использован [и используется] сам по себе и к технологии CORBA прямого отношения не имеет, в то время как TAO жестко завязан на ACE как бэкенде.

// wbr

klalafuda ★☆☆ ()

Re: Ice

У ACE/TAO есть 1 минус - вес. Со всеми основными сервисами почти 28Мб рантайма. У ICE - если память не изменяет 3-4МБ. Ну и еще у Ice есть embeddable версия, там вообще в килобайтах размер измеряется...

Хотя сам лично использовал ACE для сетевых дел. Достаточно приятное впечатление оставила, за исключенем того, что ресурсы надо явно release делать...

anonymous ()
Ответ на: Re: Ice от anonymous

Re: Ice

> У ACE/TAO есть 1 минус - вес. Со всеми основными сервисами почти 28Мб рантайма. У ICE - если память не изменяет 3-4МБ. Ну и еще у Ice есть embeddable версия, там вообще в килобайтах размер измеряется...

ключевое слово я так понимаю - это "со всеми основными сервисами". а сервисов там выше крыши и какой набор нужен для конкретного приложения - нужно смотреть. у меня вот, допустим, "основные сервисы" тянули на пару-тройку мегабайт и все были вполне счастливы :) ну и само собой strip is your friend.

// wbr

klalafuda ★☆☆ ()
Ответ на: Re: Ice от anonymous

Re: Ice

> Верю... :) У меня получалось 28... и strip активнейшим образом использовался... я даже пытался лишнее выкинуть http://files.rsdn.ru/30337/ace-small.png (это только ACE без TAO)

чем-то мне эта картинка напоминает взрыв на макаронной фабрике :)
ну а сама libACE.so в полном комплекте после strip-a тянет всего на метр:

$ ls -l libACE.so.5.4.10
-rwxr-xr-x  1 foo  wheel  1180892 Jun 19 14:36 libACE.so.5.4.10

$ file libACE.so.5.4.10
libACE.so.5.4.10: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), for NetBSD 3.99.15, stripped

$ size libACE.so.5.4.10
   text    data     bss     dec     hex filename
1143772   23620    2792 1170184  11db08 libACE.so.5.4.10

IMHO при желании можно и поглубже порезать.

// wbr

klalafuda ★☆☆ ()
Ответ на: Re: Ice от klalafuda

Re: Ice

для Win32 кстати все примерно так-же (версия ACE поновее):

bash-3.00$ ls -l ace.dll
-rwx------+ 1 foo foo 1024000 May 31 14:48 ace.dll

bash-3.00$ size ace.dll
   text    data     bss     dec     hex filename
 998978   14900       0 1013878   f7876 ace.dll

// wbr

klalafuda ★☆☆ ()
Ответ на: Re: Ice от klalafuda

Re: Ice

Да, сама ACE небольшая... но мне нужно было ее ужать до 300-400к... для этого картинка зависмостей *.o символов и была нарисована :). После этого затея была оставлена...

Про 28Мб - это я о TAO :).

А вообще, чего накинулись то? :). Нормальная либа, устойчивая и с большим количеством функций... но если выбирать, я бы выбрал Ice, т.к. 1. Легко модифицируется, т.к. мало кода и он достаточно неплохо структурирован (по опыту, т.к. менял TCPConnection и иже с ними) 2. Более интересная система версионности, slice компилер, простой storm, glacier при небольших модификациях способен пробивать firewall с callback-ами...

Из минусов: 1. Лицензия и отношение разработчиков (мне лично не понравилось с ними общаться) 2. Доведение до ума требует времени и главное ломается совместимость с мейнстримом... Т.е. фактически надо форк поддерживать самому... 3. Сильно заточен под локалку или прямое соединение... (уже не помню точно, но вроде один объект/одно соединение обходится без проблем встроенными средствами)

anonymous ()
Ответ на: Re: Ice от anonymous

Re: Ice

Под slice компилер я имел ввиду slice язык (больше понравился чем idl)

anonymous ()
Ответ на: Re: Ice от anonymous

Re: Ice

> А вообще, чего накинулись то? :). Нормальная либа, устойчивая и с большим количеством функций... но если выбирать, я бы выбрал Ice, т.к. 1. Легко модифицируется, т.к. мало кода и он достаточно неплохо структурирован (по опыту, т.к. менял TCPConnection и иже с ними) 2. Более интересная система версионности, slice компилер, простой storm, glacier при небольших модификациях способен пробивать firewall с callback-ами...

> Из минусов: 1. Лицензия и отношение разработчиков (мне лично не понравилось с ними общаться) 2. Доведение до ума требует времени и главное ломается совместимость с мейнстримом... Т.е. фактически надо форк поддерживать самому... 3. Сильно заточен под локалку или прямое соединение... (уже не помню точно, но вроде один объект/одно соединение обходится без проблем встроенными средствами)

IMHO минусы существенно перевешивают :-/ в тот-же ACE внести изменения в основное дерево весьма просто, нужно лишь иметь разумное обоснование и сделать приемлимый патч. пипл их без особых проблем принимает после review. tested :) ну а вести свой форк подобного проекта - IMHO проще удавиться.

// wbr

klalafuda ★☆☆ ()
Ответ на: Re: Ice от klalafuda

Re: Ice

>IMHO минусы существенно перевешивают :-/ в тот-же ACE внести изменения >в основное дерево весьма просто, нужно лишь иметь разумное обоснование >и сделать приемлимый патч. пипл их без особых проблем принимает после >review. tested :) ну а вести свой форк подобного проекта - IMHO проще >удавиться.

К сожалению у ACE чиста C++ с классами, а вот Ice - это уже нормальный С++. Но это на любителя...

Если нужен приватный проект для общения своих же компонентов, то форк оправдан, особенно если учесть, что Ice легче конфигурируется и требует меньше инфраструктуры... Т.е. если нужен готовый шустрый OO транспорт и не пугает лицензия и модификации, нужно программить в ОО стиле - это Ice.

Если нужен проверенный продукт совместимый со всем на свете (почти ;) ), нужны биндинги к С!!!, нужна шустрая супер платформенно-независимя сетевая либа... да и вообще Шилдт - супер мужик :), тут ACE + TAO + CAO .. плюс еще дохрена всяких служб бонустных, например RT Corba...

(по секрету, в итоге выбрал ACE+ TAO, но Ice мне лично понравился)

anonymous ()
Ответ на: Re: Ice от anonymous

Re: Ice

> Если нужен проверенный продукт совместимый со всем на свете (почти ;) ), нужны биндинги к С!!!, нужна шустрая супер платформенно-независимя сетевая либа... да и вообще Шилдт - супер мужик :), тут ACE + TAO + CAO .. плюс еще дохрена всяких служб бонустных, например RT Corba...

а еще не забудем про биндинги к различным GUI типа Qt & K... та-же ACE на пару с TAO отлично сосуществует с Qt3/4 и еще пачкой других толкитов и фреймворков. не знаю, как с этим у Ice.

// wbr

klalafuda ★☆☆ ()
Ответ на: Re: Ice от anonymous

Re: Ice

> Список можно было бы продолжить, но мне было достаточно и этого.

Судя по данному списку - сие просто заточено под локалку, by design. А вот кто игры на этом додумался делать, действительно, непонятно...

int19h ★★★★ ()
Ответ на: Re: Ice от klalafuda

Re: Ice

В принципе Ice не очень это надо.. ибо С++ :) и нет event loop-a (потоки).

Но у Ice есть еще одна фича, которая мне понравилась, хоть еще и кривовата... Freeze, т.е. перситентное хранение на базе тех-же slice деклараций...

В общем, если нужна фичастость применительно к языкам - Ice, если нужна переносимость и надежность - ACE/TAO :). Ну и не забываем о learning curve, у CORBA она огого :). Ice легче в освоении, т.к. эксплуатирует идеологию Java.

anonymous ()
Ответ на: Re: Ice от anonymous

Re: Ice

> В общем, если нужна фичастость применительно к языкам - Ice, если нужна переносимость и надежность - ACE/TAO :). Ну и не забываем о learning curve, у CORBA она огого :). Ice легче в освоении, т.к. эксплуатирует идеологию Java.

mnda, по поводу learning curve для CORBA не могу не согласиться.

// wbr

klalafuda ★☆☆ ()
Ответ на: Re: Ice от anonymous

Re: Ice

> а в CORBA одни POA/BOA новчика в ступор вводят :)

а что, BOA еще кому-то нужен? :)

// wbr

klalafuda ★☆☆ ()
Ответ на: Re: Ice от klalafuda

Re: Ice

> а что, BOA еще кому-то нужен? :) Backward compatibility :). А вообще конечно не нужен... это до кучи было (я когда изучал, начинал еще было BOA)

anonymous ()

Re: Ice

многие вопросы в документации спорные
некоторые решения интересны, но так-же достаточно спорные
....
меня очень сильно смущает
то что имеется очень сильная разница в скорости на linux и windows
на windows ice медленне чем TAO
можно предполагать
что всетаки в архитектуре они не выйграли а нашли какие-то оптимизации
для linux

yeolahim ()
Ответ на: Re: Ice от yeolahim

Re: Ice

Потому, что используют select под виндой для чтения неблокирующего
а ACE использует асинхронные сокеты (io completition port, вроде так зовется)

            if(wouldBlock())
            {
            repeatSelect:

                int rs;
                assert(_fd != INVALID_SOCKET);
                FD_SET(_fd, &_rFdSet);

                if(timeout >= 0)
                {
                    struct timeval tv;
                    tv.tv_sec = timeout / 1000;
                    tv.tv_usec = (timeout - tv.tv_sec * 1000) * 1000;
                    rs = ::select(static_cast<int>(_fd + 1), &_rFdSet, 0, 0, &tv);
                }
                else
                {
                    rs = ::select(static_cast<int>(_fd + 1), &_rFdSet, 0, 0, 0);
                }

anonymous ()
Ответ на: Re: Ice от anonymous

Re: Ice

наврал... ACE асинхронно использует WFMO_Reactor, которые работает чреез WaitForMutltiplyObjects для всего, в том числе и для чтения... а Ice только для connection/accept... по этому и разница такая...

anonymous ()
Ответ на: Re: Ice от anonymous

Re: Ice

> наврал... ACE асинхронно использует WFMO_Reactor, которые работает чреез WaitForMutltiplyObjects для всего, в том числе и для чтения... а Ice только для connection/accept... по этому и разница такая...

hm.. использовать select(2) в win32 окружении? IMHO это нонсенс :) тем более при наличии качественного wfmo. уж лучше бы врапер какой нарисовали, чтоль. правда, тут уже придется делать свой кроссплатформенный фреймворк a'la ACE и понеслось...

// wbr

klalafuda ★☆☆ ()
Ответ на: Re: Ice от klalafuda

Re: Ice

Вот именно по этому: Ice - легко и переносимо, но не всегда оптимально (фактически только 3 платформы) ACE - сложнее, но выжимает маскимум из всех платформ.

А TAO проигрывает Ice из-за кривой CORBA (имею ввиде перегруженную ненужными сложностями спецификацию) т.к. Ice на проядок проще. (например отсутствие C биндингов не спроста ;) )

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.