The OpenNET Project / Index page

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



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

Оглавление

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

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


16. "BitTorrent-клиент Transmission переходит с Си на Си++"  +5 +/
Сообщение от Zenitur (ok), 13-Сен-21, 12:35 
> Основной причиной перехода всего проекта на C++ называется ощущение того, что при внесении изменений в libtransmission постоянно приходится изобретать колесо, при наличии готовых решений подобных задач в стандартной библиотеке C++ (например, потребовалось создание собственных функций tr_quickfindFirstK() и tr_ptrArray () при наличии std::partial_sort() и std::vector()), а также предоставление в С++ более продвинутых средств для проверки типов.

Для меня, с точки зрения пользователя, сишный код лучше. Когда компилируешь KDE и GNOME, первый компилируется страшно долго, а вывод при компиляции громоздкий. Второй компилируется быстро и с простым и понятным выводом. Из-за чего создаётся ощущение, что сишный код - маленький и быстрый, а код C++ - жирный и тормозной

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

28. "BitTorrent-клиент Transmission переходит с Си на Си++"  +5 +/
Сообщение от Аноним (28), 13-Сен-21, 12:47 
Пользователь ничего не компиляет, свечение глаз уже не модно.
Ответить | Правка | Наверх | Cообщить модератору

33. "BitTorrent-клиент Transmission переходит с Си на Си++"  –3 +/
Сообщение от пох. (?), 13-Сен-21, 12:50 
Пользователь просто пользуется mTorrent, угу.

Впопенсорсе у пользователей уже не модно, они ведь - пользователи.

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

74. "BitTorrent-клиент Transmission переходит с Си на Си++"  +/
Сообщение от Аноним (71), 13-Сен-21, 14:10 
Так у вантузпользователей и не было никогда модно. Большинству из них даже простительно не знать, что такое исходный код.
Ответить | Правка | Наверх | Cообщить модератору

76. "BitTorrent-клиент Transmission переходит с Си на Си++"  +/
Сообщение от пох. (?), 13-Сен-21, 14:12 
> Так у вантузпользователей и не было никогда модно. Большинству из них даже
> простительно не знать, что такое исходный код.

что-то такое, ебилдов чего вы вечно ждете, ага.

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

174. "BitTorrent-клиент Transmission переходит с Си на Си++"  –1 +/
Сообщение от нах.. (?), 13-Сен-21, 21:07 
У вас странное мнение. Если ктото чтото делает то он светится.
Ответить | Правка | К родителю #28 | Наверх | Cообщить модератору

37. "BitTorrent-клиент Transmission переходит с Си на Си++"  –2 +/
Сообщение от Аноним (37), 13-Сен-21, 12:54 
Второй - это для которого раст собирать нужно?
Ответить | Правка | К родителю #16 | Наверх | Cообщить модератору

201. "BitTorrent-клиент Transmission переходит с Си на Си++"  +/
Сообщение от Alladin (?), 13-Сен-21, 23:55 
Зачем собирать отдельно rust если можно не собирать?
Ответить | Правка | Наверх | Cообщить модератору

60. "BitTorrent-клиент Transmission переходит с Си на Си++"  +/
Сообщение от Аноним (60), 13-Сен-21, 13:50 
Само название говорит за себя. Гном маленький и ограниченный.
Ответить | Правка | К родителю #16 | Наверх | Cообщить модератору

61. "BitTorrent-клиент Transmission переходит с Си на Си++"  +2 +/
Сообщение от Аноним (71), 13-Сен-21, 13:54 
А никогда не задумывался, почему? В C++ есть развитые шаблоны (да, compile time), чем Сишка похвастать не может.
Ответить | Правка | К родителю #16 | Наверх | Cообщить модератору

172. "BitTorrent-клиент Transmission переходит с Си на Си++"  –1 +/
Сообщение от _ (??), 13-Сен-21, 21:05 
но зачем шаблоны в языке? почему не использовать m4, например?
Ответить | Правка | Наверх | Cообщить модератору

304. "BitTorrent-клиент Transmission переходит с Си на Си++"  +/
Сообщение от Аноним (304), 15-Сен-21, 10:52 
m4 умеет распознавать в коде классы и добавлять методы в интерфейс?
Ответить | Правка | Наверх | Cообщить модератору

64. "BitTorrent-клиент Transmission переходит с Си на Си++"  +3 +/
Сообщение от Аноним (87), 13-Сен-21, 13:56 
С++ действительно компиляется медленнее, зато писать на нём быстрее. И гораздо меньше велосипедов надо изобретать. Что в проекте Transmission тоже заметили. А если громоздкий вывод - так это надо ворнинги фиксить, и это зависит от программистов, а не от языка.
Ответить | Правка | К родителю #16 | Наверх | Cообщить модератору

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
Добавить, Поддержать, Вебмастеру