LINUX.ORG.RU

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

 , ,


0

0

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

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

>>> Описание

anonymous

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

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

>>>Interface?

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

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

Но интерфейс это не ActionListener.

Пример: придурок это человек. Но нельзя сказать что человек это придурок.

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

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

Если к плюсам ввести языковое расширение, которое бы могло запретить операции & и * в каком-либо прикладном коде (не везде конечно) и добавить библиотеку по типу этой, то получтся семенатически в точности ява. Вот только синтаксис будут местами крив.

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

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

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

Филин правильно заметил что надо рассказать подробнее о модели. Явно недостаточна документация только на классы, в расчете на то, что все понимают скрытые пружины твоего мышления (которые для тебя конечно очевидны).

У тебя похоже синхропространство это важная концепция библиотеки, она не сводится просто к мьютексу, и о ней надо подробно рассказать на первой странице, а не внутри класса. Обязательно с примерами кода, иллюстрирующими пользу от него (типа избежание дедлока, и еще...)

А без этой статьи

1) трудно оценить библиотеку

2) я уж лучше че-нить возьму попроще, что мне будет понятно до конца.

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

> Если к плюсам ввести языковое расширение, которое бы могло запретить операции & и * в каком-либо прикладном коде (не везде конечно) и добавить библиотеку по типу этой, то получтся семенатически в точности ява. Вот только синтаксис будут местами крив.

И этот человек мне говорил, что я не знаю Java...

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

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

Ну в конце концов ты прав, вон есть случаи когда надо скрипт сваять на bash/perl/php, также изредка можно что-то сваять на яве

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

> И этот человек мне говорил, что я не знаю Java...

Если бы знал, то вместо Interface написал бы чего другое

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

>> Если к плюсам ввести языковое расширение, которое бы могло запретить операции & и * в каком-либо прикладном коде (не везде конечно) и добавить библиотеку по типу этой, то получтся семантически в точности ява. Вот только синтаксис будут местами крив.

> И этот человек мне говорил, что я не знаю Java...

Мне не ясно: помимо обсуждения моих личных качеств, есть ли у тебя возражения на ту мысль что я высказал?

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

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

В смысле? Имелось в виду грабли или невозможность?

Вообще вроде как можно в каждом потоке крутить event loop, смотреть в сторону QThread::exec()

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

> Мне не ясно: помимо обсуждения моих личных качеств, есть ли у тебя возражения на ту мысль что я высказал?

В смысле, кроме того что она не отражает действительность? Да вроде нет.

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

> В смысле, кроме того что она не отражает действительность? Да вроде нет.

Ну что, давай сделаем сравнение по фичам... чего там в яве есть, а в плюсах -- нет?

А для начала -- повторение пойденного... где в яве:

1) перегрузка операторов

2) классы как локальные переменные, не захламляющие кучу

3) лямбды... щас поясню: у нас есть функция

double integral( int a, int b, DoubleFunctionFromDouble f )

Как в яве определить символ _X чтобы было можно записать:

double c=integral( 0, 1, _X/(_X+1) );

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

Еще вопросик -- на тему знаешь ли ты яву. Вот С++ код:

double integral( int a, int b, DoubleFunctionFromDouble f )

<...>

double c=integral( 0, 1, _X/(_X+1) );

Напиши аналог этого кода на яве (главный класс будет называться Test). Но с условием: функция x => x/(x+1) должна определяться внутри скобок integral, т.е. вместо _X/(_X+1). Нельзя определять эту функцию где-то далеко, например в виде метода класса Test.

Подсказка: это сделать можно. Заодно сравним выразительность двух языков.

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

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

JamVM ;) очередной релиз вышел на этой неделе - плохо искал

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

> JamVM ;) очередной релиз вышел на этой неделе - плохо искал

А под WinCE на ARM ахитектуре? А? (ibm-овскую не предлагатть, она за бабло).

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

> Заодно сравним выразительность двух языков.

Я так понял что ты хочешь сделать что-то похожее на определение временного класса из интерфейса/абстрактного класса с описанием недостающих (или перегрузкой существующих) методом в теле метода совершенно другого класса? Ну возможно, не очень красиво выглядит. Сам я никогда этим не пользуюсь, потому как неудобно это. Проще определить класс где-то вне, в чем проблема поступать именно так?

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

> Я так понял что ты хочешь сделать что-то похожее на определение временного класса

Анонимного, а не временного...

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

> из интерфейса/абстрактного класса с описанием недостающих (или перегрузкой существующих) методом в теле метода совершенно другого класса? Ну возможно, не очень красиво выглядит. Сам я никогда этим не пользуюсь, потому как неудобно это. Проще определить класс где-то вне, в чем проблема поступать именно так?

1. Обработчки событий в яве (да, это как раз про что CntmLib)

2. Лямбда функции в яве

Санки специально и давно сделали такой синтаксис, без него тяяяяжко во многих случая.

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

Вот тебе маленький примерчик, где у тебя видимо
вообще не получится вытащить Math.pow(x,nn) в метод класса JavaLambda6Test

Если получится без извращений, мне будет очень интересно :-)

class JavaLambda6Test {

  static abstract class Lambda<Res,Arg> {
    abstract public Res f( Arg x );
  }

  static Double integral01( Lambda<Double,Double> f ) {
    Double res=0.0; 
    for( int i=0; i<1000; i++ )
      res+=f.f(i/1000.0);
    return res/1000;
  }

  public static void main(String[] args) {
    for( int n=0; n<10; n++ ) {
      final int nn=n; 
      System.out.println( "intergral from 0 to 1 of x^" + n + " =" +
        integral01( new Lambda<Double,Double>() { public Double f(Double x){ return Math.pow(x,nn); } } )
      );
    }
  }
}

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

В прошлый пример для простоты я все собрал в один класс,
но это не жизненно. Вот исправленная версия:

class MathUtil
{
  static abstract class Lambda<Res,Arg> {
    abstract public Res f( Arg x );
  };
  static Double integral01( Lambda<Double,Double> f ) {
    Double res=0.0;
    for( int i=0; i<1000; i++ )
      res+=f.f(i/1000.0);
    return res/1000;
  }
};
class JavaLambda7Test
{
  public static void main(String[] args) {
    for( int n=0; n<10; n++ ) {
      final int nn=n;
      System.out.println( "intergral from 0 to 1 of x^" + n + " =" +
        MathUtil.integral01( new MathUtil.Lambda<Double,Double>() { public Double f(Double x){ return Math.pow(x,nn); } } )
      );
    }
  }
}

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

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

Интересно придумать случай, когда без анонимного класса совсем не обойтись.

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

> Интересно придумать случай, когда без анонимного класса совсем не обойтись.

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

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