LINUX.ORG.RU

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

 ,


1

2

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

А если серьезно, то знание двух ЯП существенно расширит спектр задач которые Вы сможете решать. В этом смысле питон и с/с++ очень хорошо дополняют друг друга.

AntonI ★★★★★
()

Поможем ТС.

Вот у меня «грядка» 10 гектаров.

Что лучше тяпка или комбайн?

Владимир

anonymous
()

Disclamer: Буду говорить про С и про С++ вместе. Они много чем отличаются, если важно разделить - говори.

Python прекрасен. В нём можно быстро написать небольшие программки или скрипты, которые решают определенные задачи.

C/C++ даст:

  • более экономное потребление ресурсов, лучшее быстродействие
  • более четкий контроль за ошибками в программе
  • отвязку от конкретной версии интерпретатора (вообще от интерпретатора)
  • на мой взгляд некоторые вещи в С++ реализуются более просто, например, объекты, возврат значения по ссылке, мета-пограммироваие и т. п.

Очевидно, что это не нужно для наколеночных скриптов, и небольших программ, которые пишутся для себя. А нужно только тогда, когда важно быстродействие, или когда программа будет релизиться для широкой аудитории.

Вплоть до того, что я иногда пишу какую-то идею на Python - Proof of Concept, а потом, когда понимаю, что идея живая, и я буду дальше этим пользоваться, переписываю на С++.

Но это имеет свою цену:

  • Нужно хорошо понимать «как работает компьютер». То есть после Python, просто изучить синтаксис С/С++ и начать писать не получится. Ну, то есть hello world ты напишешь, а потом пойдешь в форумы кричать что «С убог» и т. п. - см. таких комментаторов выше.
  • Преимущества указанные выше не появляются автоматически. Это нужно написать. С/С++ больше средств для этого, и это удобней делается.
  • В писать на С/С++ дольше чем на Python.

Иными словами, пересесть с Python на С/С++ - это как пересесть с автомобиля на самолёт: нужно больше понимать, управление сложнее, и чтобы доехать из дому до работы - не нужно. А а если перелететь с континента на континент - самое то.

Но я бы в любом случае рекомендовал немного по писать на С (именно С, не С++), чтобы лучше понять работу компьютера и операционной системы. То есть в образовательных целях.

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

а вот плюсы выплывают только за счёт легаси

Вы современный C++ видели? Посмотрите например на исходники Serenity OS. Это просто рай по сравнению с убожеством ядра Линукс на Си.

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

Вот другой пример.

У меня сложные отчеты в 1С формируются в Excel формате за 1 сек.

Может быть их на Си переписать?

Владимир

anonymous
()

Примерно такие же, как возьмёшь экскаватор вместо лопаты.. это просто разные инструменты и все зависит от задачи

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

Примерно такие же, как возьмёшь экскаватор вместо лопаты.

Си - это палка-копалка. Не нужно в современном мире.

это просто разные инструменты и все зависит от задачи

Есть безнадёжно устаревшие инструменты представляющие только исторический интерес.

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

Вы современный C++ видели? Посмотрите например на исходники Serenity OS.

Хватит уже носиться с этой Serenity OS из треда в тред, такое чувство, что ты или один из авторов или просто любовник автора.

Это просто рай по сравнению с убожеством ядра Линукс на Си.

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

Пора уже смириться с мыслью, что всегда будет нужен и востребован, ты можешь конечно забиться в угол и плакать о «более лучшем коде», но в реальном мире C приносит результат здесь и сейчас, а форумные теоретики вроде тебя только и делают, что занимаются поисками идеального язычка.

anonymous
()

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

Переходите на CPython …

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

немного по писать на С (именно С, не С++), чтобы лучше понять работу компьютера и операционной системы

Дурацкий совет. Научится плохому. Я вот долго разбиралась с т.н. «умными указателями», тока поняла зачем они, работать с простыми было гораздо проще. Хороший программист должен уметь хорошо понимать абстракции типа immutable data structures и чистые функции которые увеличивают скорость работы программы в разы.

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

Хватит уже носиться с этой Serenity OS из треда в тред, такое чувство, что ты или один из авторов или просто любовник автора.

Он поехавший фанат игрушечных осей, всяких Haiku, FreeBSD, РектальОС...
...и хочет чтоб Linux стал таким же ущербным.

anonymous
()

ТС, признавайтесь.
Зачем вы такой вопрос задали?

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

Есть безнадёжно устаревшие инструменты представляющие только исторический интерес.

ОК, теоретик, вот тебе 3 проекта, навскидку, я думаю, тебе до конца жизни хватит – mesa, nginx, ffmpeg. Если ты, а также каждый нытик начнут переписывать такие проекты на своем лучшем язычке, то Сишку уже можно будет начать закапывать, все просто. Чего-чего? Что значит ты «не достаточно умный»? Что значит «сложно»? Что значит «не осилишь»? А, ну тогда и ценность твоего мнения равна нулю, прости.

goto-vlad
()

Все таки неплохо если бы такого рода вопросы перемещали в подфорум «Teapot»

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

Есть безнадёжно устаревшие инструменты представляющие только исторический интерес.

Вы об x86?
Ведь Си таковым и является …

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

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

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

По сравнению с авторами Serenity, Линус Торвальдс (по крайней мере в момент создания ранних версий Линукса) - некомпетентный неосилятор. Один (!) автор Selenity OS за год (!) сделал с нуля целую ОС с GUI (!). И ещё процесс создания в YouTube выкладывает.

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

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

А ты вообще понимаешь в чем преимущество чистых функций?

Конечно - «пустая»

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

А в чем проблема переписать nginx на С++? Другое дело микрософт офис переписать на С, вот это уже вы ребята не осилите.

anonymous
()

Нужно спрашивать, какие преимущества получит сишка от твоего перехода на неё

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

Один (!) автор Selenity OS за год (!) сделал с нуля целую ОС с GUI (!).

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

И ещё процесс создания в YouTube выкладывает.

Никаких «ещё». Он на этом деньги зарабатывает, молодец. Всегда в поисках впечатлительных youtube-юношей вроде тебя.

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

Мир вообще неидеальная штука, не вижу причины лить по этому поводу слезы.

goto-vlad
()

Но все говорят, что питон убог.

Крутой аргумент!

Princesska ★★★★
()
Ответ на: комментарий от goto-vlad

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

Я Haiku использую. Она тоже на C++ только более старом ввиду того что имеет более длинную историю.

В Selenity OS проблемы с железом и софтом, нет 64 бит.

Что значит «боишься потерять данные»?

В Haiku порчу ФС починили, с тех пор потерь данных не наблюдалось.

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

Посмотрите например на исходники Serenity OS.

https://github.com/SerenityOS/serenity/blob/master/Kernel/Devices/I8042Controller.cpp

Посмотрел.

        m_is_dual_channel = (configuration & (1 << 5)) != 0;
        dbg() << "I8042: " << (m_is_dual_channel ? "Dual" : "Single") << " channel controller";

        // Perform controller self-test
        do_wait_then_write(I8042_STATUS, 0xaa);
        if (do_wait_then_read(I8042_BUFFER) == 0x55) {
            // Restore configuration in case the controller reset
            do_wait_then_write(I8042_STATUS, 0x60);
            do_wait_then_write(I8042_BUFFER, configuration);
        } else {
            dbg() << "I8042: Controller self test failed";
        }

        // Test ports and enable them if available
        do_wait_then_write(I8042_STATUS, 0xab); // test
        m_devices[0].available = (do_wait_then_read(I8042_BUFFER) == 0);

Тьфу. Где все эти ваши плюсы? Где наследование, полиморфизм, темплейты, (ещё всякие умные словечки), вот это всё?

Это просто рай по сравнению с убожеством ядра Линукс на Си.

Да, прям такой рай, что отличия разве что в расширениях файлов, компилится дольше и оверхед на vtable. Спрашивается нахера?

И эти люди ещё имеют наглость что-то там вякать про ненавистное байтолюбство в сишечке.

Операционная система на C++ уже была - EPOC32 AKA Symbian. И она давно сдохла. В том числе потому, что С++ плохой, совершенно негодный инструмент для написания ОС.

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

О, давай форкнем Haiku, перепишем на C++20? Проект будет называться Huika - типа две буквы поменяли местами, а сколько профита. Вот например, звонит тебе друг, говорит: винда поломалась, помоги. А ты ему: «Может тебе лучше Huika?!»

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

Ну, нативного софта там кот наплакал, а на кутешный софт это не повлияет. Да и можно ж переписать ничего не ломая.

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

Чтобы опять базу софта с нуля набирать? Спасибо, не надо.

Так ведь все, что ниже C++20 уже устарело, то ты просто не в курсе.

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

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

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

более высокая точность отпиливания и качественно выпиленные грани

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

В том числе потому, что С++ плохой, совершенно негодный инструмент для написания ОС.

Ну а чем плоха абстракция пятого уровня от корневой?
За это платят БОЛЬШИЕ деньги.
Главное все правильно гл.бух. объяснить …

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

Сейчас даже rtos для микроконтроллеров пишут на С++ 11.

Кто-то пишет на C, кто-то на C++. А у того пациента, которому я отвечал, сырая система на C++ лучше рабочей на C, только потому, что она на C++. Комедия.

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

Посмотрел.

Плохо смотрели, выше есть ScopedSpinLock lock(m_lock);. На Си это превратится в лапшу из goto потому что там нет RAII. Не говоря о том что этот код внутри метода класса.

компилится дольше

Serenity быстро компилируется. Haiku тоже с нуля около 20 минут компилируется.

и оверхед на vtable.

Наоборот написанные руками vtable в Си (пример) создают оверхед и компилятор не может их оптимизировать и проверять типы.

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

За это платят БОЛЬШИЕ деньги.

Это и есть главное преимущество, а без это нищебродами будут …

anonymous
()

Вот сижу я, говнякаю на питончике одной рукой. Получается очень быстро.

Быстро говнякать? :)

Как уже заметили: разрабатывать на python быстрее, но работает медленно; разрабатывать на c/c++ медленнее, но работает быстро.

Переходить на c/c++ не обязательно. Как вариант, можно писать основной функционал на python, а «узкие» места выносить в библиотеку на c/c++, вызывая функции с python-кода. Получишь синергию. Быстрая разработка на python + скорость c/c++.

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

Полиморфный оператор << например.

Который почему-то только для отладочного вывода используется. А там где дело делается - почему-то сплошное байтолюбство. Даже не догадались хотя бы обобъектить железо и переопределить для него всякие = == и прочее, чтобы с do_wait_then_write и do_wait_then_read не позориться.

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

Что и требовалось доказать.

Я вот долго разбиралась с т.н. «умными указателями», тока поняла зачем они, работать с простыми было гораздо проще.

немного пописать на С (именно С, не С++), чтобы лучше понять работу компьютера и операционной системы

(именно С, не С++)

В С нет умных указателей.

Чтобы понять умные указатели, нужно сначала попользоваться обычными, прочувствовать проблематику, и понять ситуации в которых умные указатели действительно имеет смысл использовать, а в каких обычных достаточно. (Собственно поэтому я и рекомендую начать с С, а не с С++).

Судя по всему ты не разобралась в теме. Отсюда и плохие комменты о С.

Kroz ★★★★★
()
Ответ на: комментарий от goto-vlad

Ты не понял, что С++ это работа над ошибками, которые были сделаны в С. Плюсы дают гораздо больше гарантий отсутствия утечек ресурсов и отсутствия проблем в мультипоточном программировании.

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

Я думаю, что она обиделась из-за того, что умные указатели оказались умнее её самой. ,

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

Получишь синергию. Быстрая разработка на python + скорость c/c++.

Так это если умеешь, а без этого будет так

Что будет если говнокод на Python разбавить говнокодом на C++?  
anonymous
()
Ответ на: комментарий от anonymous

… в мультипоточном программировании.

… в мультипорочном программировании.

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

Ты не понял, что С++ это работа над ошибками, которые были сделаны в С

Бред.

В таком случае, С - это работа на ошибками, которые были сделаны в Ассемблере.

Слышал про языки низкого уровня, и языки высокого уровня?

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.