LINUX.ORG.RU

Опубликована библиотека CntmLib (C++)

 , ,


0

0

CntmLib предоставляет средства для:

  • управления временем жизни объектов с помощью подсчета ссылок;
  • синхронизации в многопоточных системах. Есть интеграция с библиотекой Qt3 в области синхронизации;
  • взаимодействия объектов через механизм событий/подписки на события. Реализованы синхронные и асинхронные события;
  • асинхронного выполнения методов объектов. Имеется возможность передавать произвольные аргументы и получать результат выполнения;
  • работы с потоками.
  • имеется довольно подробная документация.

>>> Описание

anonymous

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

Ответ на: комментарий от Sikon

Ага, а кроме как с QT эту библеотеку юзать нельзя? Интеграция с куте3 фича опциональная. Надо будет - прикрутят для qt4.

И вообще, гик перелогнись.

mono ★★★★★
()

Не смотря на то, что я знаю что такое C++, Qt и вообще библиотеки, я так и не понял из анонса что это такое и зачем оно надо.

Casus ★★★★★
()

Я не понял, а чем разработчикам сего велосипеда boost не понравился? Да и в Qt все эти механизмы давно есть...

anonymous
()
Ответ на: комментарий от Casus

>Не смотря на то, что я знаю что такое C++, Qt и вообще библиотеки, я так и не понял из анонса что это такое и зачем оно надо.

+1. Ну и да, кого они хотят удивить с Qt3, я тоже не понял.

JackYF ★★★★
()
Ответ на: комментарий от Voker57

>это qt для бедных?

Это очередной 2.5-колесный велосипед. Сидят вот люди, руки чешутся, дай, думают, нахерачу самую крутую библиотеку для всего на свете. Нахерачили, протестировали на паре usecase'ов - вроде работает. а потом шаг вправо, не работает, подопрем костылем, шаг влево, опять не работает, еще костыль, потом все перехерачили заново, что бы костыли убрать, так она до размеров ACE выросла, который компиляется дольше, чем ядро... Таких библиотек, как собак нерезаных, без знания их внутренностей использовать их в проекте себе дороже оказывается. Писать их дело, конечно, полезное, но для внутреннего использования и для саморазвития, но точно не для публикования, что бы поведать о себе миру. Будет в составе какого-нибудь продукта - можно оформить в виде отдельной библиотеки и выкладывать их вместе... А если сам не используешь, то и других не мучай...

anonymous
()

> Платформа ОС: GNU/Linux, в будущем, возможно, Windows

В топку!

anonymous
()

нафиг надо?

Разработчики лучше бы потратили свое время на улучшение boost
нафик очередной велосипед нагородил...
а из текста новости ваще почти нифика непонятно :)

Niki
()

Жесть, описание boost на английском проще читать, чем на русском описание этой либы...

Niki
()
Ответ на: комментарий от Sikon

> Закапывайте обратно.

Чем не устраивает QT? Вы пробывали писать на GTK? Сколько времени без перерыва вы можете на этом писать? Я попробовал -- не пошло.

localstorm
()
Ответ на: комментарий от localstorm

> Чем не устраивает QT? Вы пробывали писать на GTK? Сколько времени без перерыва вы можете на этом писать? Я попробовал -- не пошло.

Правильно писать "ниасилил"

anonymous
()

> Я не понял, а чем разработчикам сего велосипеда boost не понравился? Да и в Qt все эти механизмы давно есть...

> чем лучше boost'a?

1. Ничем boost'a не лучше, она его дополняет.

2. Отличия от boost'a:

- в boost'е есть механизмы умных указателей (smart_ptr), сигналов/слотов (signals), отложенных вызовов (function), синхронизации и потоков (thread). Однако эти механизмы слабо связаны друг с другом. В CntmLib эти механизмы работают вместе.

- Boost.Signal - не поддерживает многопоточность, Boost.Function - то поддерживает, то нет (http://lists.boost.org/Archives/boost/2007/03/117300.php). CntmLib - практически полностью многопоточная, по крайней мере все основные механизмы (для однопоточных приложений это недостаток, но библиотека и не особо расчитывалась на них).

3. Отличия от QT:

- QT не использует умные указатели (там есть GuardPtr, но они предохраняют, а не управляют);

- отложенные сигналы появились только в QT 4;

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

> +1. Ну и да, кого они хотят удивить с Qt3, я тоже не понял.

Мы никого не хотим удивить - просто сообщаем, что CntmLib может совместно использоваться с QT 3.

> Будет в составе какого-нибудь продукта - можно оформить в виде отдельной библиотеки и выкладывать их вместе...

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

Роман Овсеевич

anonymous
()

непонятно зачем это нужно, когда есть boost, в котором есть почти все, что тут реализовано, и сторонние проекты на базе буста, которые реализуют оставшуюся функциональность типа "активных объектов"

а учитывая С++0x, то вообще непонятно зачем это нужно

ott ★★★★★
()
Ответ на: комментарий от anonymous

вот как раз и хорошо, что эти вещи достаточно слабо связаны друг с другом, иначе получаются монстры, которые умеют все, но которые реально трудно использовать

ott ★★★★★
()
Ответ на: комментарий от anonymous

>Это сборщег мусора для плюсофф?

В том числе и он тоже. Однако если нужен просто сборщик мусора, то Boost.SmartPtr подойдет больше.

anonymous
()

гавноподелка, ненужна

anonymous
()
Ответ на: комментарий от anonymous

до чего безграмотный народ, не отличает гарбеж колектор, от смарт поинтеров, + в бусте нету никакого SmartPtr, иди в школе доучись детка, а потом на лор флудить возвращайся

anonymous
()
Ответ на: комментарий от anonymous

Лицензия не совместима с GPL. это хуже всего.

anonymous
()

90% отписавшихся плюсы знают на уровне полугода изучения в универе. 95% QT видели только пакеты в менеджере пакетов, 99,9% упоминают boost только потому, что знают о его существовании, но не знают его возможностей. Мало того, что тупизм сплошной, так еще и голословность. Читать комменты на ЛОРе - бред, больше этой ошибки не повторю...

anonymous
()
Ответ на: комментарий от anonymous

/me узнал, что только слышал слово boost, и ни разу им не пользовался. как интересно-то

ott ★★★★★
()
Ответ на: комментарий от anonymous

> Читать комменты на ЛОРе - бред, больше этой ошибки не повторю...

Welcome to L.O.R. ;)

Farcaller ★★
()

> После рассмотрения примеров их можно откомпилировать.

зачет!

Farcaller ★★
()
Ответ на: комментарий от anonymous

Наверное адекватней сие подделие сравнивать ни с boost, а с ACE.

П.С. по ссылкам не ходил :)

the_coder ★★
()

> * управления временем жизни объектов с помощью подсчета ссылок;

Java-ссылка?

> * синхронизации в многопоточных системах.

synchronized{} ?

> * взаимодействия объектов через механизм событий/подписки на события. Реализованы синхронные и асинхронные события;

Interface?

* работы с потоками.

Java Tread?

Что только не придумают люди лишь бы не пользоваться Java...

DOKA
()
Ответ на: комментарий от anonymous

Оп-па. :)

Спасибо за объяснение - это гораздо лучшие сведения, чем те, что в новости. Теперь мне стало хоть что-то понятно. Ну что ж, тогда удачи в развитии.

JackYF ★★★★
()
Ответ на: комментарий от anonymous

детко, в бусте есть scoped_ptr, shared_ptr, intruisive_ptr, соотвесвенно scoped/shared_array, но никакого SmartPtr там нету.

anonymous
()
Ответ на: комментарий от JackYF

> В Java нет typedef, поэтому Java-говно.

Приведи пример, когда без него нельзя жить.

> И ещё Java слишком многословна.

Ну да, x=++x++ рулит, коли любимый цвет глаз красный.

DOKA
()
Ответ на: комментарий от anonymous

молодец, сходил по ссылке, не поленился, перечислил. Когда до тебя дойдет что Boost.SmartPtr - это название библиотеки работы с умными указателями - сам станешь таким же умным.

anonymous
()
Ответ на: комментарий от DOKA

>>Приведи пример, когда без него нельзя жить.

Использование двух классов с одинаковыми именами, находящимися в разных пакетах от двух разных компаний.

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

> Использование двух классов с одинаковыми именами, находящимися в разных пакетах от двух разных компаний.

com.sun.MyClass com.myCompany.MyClass

чем так не устраивает?

DOKA
()
Ответ на: комментарий от DOKA

>Что только не придумают люди лишь бы не пользоваться Java...

Если нужно очень активное взаимодействие с ОС, использование математических библиотек, работа с 3-х мерной графикой и.т.д., то без плюсов может не удастся обойтись. В таком случае лучше иметь хоть какие-то возможности Java, чем стреляться от чистого C++.

halyavin
()

"...В названии класса сказано, что это синхронное событие, это значит, что оно тесно связано с понятием синхропространства (ознакомтесь с документацие по классу Cntm::SynchroSpace). Каждый обработчик события выполняется внутри определенного синхропространства (которое указывается тем или иным способом при свзывании события с обработчиком), вход в которое произведен в реентерабельном режиме. Если событие сгенерировано в некотором синхропространстве, то гарантируется, что вход в это синхропространство из обработчиков события будет произведен только после выхода из него потока выполнения алгоритма, который сгенерировал событие, причем, не имеет значение, в каком синхропространстве выполняется обработчик (в этом-же или другом). Т.о. обеспечивается защита от реентерабельного входа в объект, сгенерировавший событие (т.к. вход невозможен во все синхропространство, к которому принадлежит объект). Это правило имеет исключение, когда поток выполнения алгоритма вошел в синхропространство в реентерабельном режиме и произвел реентерабельный вход в синхропространство. В этом случае обработчики могут произвести свой вход в синхропространство в момент реентерабельного входа. Т.о. ход выполнения алгоритма может быть нарушен, но только при жестко определенных условиях: режим входа в синхропространство - реентерабельный и выполнение реентерабельного входа в синхропространство. Еще раз подчеркнем, что обработчик выполняется не в том синхропространстве, в котором сгенерировано событие (оно м.б. сгенерировано и вне синхропространства), а в указанном при связывании."

это кусок из http://cntmlib.sourceforge.net/reference/classCntm_1_1DeferEvent.html

KISS

:(

filin ★★
()
Ответ на: комментарий от DOKA

>>com.sun.MyClass com.myCompany.MyClass

>>чем так не устраивает?

Удлинни этот пример раза в три, чтобы не отрываться от реальности ;)

alex_custov ★★★★★
()
Ответ на: комментарий от DOKA

А, да, чуть не забыл. Ещё и операторы нельзя перегружать :)

В Java есть несколько удачных решений, имхо, например, обязательная обработка исключений. Но при этом программить на ней я не хочу.

А, ещё. Вот смеху было, когда была функция типа

"void f(short param);"

дык "f(5)" компилятор не принимал, надо было "f((short)5)" писать :)

JackYF ★★★★
()
Ответ на: комментарий от alex_custov

+1.

Дальше:

ну-ка, аналог мне, пожалуйста, вот этого:

---
typedef std::multimap< std::string, std::vector< std::pair<size_t, std::string> > > my_container_t;

typename my_container::iterator it;
typename my_container::const_iterator cit;
typename my_container::value_type find_object;
---

и вот этого:

---
for (size_t i = 0; i < n; ++i)
for (size_t j = 0; j < m; ++j)
{
const MyObject& obj_ref = values[i]->second[j].myObject;

f1(obj_ref);
f2(obj_ref);
obj_ref.setParam(2, i);
}
}
---
Заметь, во втором примере не происходит никакого копирования - это конструкция уровня компилятора.

JackYF ★★★★
()
Ответ на: комментарий от JackYF

Блин, форматирование второго куска кода слетело, но, думаю, и так понятно.

JackYF ★★★★
()
Ответ на: комментарий от filin

> "... синхропространства ... "

Это интересно, и может быть лучше явы, где только одно синхропространство.

> KISS

Вопрос надо по-другому ставить: как книжка называется, где об этом подробно пишут, с примерами?

_______________________________

Автору библиотеки:

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

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от DOKA

>> * взаимодействия объектов через механизм событий/подписки на события. Реализованы синхронные и асинхронные события;

>Interface?

Ты и яву не знаешь. Там это называется ActionListener и в том же духе (java.awt.event.*).

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от DOKA

>> * управления временем жизни объектов с помощью подсчета ссылок;

> Java-ссылка?

Придуманная санками Панацея В Виде Автоматического Подсчета Ссылок оказалось совсем не панацеей... и санкам пришлось ввести weak reference. И теперь, если мне в моей специфичной проге нужен еще какой особый reference, что, бежать лиза^W просить санки ввести его в яву?

Нет, я лучше заюзаю какую-нить либу по типу CntmLib.

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от DOKA

>> * управления временем жизни объектов с помощью подсчета ссылок;

>Java-ссылка?

Да, но сборщик мусора простой - не разрешает кольцевые ссылки объектов друг на друга, но зато и не тормозит.

>> * синхронизации в многопоточных системах

>synchronized{} ?

Не только. В яве каждый объект, использующий synchronized, имеет свой собственный мьютекс, что может приводить к взаимоблокировкам при взаимодействии объектов. CntmLib позволяет группе оъектов задать общий мьютекс, что облегчает борьбу с взаимоблокировками. Одновременно с синхронизацией решается задача диспетчерезации отложенных вызовов.

>> * взаимодействия объектов через механизм событий/подписки на события. Реализованы синхронные и асинхронные события;

> Interface?

Мне кажется, что в сишных библиотеках (QT, boost, libsig, CntmLib) сигналы/события более гибкие, чем в яве (по крайней мере, в качестве обработчика можно использовать произвольный метод с требуемой сигнатурой), да и дополнительные классы/интерфейсы не плодятся.

>>* работы с потоками.

>Java Tread?

Да, только для запуска потока не нужно ничего наследовать и вводить дополнительные поля, достаточно метода, реализующего поток. Пример: Thread(&Class1::ProcessUser)(firstName, lastName);

>Что только не придумают люди лишь бы не пользоваться Java...

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

>> KISS

> Вопрос надо по-другому ставить: как книжка называется, где об этом подробно пишут, с примерами?

Не знаю, не читал :). Вообще же синхронизация и события в CntmLib имеют близкое сходство с QT - QApplication, цикл обработки событий, сигналы/слоты.

> надо было сразу сказать, чем это лучше явы, и сразу дать побольше незнакомых слов...

Насчет незнакомых слов. Набрал в гугле "Синхропространство", выдал один результат, зато какой :)

СИНХРОПРОСТРАНСТВО: Я способен к выражению Знания. Возможно, существуют другие Познающие, которые хотели бы выразить свое Знание подобным образом.

Роман Овсеевич

anonymous
()
Ответ на: комментарий от www_linux_org_ru

>>Interface?

> Ты и яву не знаешь. Там это называется ActionListener и в том же духе (java.awt.event.*).

Лол. ActionListener - это и есть интерфейс.

DOKA
()
Ответ на: комментарий от halyavin

> Если нужно очень активное взаимодействие с ОС, использование математических библиотек, работа с 3-х мерной графикой и.т.д., то без плюсов может не удастся обойтись. В таком случае лучше иметь хоть какие-то возможности Java, чем стреляться от чистого C++.

Согласен. Просто я к тому, что есть множество повседневных задач, которые проще и удобнее решить в Java, но по инерции они пишутся на С++.

DOKA
()
Ответ на: комментарий от DOKA

> Согласен. Просто я к тому, что есть множество повседневных задач, которые проще и удобнее решить в Java, но по инерции они пишутся на С++.

Ага... стали мы задачу в яве решать, решили, сделали первый релиз, а потом выяснилось, что для расширения нам нужны перегруженные операторы и нормальные шаблоны, БЕЗ type erasure.

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