LINUX.ORG.RU

Какие преимущества я получу, перейдя с Python на C?

 ,


1

2

Вот сижу я, говнякаю на питончике одной рукой. Получается очень быстро. Но все говорят, что питон убог. А какие преимущества получу я, как питонист, если перейду на эту вашу сишку?

Ответ на: комментарий от anonymous

Так он до сих пор в зачатке, так что утверждение верное.

token_polyak ★★★★★
()
Ответ на: комментарий от Harald

и использование goto даёт наиболее простой код из возможных вариантов

Что из этого проще и понятнее?

CObjectDeleter<Object1, void, DeleteObject1> obj1(NewObject1());
if (obj1 == NULL) return ERROR_OBJECT1;

CObjectDeleter<Object2, void, DeleteObject2> obj2(NewObject2());
if (obj2 == NULL) return ERROR_OBJECT2;

CObjectDeleter<Object3, void, DeleteObject3> obj3(NewObject3());
if (obj3 == NULL) return ERROR_OBJECT3;

return Setup(obj1.Detach(), obj2.Detach(), obj3.Detach());
statut_t err;

Object1 *obj1 = NewObject1();
if (obj1 == NULL) {err = ERROR_OBJECT1; goto err1;}

Object2 *obj2 = NewObject2();
if (obj2 == NULL) {err = ERROR_OBJECT2; goto err2;}

Object3 *obj3 = NewObject3();
if (obj3 == NULL) {err = ERROR_OBJECT3; goto err3;}

return Setup(obj1, obj2, obj3);

err3:
DeleteObject2(obj2);

err2:
DeleteObject1(obj1);

err1:
return err;

Исходник CObjectDeleter.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 2)
Ответ на: комментарий от X512

приведённые куски не эквивалентны по поведению, в первом случае созданные объекты не уничтожаются при ошибке

Harald ★★★★★
()
Ответ на: комментарий от Harald

в первом случае созданные объекты не уничтожаются при ошибке

Ещё как уничтожаются. Для чего CObjectDeleter?

X512 ★★★★★
()
Ответ на: комментарий от X512

Код на C намного понятнее, а приплюснутый писался для каких-то рептилоидов. Заметь, красивей != лучше. C++ страдает от типичного проклятья лиспа.

anonymous
()
Ответ на: комментарий от Stanson

все ОС написанные на С++ более убоги чем линукс

многопоточность, микроядерность, поддержку многопроцессорных архитектур, 64-битная журналируемая файловая система - это BeOS в 90 годах, когда линукс был не то что убог, он был в зачаточном состянии. Если бы в него IBM не вложила денег он в нем бы и остался. С точки зрения архитектуры линукс легаси-говно, так писали в 80 годах, и все осталось.

anonymous
()
Ответ на: комментарий от X512

Для чего CObjectDeleter?

какая-то неочевидная портянка на 292 строчки, из-за которой нужно лезть в другой файл и долго втыкать на тему, что же она делает :)

Harald ★★★★★
()
Ответ на: комментарий от anonymous

Если бы в него IBM не вложила денег он в нем бы и остался.

Если бы у Лизы был член, то она был бы… Постойте, постойте, он ведь у Лизы и так есть.

anonymous
()
Ответ на: комментарий от anonymous

Ну и где эта BeOS? А сдохла она. Если бы не гайка, про неё вспоминали бы не чаще чем про OS/2 в которую IBM вложила тогда гораздо больше денег чем в линукс.

Stanson ★★★★★
()
Ответ на: комментарий от fsb4000

Средний растолюб или плюсист не напишет компилятор раста или плюсов, а средний сишник напишет компилятор С.

По этому критерию лучший язык это Forth а не Си.

anonymous
()

Можно на чем угодно писать. Тебе для чего? Цель какая, что хочешь сделать?

gobot ★★★★
()
Ответ на: комментарий от Harald

долго втыкать на тему, что же она делает :)

Она вызывает функцию - третий аргумент шаблона когда указатель выходит из области видимости и он != NULL. Примерно тоже что и std::unique_ptr, но с функцией в качестве деструктора.

Это в основном нужно для взаимодействия с кодом на Си, если всё на C++, то можно использовать обычный std::unique_ptr.

X512 ★★★★★
()
Ответ на: комментарий от Stanson

Там же где остальные Sun, Dec со своими системами. Но это никакого отношения к тому, что на C++ написали полноценную систему не имеет.

anonymous
()
Ответ на: комментарий от anonymous

Там же где остальные Sun, Dec со своими системами. Но это никакого отношения к тому, что на C++ написали полноценную систему не имеет.

Но в долгосрочной перспективе C в этой сфере оказался более живучим, что и требовалось доказать.

anonymous
()
Ответ на: комментарий от X512

и эту наркоманию ты называешь легко читаемой

Harald ★★★★★
()
Ответ на: комментарий от anonymous

Я до сих пор не понимаю почему их так бомбит от if и goto.

Если бы ты писал или хотя бы видел код на старом бейсике, еще с номерами строк, тебя бы тоже бомбило.

anonymous
()
Ответ на: комментарий от X512

я бы на С всегда к goto добавлял бы Pool, который бы владел всеми ресурсами.

Плюс в том, что у нас всегда одна метка. И в том что при рефакторинге сохраняется порядок уничтожения объектов в обратном порядке создания. С несколькими метками, метки тоже придётся менять местами при рефакторинге…

statut_t err;

Pool p = PoolInit();
Object1 *obj1 = (Object1 *)PoolPush(&p, NewObject1(), DeleteObject1);
if (obj1 == NULL) {err = ERROR_OBJECT1; goto error;}

Object2 *obj2 = (Object2 *)PoolPush(&p, NewObject2(), DeleteObject2);
if (obj2 == NULL) {err = ERROR_OBJECT2; goto error;}

Object3 *obj3 = (Object3 *)PoolPush(&p, NewObject3(), DeleteObject3);
if (obj3 == NULL) {err = ERROR_OBJECT3; goto error;}

err = Setup(obj1, obj2, obj3);
PoolPop(&p, obj1);
PoolPop(&p, obj2);
PoolPop(&p, obj3);

error:
PoolDestroy(&p);
return err;
fsb4000 ★★★★★
()
Ответ на: комментарий от anonymous

Ну статистика такова - на сишечке выжило систем 5. На С++ ни одной. Даже EPOC32/Symbian умудрился сдохнуть.

Stanson ★★★★★
()
Ответ на: комментарий от Harald

Нужны для освобождения ресурсов в том же порядке, что и выделение, и использование goto даёт наиболее простой код из возможных вариантов

Присваивание пустых объектов (или обнуление unique_ptr как предлагали выше) в нужном порядке перед выходом из функции еще проще.

anonymous
()
Ответ на: комментарий от fsb4000

я бы на С всегда к goto добавлял бы Pool

И получить runtime overhead на пустом месте. CObjectDeleter полностью инлайнится и после компиляции вообще невозможно узнать что он использовался.

X512 ★★★★★
()
Ответ на: комментарий от anonymous

Просто виндовс и юникс уже тогда разделили рынок. А С++ как язык системного программирования сейчас используют очень крупные компании типа амазона.

anonymous
()
Ответ на: комментарий от Stanson

Да ну.

IncludeOS is a minimal, open source, unikernel operating system for cloud services and IoT. IncludeOS allows users to run C++ applications in the cloud without an operating system. IncludeOS adds operating system functionality to an application allowing oneself to create a ‘virtual machine’ for an application.

IncludeOS applications boot in tens of milliseconds and require only a few megabytes of disk and memory.

Сейчас майнстрим - облачные вычисления, про линукс и винду скоро все забудут.

Так что деды учите матчасть.

https://www.ubuntupit.com/best-cloud-os-the-experts-recommendation/

anonymous
()

Если говорить именно про C++, то Вы получите особое мазохистско-эстетическое удовольствие, что заставит Вас навсегда полюбить этот прекрасный язык. Начните с версии, которая была до c++11, без лямбд, замыканий, auto и for each. Когда был один убогий и бесполезный умный указатель. Без всех этих вещей окунитесь в мир алгоритмов STL с функторами и итераторами, создаваемыми при помощи хитроумных шаблонов. Примените многоэтажные иерархии абстрактных классов, держа в памяти всякие конструкторы копирования и виртуальные деструкторы…

Привыкли к тому, что всегда можете перехватить исключение, к стэк-трейсу, который подробно расскажет о Ваших ошибках? В C++ никогда не знаешь что тебе вернётся, откуда и почему оно всё молча падает. Настоящий экстрим! Красота!

И это только начало. Окунитесь в С++ и вам гарантирован мир незабываемых острых ощущений. А когда Вы пройдёте всё это, то Вам уже будет не важно, что там хотел пользователь, ибо ничего не стоят интересы человека, который не постиг STL во всей его красе.

Kogrom
()
Ответ на: комментарий от anonymous

А при чём тут приложения? Неважно где они там запускаются, железу по-любому нужна ОС чтобы этим приложениям давать ввод-вывод. А чтобы это делать нужны драйвера. А драйвера на цепепе и других «правильных» язычках, увы, не пишутся. В той же IncludeOS всё что относится к железу - по сути обычная сишечная лапша с байтолюбством по полной программе в файле *.cpp.

Stanson ★★★★★
()

А какие преимущества получу я, как питонист, если перейду на эту вашу сишку?

Если будешь собирать код с отладочной информацией, то вместо невнятного трейса в питоне, будешь получать няшную корочку, по которой можно будет пошастать в gdb по фреймам и тоже ничего не понять.

kawaii_neko ★★★★
()
Ответ на: комментарий от Stanson

А драйвера на цепепе и других «правильных» язычках, увы, не пишут

В Windows драйвера в основном только на С++ и пишутся.

Уровень экспертов лора пробивает очередное дно. Они кроме линукса ничего не видели, да и тот одним глазом…

fsb4000 ★★★★★
()
Ответ на: комментарий от fsb4000

В Windows драйвера в основном только на С++ и пишутся.

[https://github.com/microsoft/Windows-driver-samples/blob/master/audio/sysvad/adapter.cpp](Официальный пример). Чёт кроме static_cast я ничего от плюсов не увидел. Замени их на сишные касты и ничего по сути не изменится. Сплошная сишная лапша.

anonymous
()
Ответ на: комментарий от sniper21
Переход на более эффективный язык программирования уже кардинально повышает скорость выполнения кода.   
Например, программа на Java будет выполняться в 10,8 раз быстрее, а программа на С — ещё в 4,4 раза быстрее, чем на Java.  
Таким образом, переход с Python на C означает повышение скорости выполнения программы в 47 раз.

ТС, дерзай!

anonymous
()
Ответ на: комментарий от anonymous

Никаких в 4.4 раза быстрей давно нет. Скорость java и С отличаются на проценты. А иногда java быстрей.

anonymous
()
Ответ на: комментарий от anonymous
И это только начало оптимизации. Если писать код с учётом особенностей аппаратного обеспечения, на котором он будет выполняться, то можно повысить скорость ещё в 1300 раз. В данном эксперименте код сначала запустили параллельно на всех 18 ядрах CPU (версия 4), затем использовали иерархию кэшей процессора (версия 5), добавили векторизацию (версия 6) и применили специфические инструкции Advanced Vector Extensions (AVX) в версии 7. Последняя оптимизированная версия кода выполняется уже не 7 часов, а всего 0,41 секунды, то есть более чем в 60 000 раз быстрее оригинального кода на Python.
anonymous
()
Ответ на: комментарий от anonymous

Чёт кроме static_cast я ничего от плюсов не увидел.

stl не доступен, исключения тоже. Но классы с деструкторами и шаблонами можно использовать для написания драйверов…

fsb4000 ★★★★★
()
Ответ на: комментарий от anonymous

то есть более чем в 60 000 раз быстрее оригинального кода на Python.

А нам все равно, а нам все равно.  
Пусть работает хоть 700 часов.   
Зарплату платят нам, зарплату платят нам.  
Каждую среду.
anonymous
()
Ответ на: комментарий от anonymous

ТС хотел, чтобы мы поняли, что код Python можно ускорить в 60000 раз.
А мы дураки посмеивались …

anonymous
()
Ответ на: комментарий от anonymous
Более того, на графической карте AMD FirePro S9150 тот же код выполняется всего за 70 мс, то  
есть в 5,4 раза быстрее, чем самая оптимизированная версия 7 на процессоре общего назначения, и в  
360 000 раз быстрее, чем версия 1.
anonymous
()
Ответ на: комментарий от Crocodoom

На питоне говнякается быстро, но работает медленно. На си наоборот

Удваиваю, лучше и не сказать

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от X512

Она вызывает функцию - третий аргумент шаблона когда указатель выходит из области видимости и он != NULL. Примерно тоже что и std::unique_ptr, но с функцией в качестве деструктора.

Столько телодвижений. Лол. Вместо просто явного вызова того что нужно.

если всё на C++, то можно использовать обычный std::unique_ptr.

Нельзя если память выдаётся блоком от одной аллокации и живи с этим как хочешь.

На плюсах можно писать, но, очень много этих но в реальности. Хотя в тепличных условиях его использовать очень удобно. Но только в тепличных.

anonymous
()
Ответ на: комментарий от fsb4000

DDK и WDK используют Си . Уровень экспертов оценивающих экспертов убог и позорен. От плюсов там одно название.

anonymous
()
Ответ на: комментарий от anonymous

Тупое сравнение. Для справки и особосо одарённых, первое ты и все используют if всегда, везде и постоянно, это ветвления без них никак рано или поздно. goto ты ивсе его хейтящие используют тоже постоянно просто оно называется по иному ахахах.

anonymous
()
Ответ на: комментарий от anonymous

А иногда java быстрей.

А JavaScript ещё быстрей!

Shadow ★★★★★
()
Ответ на: комментарий от fsb4000

*.cpp отнюдь не значит цепепе. Внутри обычная лапша и байтолюбство. Сырцы же есть, загляни хоть, иксперд. :)

Stanson ★★★★★
()
Ответ на: комментарий от anonymous

Это и есть ос управляющая виртуальными ресурсами облака.

А мышь с клавой, память локальную, GPU, подсветку и звук тебе тоже облако организует?

Stanson ★★★★★
()
Ответ на: комментарий от fsb4000

Но классы с деструкторами и шаблонами можно использовать для написания драйверов…

Ну покажи мне классы для хоть какой-нибудь работы с железкой. Чтобы с самого начала, с регистров железки объектнутых, с конструкторами/деструкторами, с наследованием, шаблонами, переопределением арифметических и битовых операторов, чтоб нигде никаких кастов адреса из интов и адресной арифметики, без всяких там #define и малейшего байтолюбства. Чтоб прям ООП и чтоб было однозначно понятно, что это ООП даёт хоть какой-то профит в смысле читаемости, понятности и пр. по сравнению с линейной сишной лапшой

Вот честно, абдурина и то приличней выглядит в смысле цепепе чем все ваши «драйвера на C++» вместе взятые, в которых от C++ вообще ничего нет.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 2)
Ответ на: комментарий от X512

Линукс оказался кому-то нужен только после поддержки корпорациями чтобы не платить за UNIX.

Но это же ложь. Вокруг ядра линукс еще до первой версии выстроилось просто огромное комьюнити из разработчиков, котрое это ядро и стали пилить. Где это комьюнити вокруг сиренити?

anonymous
()
Ответ на: комментарий от X512

но в реальном мире C приносит результат здесь и сейчас

Потому что код на Си написан в дремучие годы когда C++ ещё не было или был только в зачатке.

Неправда. Есть фирмы, которые пишут вполне себе новый код без легаси исключительно на си без крестов, и это принципиальная позиция. Си проще, а значит и труднообнаружимых ошибок там меньше, и отлаживать легче. Можно написать библиотеку, хорошо её протестировать, и быть уверенным на 99%, что багов в ней нет. И в случае их появления сосредоточиться на отладке нового кода. А вот в крестах с их шаблонами и множественным наследованием, а также перегрузкой, ни в чём никогда нельзя быть уверенным даже на 99%. И для надёжного кода это важно.

Линукс оказался кому-то нужен только после поддержки корпорациями чтобы не платить за UNIX.

BSD UNIX уже существовал и всегда был бесплатным. А ещё был бесплатный Minix.

aureliano15 ★★
()
Ответ на: комментарий от Stanson

Чтоб прям ООП и чтоб было однозначно понятно, что это ООП

Современный C++ это далеко не «прям ООП» скорее даже он от ООП как раз уходит.

anonymous
()
Ответ на: комментарий от anonymous

Поэтому он и не нужен ибо постоянно от чего то уходит. Сначала от Си с сомнительными лол плюсами, теперь от самого себя в сторону и так уже монструозной каши. Вместо остановиться и спроектировать тупо впихивают «прикольные» штуки. Си это язык управления числами основа его стабильная, проста и понятна, чрезвычайно гибка и в меру сахаронизирована. Всё есть данные, все данные есть числа и инструмент управления ими. Стройно и красиво.А абстракции ради абстракций вызывают только снисходительную улыбку при взгляде на войну с мельницами.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.