open-source на C++
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
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++.
|
|
|
open-source на C++ - 2005-02-19 10:32:33
|
|
|
jEnizix
Сообщений: 1797
Оценки: 0
Присоединился: 2004-12-30 11:03:50
|
Можеш посмотреть сорсы Миранды….
|
|
|
open-source на C++ - 2005-02-19 10:55:05
|
|
|
Lex_Voodoo
Сообщений: 7328
Оценки: 0
Присоединился: 2004-12-07 13:55:12
|
http://sourceforge.net/
|
|
|
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++ — это не то что мне интересно. А я этого нехочу.
|
|
|
open-source на C++ - 2005-02-20 16:28:46
|
|
|
SomewhereSomehow
Сообщений: 66
Оценки: 0
Присоединился: 2004-06-17 22:15:49
|
Посмотри исходники вин2к, правда там с а не с++. Но это не суть важно…
|
|
|
open-source на C++ - 2005-02-21 03:30:42
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
Прикольная шутка. Ха-ха.
|
|
|
open-source на C++ - 2005-02-26 09:41:48
|
|
|
KsenZ
Сообщений: 23
Оценки: 0
Присоединился: 2004-07-14 11:26:35
|
2SomewhereSomehow Гдеб их взять?
|
|
|
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]
|
|
|
open-source на C++ - 2005-02-28 02:26:46
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
Ты не прав. Я буду использовать libc — стандартную библиотеку C (которая обеспечивает поддержку сети в любой оси ядро которой знает что такое сеть). А дрова сетевой карты, протокола ip… Дрова это дело ядра операционной системы. И пускай с этим работает ядро.
|
|
|
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!!!!
|
|
|
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 в адресном пространстве процесса, как следствие уменьшение числа переключений между кольцами защиты процессора, меньшее число всяких проверок прав доступа и тд. А это сильно влияет на производительность оси в целом.
|
|
|
open-source на C++ - 2005-03-07 16:33:44
|
|
|
hokum
Сообщений: 20
Оценки: 0
Присоединился: 2004-10-12 06:33:34
|
Знаешь, ругать WinAPI только за то, что он мелкософтовский глупо. Это сделано для облегчения взаимодействия с осью. Да и работа с проекцией файла в вынь мне показалась удобнее сишного файлового ввода-вывода.
|
|
|
open-source на C++ - 2005-03-07 16:34:54
|
|
|
hokum
Сообщений: 20
Оценки: 0
Присоединился: 2004-10-12 06:33:34
|
Родной API все равно лучше…
|
|
|
open-source на C++ - 2005-03-08 05:18:10
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
Какой ты упрямый. Если ты пишешь на дельфи, каким api ты пользуешься в первую очередь? родным для win32 или родным для дельфи? А чем C хуже? И вообще это оффтоп. Кстати прогу я нашёл Ogre называется.
|
|
|
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;#1069;то сделано для облегчения взаимодействия с осью. Да и работа с проекцией файла в вынь мне показалась удобнее сишного файлового ввода-вывода. —————-
Всё таки не могу удержатся и напишу насчёт этого. Я ругаю win32api не просто потому что он мелкомягкий, а потому что они его очень не здорово написали. Проекция файла? ты имеешь в виду `memory mapped io'? это удобно для работы с большими (> размера оперативки) двоичными файлами. И если ось знает про это то libc даёт пользователю функцию mmap. И вообще, прежде чем говорить что надо пользовать win32api, а не libc, читай мануал по libc (потрать хотя бы два часа на прочтение его всего по диагонали [sm=em62.gif]). И подумай о истинности например такого утверждения: если функция имеет более 4 аргументов, то это плохая функция.
|
|
|
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 в делфи кривоватый за счет различий в си и пассале…
|
|
|
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 не отстанет по времени раза в два.
|
|
|
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]… Ось кстати тоже отлажена, а ты можешь намудрить и со стандартной библиотекой. З.Ы. про делфи не ко мне, больше года не нюхал.
|
|
|
|
|