Увлекся С++. Посоветуйте OpenSource
От: Аноним  
Дата: 04.06.08 10:59
Оценка:
После Java увлекся С++. Посоветуйте OpenSource проект для анализа и изучения.
Re: Увлекся С++. Посоветуйте OpenSource
От: jazzer Россия Skype: enerjazzer
Дата: 04.06.08 11:00
Оценка: +3 -1 :))) :)))
Здравствуйте, Аноним, Вы писали:

А>После Java увлекся С++. Посоветуйте OpenSource проект для анализа и изучения.


www.boost.org
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: Увлекся С++. Посоветуйте OpenSource
От: Аноним  
Дата: 04.06.08 11:27
Оценка: :))
J>www.boost.org
Нельзя же так жестоко людей пугать!
Re: Увлекся С++. Посоветуйте OpenSource
От: LaptevVV Россия  
Дата: 04.06.08 13:44
Оценка:
Здравствуйте, Аноним, Вы писали:

А>После Java увлекся С++. Посоветуйте OpenSource проект для анализа и изучения.

Я б покопался в Nunit или чем-то подобном. Из буста — только отдельные темы для начала.
Например, интеллектуальные указатели.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Увлекся С++. Посоветуйте OpenSource
От: Vain Россия google.ru
Дата: 04.06.08 14:58
Оценка:
Здравствуйте, Аноним, Вы писали:

А>После Java увлекся С++. Посоветуйте OpenSource проект для анализа и изучения.

Я бы посоветовал изучать первым делом контейнерные библиотеки, т.к. они ближе к "структурам данных", что необходимо знать в первую очередь. Зная структуры данных можно переходить на алгоритмы.
Поиском таких библиотек можно начать с sourceforge.net.
Здесь одна, которая несколько отличается от STL подобных контейнеров.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[3]: Увлекся С++. Посоветуйте OpenSource
От: Аноним  
Дата: 05.06.08 11:45
Оценка:
Здравствуйте, Аноним, Вы писали:

J>>www.boost.org

А>Нельзя же так жестоко людей пугать!

Ну буст одним объёмом может напугать. А я могу предложить всего кил 250 сорцов в единственном файле.
Re: Увлекся С++. Посоветуйте OpenSource
От: Аноним  
Дата: 05.06.08 12:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>После Java увлекся С++. Посоветуйте OpenSource проект для анализа и изучения.


QT. Там хоть и препроцессор, но отличная вещь.
Re[2]: О Qt
От: Roman Odaisky Украина  
Дата: 05.06.08 13:08
Оценка: +4 -1 :)
Здравствуйте, Аноним, Вы писали:

А>>После Java увлекся С++. Посоветуйте OpenSource проект для анализа и изучения.


А>QT. Там хоть и препроцессор, но отличная вещь.


Архитектурно — гадость! Нарушения LSP на каждом шагу, запутанная политика владения, для любого расширения функциональности нужно делать subclassing и т. д.

Ее потому используют, что она много чего умеет, хоть и криво. Тот же Boost пытается делать всё идеологически правильно, но из этих двух библиотек одна умеет рисовать кнопочки, парсить XML и разговаривать с БД, а другая нет.
До последнего не верил в пирамиду Лебедева.
Re[3]: О Qt
От: Аноним  
Дата: 05.06.08 13:14
Оценка: +1
Здравствуйте, Roman Odaisky, Вы писали:

RO>Архитектурно — гадость! Нарушения LSP на каждом шагу, запутанная политика владения, для любого расширения функциональности нужно делать subclassing и т. д.


RO>Ее потому используют, что она много чего умеет, хоть и криво. Тот же Boost пытается делать всё идеологически правильно, но из этих двух библиотек одна умеет рисовать кнопочки, парсить XML и разговаривать с БД, а другая нет.


Да, чем ближе код к реальной жизни, тем меньше у него шансов быть правильным. Реальность слишком зыбка и непрозрачна.
Re[2]: Reason
От: Roman Odaisky Украина  
Дата: 05.06.08 13:41
Оценка: 10 (2) +1 :)

There are a couple of dozen guys in Bruce Lee’s pirate band, and they are now lined up along the trawler's railing, grinning, whistling, howling like wolves, and waving unrolled trojans in the air.
“Don’t worry, man, I’m not going to let ’em fuck you,” Fisheye says, grinning.
“What you gonna do,” Eliot says, “hand them a papal encyclical?”
“I’m sure they’ll listen to reason,” Fisheye says.





Здравствуйте, Vain, Вы писали:

V>Здесь одна, которая несколько отличается от STL подобных контейнеров.


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

>int i = string.Integer();


Это должно быть отдельной функцией! std::complex<double> z = string.??? MyBigInt bigint = string.??? То ли дело boost::lexical_cast.


> memcpy(string.Data+string.Size-1," world",String::Length("world");

> string.Terminate();

Это они серьезно?!


> /* Seek to the end of the file, the first parameter specifies the position and the second parameter specifies the origin. Origins are start < 0, current == 0, finish > 0 */

> file.Seek(0,1);

enum уже отменили?


// Open a folder and list its contents
Folder folder("/home");
folder.List();

// Now we can iterate through the files or folders
for (folder.Files.MoveFirst(); folder.Files.Has(); folder.Files.MoveNext())
{
/* The name is a pointer to a Path component, File and Folder both inherit from Path */
    String name = *folder.Files().Name
    name.Uppercase();
    folder.Files().Name->Replace(name);
    folder.Files().Construct();
    folder.Files().Create();
}
Здесь полдесятка граблей, не меньше.

// Create a set of pointers, and then destroy them
Set<Object*> set;
set.Insert(new String("five"));
set.Insert(new Number(5));
Number * number = new Number(5);
if (!set.Insert(number)
{
    delete number;
}
// No memory leaks here...
set.Destroy();
А это к вопросу о GC... rofl.

Map<Object *,String> map(Comparable::COMPARE_GENERAL);
map.Insert(new Number(10),"z");
map.Insert(new Number(5),"a");
Number number(5);
map.Insert(&number,"b");

/* because the insertion above will fail, we can safely destroy all of the keys. All maps let you destroy either the keys or the values or both */
map.DestroyKeys();
Так и представляю себе map без ключей, но со значениями.

MySql mysql;

SqlRecordset recordset;
SqlDatabase database(&mysql);
database.Open("test", "user", "pass", "localhost" ,3306);
database.Execute(recordset,"select * from test");
Почему mysql по указателю, а recordset по ссылке?

int count = recordset.Count;
if (recordset.Fields[0].Is("name"))
{
    String string = recordset(0,0);
}
А как же нестроковые значения? А NULL?

XmlDocument document;
document.Download("http://www.digg.com/rss/index.xml");
Без комментариев... Такое еще не страшно увидеть в C#, где есть сахар в виде void f(this SomeClass parameter). Но в C++?..

> char * host = SocketLibrary::ResolveHostname();

char*?!

> unsigned long addr = SocketLibrary::ResolveAddress();

А как же IPv6?

Time future;
future += 10; // 10 seconds from now

do
{
    if(listener.Accept(connection->Socket,connection->Address))
    {
        connections.Append(connection);
        connection = new Connection(Socket::SOCKET_MODE_ASYNCHRONOUS);
    }

    for(int i=0;i<connections.Length();++i)
    {
        String string;
        string.Allocate(1024);
        int read = connections[i]->Socket.Read(string.Data,string.Allocated);
        if (read == 0 && !connections[i]->Socket.IsReadable())
            connections.DeleteAt(i);
        else
           string.Size = read;
    }

    // Wait 100 milliseconds between accepting connections
    Thread::Sleep(100);
}
while(Time() < future);
Вот это подход! И зачем разработчики ОС мучаются с epoll, kqueue, IOCP... Нечего думать — трясти надо!




Now Hiro sees a nameplate tacked onto the control panel.

REASON
version 1.0B7
Gatling type 3mm hypervelocity railgun system
Ng Security Industries, Inc.
PRERELEASE VERSION—NOT FOR FIELD USE
DO NOT TEST IN A POPULATED AREA
— ULTIMA RATIO REGUM —
“See, I told you they’d listen to Reason,” Fisheye says, shutting down the whirling gun.

До последнего не верил в пирамиду Лебедева.
Re: Увлекся С++. Посоветуйте OpenSource
От: gear nuke  
Дата: 05.06.08 16:12
Оценка:
Здравствуйте, <Аноним>,

ИМХО, начинать стоит c HP STL — то, что легло в основу стандартной библиотеки и теперь является частью языка. Без ужасов с препроцессором, как в потомках...
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[3]: Reason
От: Vain Россия google.ru
Дата: 05.06.08 20:49
Оценка: :)
Здравствуйте, Roman Odaisky, Вы писали:

V>>Здесь одна, которая несколько отличается от STL подобных контейнеров.

RO>Заинтересовался, посмотрел. В хреновую сторону она отличается. Похоже, они решили сделать все ошибки, которые были накоплены за всю историю фреймворкострокения.
Я реализации не смотрел, мне больше интерфейсы понравились и названия, типа String/Substring..
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[3]: Reason
От: cencio Украина http://ua-coder.blogspot.com
Дата: 06.06.08 10:51
Оценка: :)
Здравствуйте, Roman Odaisky, Вы писали:


RO>Заинтересовался, посмотрел. В хреновую сторону она отличается. Похоже, они решили сделать все ошибки, которые были накоплены за всю историю фреймворкострокения.


наверное все это исправлено в платной комерческой версии
Re[3]: О Qt
От: Lorenzo_LAMAS  
Дата: 06.06.08 11:48
Оценка: +2
RO>Архитектурно — гадость! Нарушения LSP на каждом шагу, запутанная политика владения, для любого расширения функциональности нужно делать subclassing и т. д.
RO>Ее потому используют, что она много чего умеет, хоть и криво. Тот же Boost пытается делать всё идеологически правильно, но из этих двух библиотек одна умеет рисовать кнопочки, парсить XML и разговаривать с БД, а другая нет.

Нельзя ли чуть подробнее, что она криво делает из того, что умеет и почему все так плохо? Мне лично Qt очень нравится и кажется удобным и простым в использовании, и ДО ЛАМПЫ совершенно красоты и правильности дизайна QT или их отсутствие.
Of course, the code must be complete enough to compile and link.
Re[4]: О Qt
От: EyeOfHell Россия eyeofhell.habr.ru
Дата: 06.06.08 14:39
Оценка: +1

Нельзя ли чуть подробнее, что она криво делает из того, что умеет и почему все так плохо? Мне лично Qt очень нравится и кажется удобным и простым в использовании, и ДО ЛАМПЫ совершенно красоты и правильности дизайна QT или их отсутствие.


Например, позднее связывание объектов. Да еще препроцессором. Получается нечитаемый код, в котором object.method() может быть слинковано с любой функцией любого класса, и из кода мы это узнаем только после внимательного изучения. Отлаживать такие программы, опять же, не подарок.
Re[3]: О Qt
От: artem_korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 06.06.08 14:43
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

А>>> После Java увлекся С++. Посоветуйте OpenSource проект для анализа и изучения.

А>> QT. Там хоть и препроцессор, но отличная вещь.
RO> Тот же Boost пытается делать всё идеологически правильно, но из этих двух библиотек одна умеет рисовать кнопочки, парсить XML и разговаривать с БД, а другая нет.

Кстати, в Qt мне понравилась работа со слотами. Есть ли подобные вещи в других библиотеках?
С уважением, Artem Korneev.
Re[4]: О Qt
От: Константин Л. Франция  
Дата: 06.06.08 14:53
Оценка: :)
Здравствуйте, artem_korneev, Вы писали:

_>Здравствуйте, Roman Odaisky, Вы писали:


А>>>> После Java увлекся С++. Посоветуйте OpenSource проект для анализа и изучения.

А>>> QT. Там хоть и препроцессор, но отличная вещь.
RO>> Тот же Boost пытается делать всё идеологически правильно, но из этих двух библиотек одна умеет рисовать кнопочки, парсить XML и разговаривать с БД, а другая нет.

_>Кстати, в Qt мне понравилась работа со слотами. Есть ли подобные вещи в других библиотеках?


невнятная реализация. boost::function хотя-бы complie-time, плюс не требует дополнительных наследований, включения макросов
Re[4]: О Qt
От: Константин Л. Франция  
Дата: 06.06.08 14:54
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

RO>>Архитектурно — гадость! Нарушения LSP на каждом шагу, запутанная политика владения, для любого расширения функциональности нужно делать subclassing и т. д.

RO>>Ее потому используют, что она много чего умеет, хоть и криво. Тот же Boost пытается делать всё идеологически правильно, но из этих двух библиотек одна умеет рисовать кнопочки, парсить XML и разговаривать с БД, а другая нет.

L_L>Нельзя ли чуть подробнее, что она криво делает из того, что умеет и почему все так плохо? Мне лично Qt очень нравится и кажется удобным и простым в использовании, и ДО ЛАМПЫ совершенно красоты и правильности дизайна QT или их отсутствие.


оч часто заставляет наследоваться
Re[5]: О Qt
От: Cyberax Марс  
Дата: 06.06.08 14:56
Оценка:
Здравствуйте, Константин Л., Вы писали:

L_L>>Нельзя ли чуть подробнее, что она криво делает из того, что умеет и почему все так плохо? Мне лично Qt очень нравится и кажется удобным и простым в использовании, и ДО ЛАМПЫ совершенно красоты и правильности дизайна QT или их отсутствие.

КЛ>оч часто заставляет наследоваться
И?
Sapienti sat!
Re[6]: О Qt
От: Roman Odaisky Украина  
Дата: 06.06.08 15:14
Оценка: 3 (1)
Здравствуйте, Cyberax, Вы писали:

L_L>>>Нельзя ли чуть подробнее, что она криво делает из того, что умеет и почему все так плохо? Мне лично Qt очень нравится и кажется удобным и простым в использовании, и ДО ЛАМПЫ совершенно красоты и правильности дизайна QT или их отсутствие.

КЛ>>оч часто заставляет наследоваться
C>И?

И то, что я хочу модель, которая берет из БД только часть записей. Сделал SqlRelationalTableModelWithLimit: public QSqlRelationalTableModel, в которой определил setLimit(int, int = 0). Замечательно.

А теперь внимание, вопрос: как приделать setLimit к QSqlTableModel и QSqlQueryModel? Их тоже придется сабклассить, таким образом, одно и то же повторяется 3 раза!

Теперь LSP. Всем известный пример с квадратом и прямоугольником. Кто из них чей потомок? Никто ничей. Почему же QLayout::spacing() возвращает не то, что было задано с помощью QLayout::setSpacing, а -1, если динамический тип его — QGridLayout? А бедному юзеру каждый раз проверять.

Сигналы/слоты. На каждый из них нужно заводить функцию-член. Очень неудобно. QSignalMapper немного помогает, но всё равно неудобно.

Политика владения. Она каждый раз разная. Одной функции нужен указатель, полученный new, она ему сама сделает delete. В другом месте нужно передать указатель, а потом самому его забрать (например, функции QLayout::take*) и удалить.

QVariant. QVariant("hello").canConvert<int>() == true. QVariant(QVariant::Int)/*это NULL*/ == QVariant(0)/*это ноль*/.

Еще я наткнулся на один очень противный баг, но это нерепрезентативно, баги много где бывают, да и этот, по слухам, исправлен в версии 4.4.
До последнего не верил в пирамиду Лебедева.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.