Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

open-source на C++

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> open-source на C++
Имя
Сообщение << Старые топики   Новые топики >>
open-source на C++ - 2005-02-19 05:54:30   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Я тут решил выяснить как надо писать проги на C++. Синтаксис, семантику я знаю, но не умею применять. И неохота `изобретать велосипед''. Так вот, вопрос, не знает ли кто какой-нибудь open-source программы _хорошо_ написанной на C++? Хорошо — это значит как ядро Linux, которое я считаю лучшим примером того, как надо писать на C. И мне нужен такой пример только для C++.
Post #: 1
open-source на C++ - 2005-02-19 10:32:33   
jEnizix

Сообщений: 1797
Оценки: 0
Присоединился: 2004-12-30 11:03:50
Можеш посмотреть сорсы Миранды….
Post #: 2
open-source на C++ - 2005-02-19 10:55:05   
Lex_Voodoo

Сообщений: 7328
Оценки: 0
Присоединился: 2004-12-07 13:55:12
http://sourceforge.net/
Post #: 3
open-source на C++ - 2005-02-20 05:31:16   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
2 mkfs[sm=sm203.gif]: Ну блин [sm=em62.gif] я просил C++, а не C. Miranda как я успел заметить пример неумного программиривания на C, ребята даже не подумали о том чтобы не пользовать всякие M$ хедеры в реализации такой абсолютно системно-независимой вещи как сетевой протокол. Они случайно не у Гейтса зарплату получают?

2 Lex: Спасибо конечно, но я спрашиваю про конкретную программу, желая сэкономить себе пару суток времени поиска.

Может я недостаточно подробно объяснил что мне надо. Я хочу a) уметь писать систему на C++ (ядро оси, или TeX, или систему работы со звуком, или в конце концов ICQ сервер), я хочу b) видеть в чём преимущества C++ перед C, а то пока я вижу только недостатки.

У меня чисто абстрактный интерес, меня очень интересует именно системное программирование, или даже теория его. Я чётко знаю что например asm не подходит для этого, а C, Ada подходят, Java и Lisp тоже подходят, но уже с ограничениями. Я думаю что C++ во второй группе, то есть `системный язык общего назначения', но не могу это доказать даже себе: С++ слишком перегружен семантически. Я бы сам написал пример который ищу, но при моём понимании того как надо использовать всю эту семантику, даже если я забуду про работу, мне придётся потратить месяца два чтобы понять _всё_. Например что C++ — это не то что мне интересно. А я этого нехочу.
Post #: 4
open-source на C++ - 2005-02-20 16:28:46   
SomewhereSomehow

Сообщений: 66
Оценки: 0
Присоединился: 2004-06-17 22:15:49
Посмотри исходники вин2к, правда там с а не с++. Но это не суть важно…
Post #: 5
open-source на C++ - 2005-02-21 03:30:42   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Прикольная шутка. Ха-ха.
Post #: 6
open-source на C++ - 2005-02-26 09:41:48   
KsenZ

Сообщений: 23
Оценки: 0
Присоединился: 2004-07-14 11:26:35
2SomewhereSomehow
Гдеб их взять?
Post #: 7
open-source на C++ - 2005-02-27 17:14:12   
hokum

Сообщений: 20
Оценки: 0
Присоединился: 2004-10-12 06:33:34
Хех! " Miranda как я успел заметить пример неумного программиривания на C, ребята даже не подумали о том чтобы не пользовать всякие M$ хедеры в реализации такой абсолютно системно-независимой вещи как сетевой протокол. Они случайно не у Гейтса зарплату получают?" ???
А дрова для сетевой карты тоже платформенно-независимая вещь??? Одно дело протокол, а другое реализация. Есть 2 варианта оной: через API платформы или на асьме на сет карту непосредственно воздействовать… Спорим первый вариант выберешь! [sm=2.gif]
Post #: 8
open-source на C++ - 2005-02-28 02:26:46   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Ты не прав. Я буду использовать libc — стандартную библиотеку C (которая обеспечивает поддержку сети в любой оси ядро которой знает что такое сеть). А дрова сетевой карты, протокола ip… Дрова это дело ядра операционной системы. И пускай с этим работает ядро.
Post #: 9
open-source на C++ - 2005-03-02 17:38:57   
hokum

Сообщений: 20
Оценки: 0
Присоединился: 2004-10-12 06:33:34
Если б все так просто то никто сокеты не юзал бы. ты любую прогу сетевую кросплатформеную глянь примернотак:
#define WIN // or NIX

#ifdef WIN
#include<winsock.h>
#endif

#ifdef NIX
#include<…>
#endif

создание сокета также… best regards!!!!
Post #: 10
open-source на C++ - 2005-03-03 02:57:49   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
В любую сетевую кроссплатформенную??? Чего серьёзно? дай ссылку. А то я вижу такой бред впервые в твоём исполнении.

По моему вся эта хрень от недомыслия. Ежели пришется программа на C то за исключением особо специфичных ситуаций стандартная библиотека C грузится в адресное пространство процесса (это я к тому, что использование этих функций не увеличивает размер executable). И вызов socket даёт обычный дескриптор файла, реализация которого системно-зависима, но использование (в частности создание объекта типа FILE) остаётся неизменным. А потоковый io (fprintf, fscanf, fwrite, fread) это факт гораздо удобнее чем работа с winsock (ежели ты пользуешь C++ то можно пользовать объект iostream, и перегруженные операторы `<<', `>>'). Как следствие программа меньше, и на диске и в памяти (или ты из тех кто считает что программирование на asm, через win32api, даст программу ещё меньше???). Более того — программа быстрее. За виндозу ручаться не буду — не знаю что там прячется под win32api, а в *nix, libc stream io означает буферизацию io в адресном пространстве процесса, как следствие уменьшение числа переключений между кольцами защиты процессора, меньшее число всяких проверок прав доступа и тд. А это сильно влияет на производительность оси в целом.
Post #: 11
open-source на C++ - 2005-03-07 16:33:44   
hokum

Сообщений: 20
Оценки: 0
Присоединился: 2004-10-12 06:33:34
Знаешь, ругать WinAPI только за то, что он мелкософтовский глупо. Это сделано для облегчения взаимодействия с осью. Да и работа с проекцией файла в вынь мне показалась удобнее сишного файлового ввода-вывода.
Post #: 12
open-source на C++ - 2005-03-07 16:34:54   
hokum

Сообщений: 20
Оценки: 0
Присоединился: 2004-10-12 06:33:34
Родной API все равно лучше…
Post #: 13
open-source на C++ - 2005-03-08 05:18:10   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Какой ты упрямый. Если ты пишешь на дельфи, каким api ты пользуешься в первую очередь? родным для win32 или родным для дельфи? А чем C хуже?
И вообще это оффтоп. Кстати прогу я нашёл Ogre называется.
Post #: 14
open-source на C++ - 2005-03-08 06:47:21   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

—————-<BR>Цитата: Дата:07.03.2005 16:33:44, Автор:hokum ::
Знаешь, ругать WinAPI только за то, что он мелкософтовский глупо. &amp;amp;#1069;то сделано для облегчения взаимодействия с осью. Да и работа с проекцией файла в вынь мне показалась удобнее сишного файлового ввода-вывода.
—————-



Всё таки не могу удержатся и напишу насчёт этого. Я ругаю win32api не просто потому что он мелкомягкий, а потому что они его очень не здорово написали.
Проекция файла? ты имеешь в виду `memory mapped io'? это удобно для работы с большими (> размера оперативки) двоичными файлами. И если ось знает про это то libc даёт пользователю функцию mmap.
И вообще, прежде чем говорить что надо пользовать win32api, а не libc, читай
мануал по libc (потрать хотя бы два часа на прочтение его всего по диагонали [sm=em62.gif]).
И подумай о истинности например такого утверждения: если функция имеет более 4 аргументов, то это плохая функция.
Post #: 15
open-source на C++ - 2005-03-09 18:44:45   
hokum

Сообщений: 20
Оценки: 0
Присоединился: 2004-10-12 06:33:34
Никто не говорил, что C хуже C++ (C increment проще си расширенный) объектно-ориентированный си. А уж куда ты примеенишь объекты - тебе решать, мне они нужны нередко.
В делфи все зависит от цели: если ты пишешь "убийцу MS Office" WinAPI тебе скорее всего не понадобится, да и синтаксис winapi в делфи кривоватый за счет различий в си и пассале…
Post #: 16
open-source на C++ - 2005-03-11 09:30:52   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Блин меня уже утомило приводить доводы и получать в ответ одну и ту же фразу: "win32api всё равно лучше". Перечисляю все доводы в последний раз. И ежели желание спорить не пропало, то опровергай!

1. стандартная библиотека языка как провило более удобна для использования. Если конечно она содержит соответствующие возможности. Примеры:
a) printf ("#%d. Hello %s\n", i, name); Как это будет на win32api?
b) ООП. Я открыл сокет, pipe, vt, fifo, файл устройства, и потом даже не задумываюсь какой функцией в него писать (WriteFile или WriteConsole). fprintf и всё тут.

2. Размер программы. Не надо ещё раз писать что-нибудь типа qsort, или работу со строками.

3. Удобочитаемость. Согласись fprintf (file, "Hello world"), это понятнее чем write (fd, "Hello world", sizeof ("Hello world"));

4. Меньше багов. Ибо половина программы написана за тебя и сотни раз отлажена.

5. Скорость (?). У меня нет винды чтобы проверить на ней, но вот *nix пример который показывает что буферизация рулит (если кто сомневался). В принципе win32api, тоже может буферизировать, я просто на знаю. Но зная мелких предполагаю что нет. Итак пример:

#include <unistd.h>
#include <stdio.h>

static const int n_iter = 10000;
char data[] =
"Мой дядя самых честных правил,\n"
"Когда не в шутку занемог,\n"
"Он уважать себя заставил,\n"
"И лучше выдумать не мог,\n"
"Его пример другим наука;\n"
"Но, боже мой, какая скука\n"
"С больным сидеть и день, и ночь,\n"
"Не отходя ни шагу прочь!\n"
"Какое низкое коварство\n"
"Полуживого забавлять,\n"
"Ему подушки поправлять,\n"
"Печально подносить лекарство,\n"
"Вздыхать и думать про себя:\n"
"Когда же чёрт возьмёт тебя!\n\n";

#ifdef USE_STDIO
static FILE* fd;
void my_putc (int ch)
{
fputc (ch, fd);
}
int my_prepare_io ()
{
fd = fopen ("/dev/null", "w");
return fd != 0;
}
#else
static int fd;
void my_putc (int ch)
{
write (fd, &ch, 1);
}
int my_prepare_io ()
{
fd = open ("/dev/null", 0);
return fd >= 0;
}
#endif
int main ()
{
int i;
char *ptr;
if (!my_prepare_io ()) {
perror ("io:");
return 1;
}
for (i = 0; i < n_iter; i ++) {
for (ptr = data; *ptr != '\0'; ptr ++) {
my_putc ((int)*ptr);
}
}
return 0;
}

компилируем
$ gcc -O3 -o sys-io io.c
$ gcc -O3 -DUSE_STDIO -o stream-io io.c
смотрим время:
$ time sys-io
real 0m2.256s
user 0m1.162s
sys 0m1.094
$time stream-io
real 0m0.407s
user 0m0.403s
sys 0m0.004s

Комментарии излишни. Попробуй тот же тест провести в винде: win32api vs stdio или iostream или как там в дельфи эта хрень называется. Я буду очень удивлён если win32api не отстанет по времени раза в два.
Post #: 17
open-source на C++ - 2005-03-12 12:16:57   
hokum

Сообщений: 20
Оценки: 0
Присоединился: 2004-10-12 06:33:34
Стандартная библиотека или апи - все зависит от ситуации, да и если бы с стандартной библиотекой не было проблем апи бы не создавались. Да и невозможно все в языке заранее предусмотреть. Я в никсах не кодил, но всетаки уверен, что там есть свой API. Производительность не тестил, но зато глянул в книгу У.Р. Стивенса "UNIX: разработка сетевых приложений", твой способ нашел в самом начале, дальше используются никсовые хидеры для реализации сокетов. Отсюда вывод: твой способ годится или в простейших случаях, или для мазохистов, и никакой зверюга ICQ клиент тем способом писать не будет. Удобочитаемость обычно достигается нормальным стилем, а удобопрограммируемость нормальным api. А printfозаменителя в winapi нет, тока в .NET, который M$ скоро подтащит и под никсы, так что не забывай этих чуваков тк они о тебе заботятся [sm=1.gif]…
Ось кстати тоже отлажена, а ты можешь намудрить и со стандартной библиотекой.
З.Ы. про делфи не ко мне, больше года не нюхал.
Post #: 18
Страниц:  [1]
Все форумы >> [Веб-программинг] >> open-source на C++







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.