The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

BitTorrent-клиент Transmission переходит с Си на Си++, opennews (??), 13-Сен-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


118. "BitTorrent-клиент Transmission переходит с Си на Си++"  +/
Сообщение от тоже Анонимemail (ok), 13-Сен-21, 15:28 
> писать на нём быстрее

Этим могут похвастаться очень многие модные языки.
Но на Крестах быстрее еще и исполнять.
А главное, почему сабж - на Крестах быстрее ЧИТАТЬ.
Поддержка и развитие низкоуровневого кода - боль, которую Кресты за счет ООП делают куда более терпимой.

Ответить | Правка | Наверх | Cообщить модератору

147. "BitTorrent-клиент Transmission переходит с Си на Си++"  +/
Сообщение от Аноним (147), 13-Сен-21, 17:44 
>Поддержка и развитие низкоуровневого кода - боль, которую Кресты за счет ООП делают куда более терпимой.

Берёшь GLib и GObject и кресты нафиг не нужны.

Ответить | Правка | Наверх | Cообщить модератору

159. "BitTorrent-клиент Transmission переходит с Си на Си++"  +/
Сообщение от тоже Аноним (ok), 13-Сен-21, 19:05 
> Берёшь GLib и GObject и кресты нафиг не нужны.

Transmission любят запихнуть во всякие устройства со странной архитектурой и экономией байтиков.
Не факт, что на любом из них есть GLib.

Ответить | Правка | Наверх | Cообщить модератору

267. "BitTorrent-клиент Transmission переходит с Си на Си++"  +/
Сообщение от Аноним (147), 14-Сен-21, 12:37 
>Transmission любят запихнуть во всякие устройства со странной архитектурой и экономией байтиков. Не факт, что на любом из них есть GLib.

Скажу по-секрету — glib потребляет меньше памяти, чем C++ stdlib.

Ответить | Правка | Наверх | Cообщить модератору

288. "BitTorrent-клиент Transmission переходит с Си на Си++"  +1 +/
Сообщение от Аноним (286), 14-Сен-21, 16:58 
Ложь
Ответить | Правка | Наверх | Cообщить модератору

160. "BitTorrent-клиент Transmission переходит с Си на Си++"  +/
Сообщение от Аноним (87), 13-Сен-21, 19:33 
В С нету деструкторов и умных указателей, а значит все эти GObject-ы надо будет удалять вручную, не забывая это делать и при return в середине фнукции. Ну или делать goto к концу функции, где всё освобождаться будет. Неудобно.

Ну и, помнится, все эти сишные библиотеки контейнеров требуют постоянного кастинга объектов через void* или использования макросов, потому что в С нет ни темплейтного, ни наследовательного полиморфизма.

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

Ответить | Правка | К родителю #147 | Наверх | Cообщить модератору

214. "BitTorrent-клиент Transmission переходит с Си на Си++"  +/
Сообщение от Аноним (214), 14-Сен-21, 01:52 
struct T *t;
void *p = t;
t = p;

В сях не нужен каст для присваивания между void * и T *

Ответить | Правка | Наверх | Cообщить модератору

216. "BitTorrent-клиент Transmission переходит с Си на Си++"  +1 +/
Сообщение от Аноним (216), 14-Сен-21, 02:05 
> не нужен каст для присваивания между void * и T *

Будто это что-то хорошее.

Ответить | Правка | Наверх | Cообщить модератору

226. "BitTorrent-клиент Transmission переходит с Си на Си++"  +/
Сообщение от Аноним (87), 14-Сен-21, 03:08 
Хорошо, пускай явный каст необязателен. Его отсутствие потом кстати приводит к некомпилянию этого же кода С++ компилятором, ну да ладно. Но неявный каст может и похуже явного будет. Потому что сразу лишает компилятор возможности проверить корректность типов, и теперь уже программисту надо следить, не ошибся ли он там с неявным кастингом, и правильного ли типа объект по указателю расположен.
Ответить | Правка | К родителю #214 | Наверх | Cообщить модератору

235. "BitTorrent-клиент Transmission переходит с Си на Си++"  +/
Сообщение от Аноним (235), 14-Сен-21, 05:42 
я вот всё не понимаю, о каких ошибках вы всё время говорите? в стандарте сказано: все указатели могут быть приведены к void* и обратно в любой. то, что ты перед приведением из void* ставишь (T*) - что меняет? в примере: a = b; или a = (Т*)b. - смысл то в чём? что программисты настолько тупые, что регулярно меняют тип переменной a? и по всему проекту начинают сыпаться сегфолты? господи, страшно за этих людей.
Ответить | Правка | Наверх | Cообщить модератору

266. "BitTorrent-клиент Transmission переходит с Си на Си++"  +/
Сообщение от Аноним (87), 14-Сен-21, 12:05 
Посмотрите пример с qsort() в #215.

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

Ну, допустим, пофиксили. А потом ещё приходит другой разработчик и решает прорефакторить первую часть кода, меняет там тип, а про вторую часть кода не знает и соответственно там тип не меняет. И опять дебаг по новой.

Ответить | Правка | Наверх | Cообщить модератору

215. "BitTorrent-клиент Transmission переходит с Си на Си++"  +1 +/
Сообщение от Аноним (216), 14-Сен-21, 02:01 
> помнится, все эти сишные библиотеки контейнеров требуют постоянного кастинга объектов через void*

Классическим примером можно назвать qsort() с вызовами коллбэка для каждой пары сравниваемых элементов и побайтовыми перестановками неотсортированных значений. Разумеется, без каких-либо проверок соответствия типа сортируемых элементов типу того, что сравнивает коллбэк-компаратор.

Ответить | Правка | К родителю #160 | Наверх | Cообщить модератору

238. "BitTorrent-клиент Transmission переходит с Си на Си++"  +1 +/
Сообщение от aa (?), 14-Сен-21, 07:30 
всё потому что С считает программиста достаточно сообразительным и дальновидным.
Если хозяин сказал, что надо сортировать флоаты используя функцию сравнения интов и переставляя только пару первых байт от каждого значения, значит так надо.
Ответить | Правка | Наверх | Cообщить модератору

256. "BitTorrent-клиент Transmission переходит с Си на Си++"  +2 +/
Сообщение от Аноним (216), 14-Сен-21, 10:54 
Только вот коллбэк и побайтовая перестановка ещё и на производительности не лучшим образом сказываются.
Ответить | Правка | Наверх | Cообщить модератору

232. "BitTorrent-клиент Transmission переходит с Си на Си++"  +1 +/
Сообщение от funny.falcon (?), 14-Сен-21, 05:23 
Темплейтный полиморфизм есть: https://github.com/attractivechaos/klib/blob/master/khash.h
Ответить | Правка | К родителю #160 | Наверх | Cообщить модератору

270. "BitTorrent-клиент Transmission переходит с Си на Си++"  +/
Сообщение от Аноним (87), 14-Сен-21, 13:11 
Вернее не темплейтный, а дефайновый. И это один из тех велосипедов, которые изобретают крупные проекты на С, которые сталкиваются с ограниченностью С, но всё равно не хотят просто перейти на С++ и использовать нормальные темплейты и прочие ништяки С++.
Ответить | Правка | Наверх | Cообщить модератору

261. "BitTorrent-клиент Transmission переходит с Си на Си++"  +/
Сообщение от anonymous (??), 14-Сен-21, 11:12 
А что мешает писать конструкторы и деструктор на Си? Семантически будет то же самое. Просто синтаксически это будет оформлено как отдельные функции.
Ответить | Правка | К родителю #160 | Наверх | Cообщить модератору

269. "BitTorrent-клиент Transmission переходит с Си на Си++"  +/
Сообщение от Аноним (87), 14-Сен-21, 13:03 
В том то и дело, что не то же самое. Потому что они не будут вызываться автоматически.

В С++ если я сделаю return из середины функции - у меня вызовутся деструкторы всех уже созданных объектов и мне не нужно думать о том, сколько cleanup-функций вызывать, а перед каждым return их может быть разное количество. И не надо проверять все return перед добавлением нового объекта с деструктором в функцию. При чём деструкторы - это не только автоматическое освобождение памяти. Это и автоматическое закрытие файлов, сетевых соединений, хэндлов баз данных и прочее. А в С всё вручную надо делать и легко что-то забыть.

Автоматический вызов конструкторов - тоже важная вещь. Например, без него затруднительно реализовать  автоматический подсчёт ссылок, как, например, в shared_ptr. А ещё конструкторы могут требовать обязательные параметры, чтобы предотвращать создание невалидных объектов.

Ответить | Правка | Наверх | Cообщить модератору

171. "BitTorrent-клиент Transmission переходит с Си на Си++"  +/
Сообщение от Аноним (71), 13-Сен-21, 20:44 
Ну костыли же эта ваша GLib.
Ответить | Правка | К родителю #147 | Наверх | Cообщить модератору

268. "BitTorrent-клиент Transmission переходит с Си на Си++"  –1 +/
Сообщение от Аноним (147), 14-Сен-21, 12:42 
Всё лучше, чем С++
Ответить | Правка | Наверх | Cообщить модератору

272. "BitTorrent-клиент Transmission переходит с Си на Си++"  +/
Сообщение от Аноним (87), 14-Сен-21, 13:32 
STL:

std::vector<int> v = { 1, 2, 3 };

Glib:

GArray∗ a = g_array_new(FALSE, FALSE, sizeof(int));
int vals[] = { 1, 2, 3 };
g_array_append_vals(a, vals, sizeof(vals)/sizeof(vals[0]));
g_array_free(a, FALSE);

Не знаю как кому, а мне STL больше нравится, чем Glib.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру