LINUX.ORG.RU

Выбор языка программирования

 


0

5

Здравствуйте, коллеги!

Понимаю, что данная тема из разряда holywar, но так уж вышло.

Я более-менее знаю С, С++. Последний мне не нравится.

Поверхностно знаком с Python. Он не плох, только уж слишком тормознутый. Еще в минусы падает, сложная переносимость между устройствами, тут и разноверсица, и возможные сложности с использованием библиотек. Да. Многое решает venv, но это ужасно не удобно.

В общем, со всем можно было бы смириться, кроме тормознутости. До смешного. Сделал в питоне функцию, которая выполняет банальнейшее XOR шифрование, потом то же самое сделал на С и замерил скорость при работе с блоком данных в 100Мб.

Результат убил на повал. Сишный код оказался быстрее более чем в 1000 раз! Это как, вообще? Понятно, что функцию шифрования можно написать на С и подцепить ее в питоновском сприпте, но постепенно оказывается, что нужно что-то еще ускорить на С. И еще что-то. И еще… В результате от питона ни фига не остается.

Вроде, ну если знаешь С и С++, то пиши и радуйся жизни! Но, С++, как я написал выше, мне не нравится. А на чистом С работа со строками - издевательство.

Раз уж я знаю С, то что стоит изучить любой другой язык?

Вот я и решил копнуть Rust и Golang…

Что сказать… Посмотрев немного на Rust у меня остатки волос встали дыбом! Нагородили хрен знает что! У меня создалось впечатление, что Rust это просто набор костылей.

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

Golang? С ним вроде попроще. Но снова чувство костылинга. Плюс, зачем-то изголянее с объявлением переменных. Ну нафига тип переменной идет после ее названия? Типа, Golang не С? Впрочем, у Rust то же самое. Ну зачем???

Еще сильно поразило, что в Go и Rust нет нормальной перегрузки функции, типа int wise_func(char * str) и int wise_func(char * str, int len), Как в С++. Ну и функций с параметрами по умолчанию нет ни там, ни там. Алё! Разрабы! Вы ухи объелись?

Вроде, с помощью костылинга можно решить эти проблемы, но, блин, опять костыли!

В общем, поверхностный взгляд на Rust и Go, отбил всякое желание изучения.

Python мне дался очень легко, и можно было бы его простить за некоторые неудобства, но он таакой тормоз! К тому же, я практически все автоматизационные скрипты сначала написал на Python, а потом всех их переписал на BASH.

Да, BASH еще более тормознутый и разбирать свой же скрипт, через месяц после написания, то еще удовольствие, но хотя бы bash скрипты без проблем переносимые!

В общем, я в печали. Хочется некий язык общего назначения что бы он был быстрым и был лишен неудобств старичка С, но, по ходу, нет гармонии в мире IT.



Последнее исправление: Dimez (всего исправлений: 1)

Да. Многое решает venv, но это ужасно не удобно.

Да. Я им не пользуюсь и никому не советую.

Сишный код оказался быстрее более чем в 1000 раз! Это как, вообще?

Это нормально. Закон Мура решает, по этому в последнее время питон такой популярный.

И еще что-то. И еще… В результате от питона ни фига не остается.

Ну есть же Cython

Раз уж я знаю С, то что стоит изучить любой другой язык?

Попробуй D может он тебе больше плюсов зайдет. А вообще Haskell и Clojure но думаю что для тебя эти варианты слишком радикальны.

Rodegast ★★★★★
()
Последнее исправление: Rodegast (всего исправлений: 1)

Сишный код оказался быстрее более чем в 1000 раз! Это как, вообще?

Питон медленнее, но не более чем в 30 раз, а в среднем в 10. Остальные 30x замедления - это всего лишь качество твоего кода.

Нагородили хрен знает что! У меня создалось впечатление, что Rust это просто набор костылей.

Объективные претензии будут?

Ну нафига тип переменной идет после ее названия?

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

В общем, я в печали. Хочется некий язык общего назначения что бы он был быстрым и был лишен неудобств старичка С, но, по ходу, нет гармонии в мире IT.

Что сказать, с такими претензиями как где писать тип, и с таким вообще уровнем претензий, как «нагородили хрен знает чего» очевидно что у тебя нет опыта в программировании и вообще представления о гармонии ЯП. Тогда можно посоветовать следующее:

  • либо засунуть подальше свои зачатки вкуса и пытаться таки писать на mainstream языках, от которых сообщество кайфует типа того же rust, пока не поймёшь почему оно сделано так как сделано и почему это правильно и удобно
  • либо пробовать всё подряд для расширения кругозора
  • либо закуклиться на каком-нибудь мертворожденном языке позиционирующимся как замена C, типа zig или hare
  • либо учиться писать хотя бы на питоне и параллельно ждать пока там доделают jit - будет не так медленно
anonymous
()
Ответ на: комментарий от HighMan

На чем тогда тормозит Python? На цикле? Ну извините… Это основная конструкция в любом ЯП. Если она работает медленно, то извините. Лес - там!

А давай-ка свой код в студию! Попробуем поизвращаться и ускорить его средствами Питона. Интересно же.

praseodim ★★★★★
()

Ну нафига тип переменной идет после ее названия? Типа, Golang не С? Впрочем, у Rust то же самое. Ну зачем???

Не бузи, это не для тебя, это для компилятора.

ya-betmen ★★★★★
()
Ответ на: комментарий от Rodegast

Haskell и Clojure

Хаскель сферический ваккумный мутант. Для того, чтобы покрасоваться и показать красоту и лаконичность функциональщины хорош. Для того, чтобы писать что-то «приближенное к земле» как-то не очень, что доказывает «огромное» количество прикладного ПО, написанного на Хаскеле.

Кложа еще более странный мутант. Вроде бы Лисп, да не совсем. JVM как база для динамического языка - это ну просто отличный выбор. Если правильно помню, там диспатч через рефлексию сделан (по крайней мере был). Ну и TCO там не сделать (привет, JVM).

OTOH, как раз очень напоминает Питон - как клей для для внешних библиотек, только в случае Кложи написанных не на Си, а на Яве.

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

Запрос в теме такой:

Хочется некий язык общего назначения что бы он был быстрым и был лишен неудобств старичка С

C# под это подходит более, чем полностью.

amm ★★
()

Что сказать… Посмотрев немного на Rust у меня остатки волос встали дыбом! Нагородили хрен знает что! У меня создалось впечатление, что Rust это просто набор костылей.

бери PHP

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

С PHP не будет проблемы

Golang? С ним вроде попроще. Но снова чувство костылинга. Плюс, зачем-то изголянее с объявлением переменных. Ну нафига тип переменной идет после ее названия? Типа, Golang не С? Впрочем, у Rust то же самое. Ну зачем???

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

Еще сильно поразило, что в Go и Rust нет нормальной перегрузки функции, типа int wise_func(char * str) и int wise_func(char * str, int len), Как в С++.

ну в пыхе нет но оно и не надо на практике хотя если есть желание то можно и накостылить с помощью магии бгг)

В общем, поверхностный взгляд на Rust и Go, отбил всякое желание изучения.

погружайся в пых и не будет желания писать на чем то ещё

Python мне дался очень легко

PHP легче

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

растоманить нужно только тогда когда бизнес требование есть на надежность кода.

гошка только в узких местах где нужна супермногопоточность. За большее бить по рукам до осознания.

питухон не нужен от слова совсем. Ну разве что по приколу писать.

сишка(даже с плюсами) только эмбедед и геймдев, ну либо от большой любви (извращенной).

баш наше все и нужен всегда.

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

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

Noob_Linux ★★★★
()

Ну нафига тип переменной идет после ее названия?

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

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

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

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

tra-ta-ta
()
Ответ на: комментарий от alysnix

а какой вообще серьезный софт на шарпе реально используется под линуксом? вот чтоб в режиме 24/7 или хотя бы 8/5.

В основном такой софт в Azure живет, но к сабжу это не имеет никакого отношения.

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

c3

Автор категорически против добавления перегрузки операторов в C3, так что если она нужна, то C3 не лучший выбор.
Ещё он не хочет добавлять алиасы i16, u16, i32, u32 и т. д.

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

pipenv, poetry уже не надо вручную активировать, но идея та же

Если честно, то мне даже не интересно что такое pipenv и poetry. Я для этих целей использую свои сборки питона «с блекджеком и шлюхами».

Rodegast ★★★★★
()

В общем, со всем можно было бы смириться, кроме тормознутости. До смешного. Сделал в питоне функцию, которая выполняет банальнейшее XOR шифрование, потом то же самое сделал на С и замерил скорость при работе с блоком данных в 100Мб.

Попробуй сделать что-то реальное, с БД там поработать, запрос с динамически собираемым JSONом отправить, функцию с async напиши. А то опять «ищу язык общего назначения, сравниваю по выборке строк меньше пяти символов на массиве из миллиарда элементов».

micronekodesu ★★★
()

Хочется некий язык общего назначения что бы он был быстрым и был лишен неудобств старичка С, но, по ходу, нет гармонии в мире IT.

Я бы посоветовал прислушаться к ответу на твой вопрос программиста Джорджа Хотца в беседе с Лексом Фридманом.

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

Автор категорически против добавления перегрузки операторов в C3

Во многих языках этого нет, прежде всего в тех которые заявляют себя «простыми» типа Java, Go и С.

Ещё он не хочет добавлять алиасы i16, u16, i32, u32 и т. д.

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

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

Хаскель сферический ваккумный мутант ... Кложа еще более странный мутант.

Haskell и Clojure вполне годные языки. Но они не для чебурах, а этих паразитов 99% от всей индустрии. И ничего с ними не поделать «homo est homo»

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

бери PHP

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

Что Вы думаете, о минималистичных php runtime типа PH7 (https://github.com/symisc/PH7) или транспайлерах типа kPHP (https://github.com/VKCOM/kphp) ?

MirandaUser2
()

В общем, со всем можно было бы смириться, кроме тормознутости. До смешного. Сделал в питоне функцию, которая выполняет банальнейшее XOR шифрование, потом то же самое сделал на С и замерил скорость при работе с блоком данных в 100Мб.

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

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

Да не, они оба годные. Хаскель только сильно специфический, а Кложа прекрасна и как раз она и для «чебурах» Clojure вполне зашла бы как замена Питону (про TCO забудем - например Гвидо ван как-его-там от этого истерит; есть жизнь и без TCO, хотя даже в С++ она есть).

Но большой минус - тормозной рантайм (ClojureCLR и ClojureScript это второсортная фигня, а Jank даже близко не готов). Для скриптов не подходит нифига. Пока Clojure запустится и раскочегарится, Питон все посчитать успеет.

Лучше уж тогда схему взять.

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

TCO, хотя даже в С++ она есть

Позволю себе сильно усомниться. Вот здесь-то как раз именно GC и может понадобиться, если делать соглашение о вызовах таким, как описано в PAIP. А то, что TCO не бывает без особого соглашения о вызовах - это к гадалке не ходи.

А искусственные преобразования кода как в Scala - это как мертвому припарка. Заявить громко о себе и одурачить многих можно, но не всех. Хотя в Scala так сделано не от хорошей жизни. Полноценного TCO в Scala/JVM нет и, скорее всего, никогда не будет. Какой уж тут C++!

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

Позволю себе сильно усомниться

Прописанного в стандарте нет, и это хреново. Но по факту gcc и clang с хвостовой вызов (любой, не только текущей функции) заменяют на jmp (clang уже с -O включает это преобразование, gcc с -O2)

Да, без гарантии в стандарте это ж-па; или «как мертвому припарка», тут я согласен.

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

Не, тест на адекватность конкретной реализации очень прост: нужно, чтобы бесконечный цикл, переписанный через продолжения CSP, мог работать бесконечно долго. Если может работать, то значит, что есть TCO. А иначе никакого полноценного TCO нет, а лишь филькина грамота. (кстати, поэтому отказались от плагина продолжений в Scala)

Для конкретики. Aync в F# и Cont в хасклеле автоматически делают код по правилам CSP.

А смогёт ли С++? Большой вопрос

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

В bb «впихнули невпихуемое». Хотелось бы большей модульности, типа bb-lite какой-нибудь. Или возможности одним-двумя действиями сделать свою сборку, вырезав то, чем не пользуешься.

Может быть и вкусовщина. Тут же смотря с чем сравнивать. Так-то bb в любом случае на несколько порядков компактнее того срача, что разводит Питон. При том, что в качестве скриптоты делать умеет практически всё то же самое.

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

У пхп нет проблем с переносимостью хоть сколько-нибудь значимых в сравнении с питоном. Обратная совместимость очень хорошая. Плюс есть такие штуки как Rector которые могут помочь с быстрой адаптацией куска мамонта под самую модерновую версию.

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

установка пыхи не сложнее чем поставить нужную версию питона (даже легче наверно). В пыхи сложности могут быть разве что с некоторыми специфичными экстеншенами языка.

По поводу либ - это ембедед рантам а значит никому кроме впихативалей пыхи в другую программу не нужен (наверно никому и не нужен ибо зачем не понятно).

А пых от вкашечки и упаси господи запрщенной мордокниги (хипхоп пых который) это ересь и подлежит анафеме.

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

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

Для тех (веб)приложений, которые сам использую, примерно так и делаю. Apache, PHP и прочее, только не docker, а LXC. Но даже у меня php только там, где apache.

установка пыхи не сложнее чем поставить нужную версию питона (даже легче наверно). В пыхи сложности могут быть разве что с некоторыми специфичными экстеншенами языка.

Предположим я пишу небольшой скрипт, который будет запускаться в неизвестном мне окружении. Всё-таки в случае дистрибутивов Linux python обычно уже установлен, в отличие от PHP. На MS Windows вероятно и то, и то придется ставить.

По поводу либ - это ембедед рантам а значит никому кроме впихативалей пыхи в другую программу не нужен (наверно никому и не нужен ибо зачем не понятно).

чтобы поставлять runtime вместе (или вместо скрипта). Если он относительно небольшой в скомпилированном виде.

А пых от вкашечки и упаси господи запрщенной мордокниги (хипхоп пых который) это ересь и подлежит анафеме.

надо изучать, какие там плюсы/минусы..

MirandaUser2
()