LINUX.ORG.RU

Python vs Scala - съесть и не подавиться

 , , ,


0

5

Java-программер.

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

Надоела джава, потому что:

- Boilerplate code

- Иногда язык слишком многословен

- Иногда слишком много XML.

- Для очень маленьких «одноразовых» приложений лениво поддерживать инфраструктуру проекта. Иногда хочется просто накидать 50 строк в файле и запустить.

Т.е. главные критерии при выборе

- меньше писать кода

- меньше ручных действий поддержку зависимостей

После некоторых раздумий взгляд пал на Python и Scala. Написал на каждом из них по небольшой утилите. Описываю мои сомнения по каждому из них.

Python:

- Version Hell. Python 2 vs 3. Неприятная неожиданность - значительная часть библиотек есть только для Python 2. Зарядил тулу на 3-ей версии, понадобилось подключить mechanize - фейл. Она только для 2-ой версии. Immunity Debugger завязан также на 2-ую версию. Вот так сразу наткнулся в первый день.

- Dependency Hell. Казалось бы, питон - кроссплатформенный. Но куча питоновских либ - это лишь обертки над сишными либами. Иногда их установка - тот ещё геморрой. Посмотрите сюда - http://www.lfd.uci.edu/~gohlke/pythonlibs/ - некоторые либы имеют до 10 инсталлеров под винду (жесть). Часто зависимости разруливаются руками. Посмотрите stackoverflow - часто поставить всё это месево - то ещё челендж.

Scala:

- Невнятная поддержка редакторами кода. Подцветка на Notepad++ и SublimeText начинает лажать, когда начинаешь использовать фичи вроде «„“ и т.д. Из IDE пробовал только Intellij IDEA + Scala plugin - часто не может сделать автокомплит.

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

- Интеграция с java отнюдь не бесшовная. Хочешь заюзать джава либу в скале - надо перевести джавовские коллекции в коллекции скалы. Чтобы можно было делать foreach, filter, map и т.д. Бойлерплейт же.

Какой ваш выбор в данной ситуации? Если питон - как боретесь с вышеописанными недостатками? Если скала - то же самый вопрос.


groovy - твой выбор, идеально подходит же под все критерии! можешь еще посмотреть на jruby

anonymous
()

Если питон - как боретесь с вышеописанными недостатками?

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

некоторые либы имеют до 10 инсталлеров под винду (жесть)

На винфак.

provaton ★★★★★
()

Какой ваш выбор в данной ситуации?

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

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

хм... интересная связка Ruby и Java. гляну-ка на Jython всё-таки питон мне больше импонирует

cccian
() автор топика

Интеграция с java отнюдь не бесшовная. Хочешь заюзать джава либу в скале - надо перевести джавовские коллекции в коллекции скалы. Чтобы можно было делать foreach, filter, map и т.д. Бойлерплейт же.

На это есть готовые имплиситы

vertexua ★★★★★
()

до 10 инсталлеров под винду (жесть)

На винфак отсюдова.

Deleted
()

Невнятная поддержка редакторами кода.

Крайне скудная документация - следствие малого community.

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

Интеграция с java отнюдь не бесшовная. Хочешь заюзать джава либу в скале - надо перевести джавовские коллекции в коллекции скалы. Чтобы можно было делать foreach, filter, map и т.д. Бойлерплейт же.

import scala.collection.JavaConversions._ и все проблемы решены

Какой ваш выбор в данной ситуации?

Ты сравниваешь теплое с мягким. Это языки разных весовых категорий.

Reset ★★★★★
()

Пора уже прикреплять тему «Python vs ***». Оформить в стиле FAQ.

Повесить ответ жирными буквами БЕЗУСЛОВНО PYTHON, *** ВАМ НЕ НУЖЕН (раз Вы об этом спрашиваете)

Дальше тему можно пополнять. Например:

- Version Hell. Python 2 vs 3. Неприятная неожиданность - значительная часть библиотек есть только для Python 2

это неважно, т.к. Python 3 вообще ненужен.

питон - кроссплатформенный. Но куча питоновских либ - это лишь обертки над сишными либами. Иногда их установка - тот ещё геморрой.

Неправда, УМВР.

некоторые либы имеют до 10 инсталлеров под винду (жесть).

Ненужна либо винда, либо такие либы. Я с таким не сталкивался.

В *** Невнятная поддержка редакторами кода

*** ненужен, выбирайте Питон (раз Вы об этом спрашиваете).

В *** Крайне скудная документация - следствие малого community.

*** ненужен, выбирайте Питон (раз Вы об этом спрашиваете).

Интеграция *** с ### отнюдь не бесшовная.

*** ненужен, выбирайте Питон (раз Вы об этом спрашиваете).

Какой ваш выбор в данной ситуации? Если питон - как боретесь с вышеописанными недостатками?

выбирайте Питон (раз Вы об этом спрашиваете). На самом деле его недостатки сильно преувеличены, *** куда хуже!

// thread и много других аналогичных thread-ов.

AIv ★★★★★
()

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

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

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

учитывая,что винду выкинуть нельзя, лучше выкинуть питон)))

stevejobs ★★★★☆
()

Java-программер.
Иногда хочется просто накидать 50 строк в файле и запустить
Какой ваш выбор в данной ситуации?

Под винду - JScript

anonymous
()

Version Hell.

питон3 не нужен, ибо не доделан.

Dependency Hell.

рис1 маздайщики должны страдать. Я помнится даже helloworld на pure C не смог запустить в MSVC — русские буквы кракозябрами. О чём ты вообще говоришь? Там всё делается безумными костылями.

Невнятная поддержка редакторами кода.

см. рис1

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

см. рис 1, или учись искать ответ в документации, а не на сборищах таких же как ты ламеров.

Интеграция с java

не нужно.

emulek
()

все юзают python2x - на 3тий пока еще очень мало людей перешло и этот процесс особо не ускоряется.

Dependency Hell

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

Кроме этого под некоторые проекты есть еще проблема выбора самого питона тк кроме СPython как минимум есть еще Stackless Python, PyPy, jython.

Scala - под ваши цели не особо подходит это скорее Ocaml/F# для JVM нежели язык для скриптов.

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

Ну и наверное jython и groovy - тоже подходят под цели.

IDE для питона также не идеальны тк язык всеже с динамическтой типизацией.

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

Java-программер.

Иногда хочется просто накидать 50 строк в файле и запустить

Тогда пишу на python. Что-то не так?

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

пишу на python. Что-то не так?

А я откуда знаю?

ТС (очень похож на СтивДжобса, кстати) спрашивал про персональный выбор. Мой персональный выбор для мелких скриптов под виндой - JScript. Он в винде искаропки, тот же С-подобный синтаксис как и у Java, берешь себе и пишешь

anonymous
()

некоторые либы имеют до 10 инсталлеров под винду (жесть)

Всё правильно, винда не нужна, а её пользователи должны страдать. Или даже отправиться в биореактор.

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

Чего же не PowerShell?

ТС (очень похож на СтивДжобса, кстати) спрашивал про персональный выбор. Мой персональный выбор для мелких скриптов под виндой - JScript. Он в винде искаропки, тот же С-подобный синтаксис как и у Java, берешь себе и пишешь

ЗЫ. Вы там празднуете еще что ли? Мои соболезнования

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

Посмотрел видос про питон.

С первого взгляда оптимизированные версии функций

range -> xrange

zip -> izip

введены под какими-то нелепыми именами.

Плюс длинные имена методов пишутся не камелКейсом, и даже_не_через_черточку, апростослитно. Интересно, из каких соображений?

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

С первого взгляда оптимизированные версии функций

Исторически так сложилось, раз имя занято, надо придумывать другое. Одной из целей третьего питона было как раз изменение этих имен. Например, range в python3 работает как xrange в python2. Но это сломало обратную совместимость и поэтому python3 до сих пор не взлетел.

Интересно, из каких соображений?

Официальные рекомендации по стилю изложены здесь:

http://www.python.org/dev/peps/pep-0008/

Есть код, который рекомендациям не следует (большей частью клоны явовских библиотек, как threading и unittest), но его не трогают чтоб не ломать совместимость.

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

С первого взгляда оптимизированные версии функций

Проблема в том, что это не «оптимизированные версии функций», а функции с _другой_ семантикой.

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

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

Reset ★★★★★
()

надо перевести джавовские коллекции в коллекции скалы

man JavaConversions

Intellij IDEA + Scala plugin - часто не может сделать автокомплит

Новая версия прекрасно работает.

Какой ваш выбор в данной ситуации?

Для быстрого прототипирования я выбрал кложу.

ymn ★★★★★
()

Смотри в сторону Groovy.

iZEN ★★★★★
()

Попробуй Clojure. Сам вот его сейчас изучаю - очень нравится. И в последнее время очень активно он развивается.
Сам до этого пробовал Scala - вообще не понравилась. Какая-то она слишком сложная и непонятная. Миллион способов выстрелить себе в ногу. При этом, каких-то преимуществ перед старой доброй Java я не увидел. После Скалы Clojure - просто кайф.

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

Скобкота. Не нужна.

ТС: смотри на Groovy или в крайнем случае Jython. На маргинальщину не смотри.

anonymous
()

немножко пробовал скалу - слишком много синтаксиса, питон намного проще и лаконичней.

mechanize

афаик мертв. советую requests или httplib2

python3 сейчас поддерживают почти все, давно не встречал проблем с этим

dependency hell

вендопроблемы. но и в винде обычно нужно только 1-2 скомпиленных библиотеки для проекта, все остальное есть pure-python и ставится одним easy_install

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

афаик мертв. советую requests или httplib2

вы палец с попой сравнили.

python3 сейчас поддерживают почти все

Все поддерживают python2. Ситуация с поддержкой питон-3 что-то не выглядит такой радужной.

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

Скобкота. Не нужна.
На маргинальщину не смотри.

Точно. ТС, слушай этого анона, чотко пишет.

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

1	C		17.871%
2	Java		16.499%
3	Objective-C	11.098%
4	C++		7.548%
5	C#		5.855%
6	PHP		4.627%
7	(Visual) Basic	2.989%
8	Python		2.400%
9	JavaScript	1.569%
anonymous
()
Ответ на: комментарий от cccian

ну-ка, скажи, что такое есть в механайз, кроме перлоподобного говноапи, чего нет в httplib2 или requests?

Ситуация с поддержкой питон-3 что-то не выглядит такой радужной.

вылезай из криокамеры.

MyTrooName ★★★★★
()

Неприятная неожиданность - значительная часть библиотек есть только для Python 2.

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

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

я давно таких либ не встречал

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

Когда финальный релиз джанги для третьей версии выйдет

Прискорбно, что после 5 лет со дня выхода третьей версии, об этом всё ещё говорят в будущем времени.

Отрывок из недавней новости хорошо описывает ситуацию:

Такие проекты как Django, добавившие поддержку Python 3, продолжают вести первичную разработку и тестирование с использованием Python 2, попутно проверяя работоспособность в Python 3 через средства непрерывной интеграции. Ни одна опрошенная крупная компания, развивающая проекты на языке Python, не использует специфичный для Python 3 код и не планирует миграцию кодовой базы на Python 3.

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

Прискорбно, что после 5 лет со дня выхода третьей версии, об этом всё ещё говорят в будущем времени.

на джанге свет клином не сошёлся.

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

Это как-то подозрительно плохо коррелирует с твоим же:

Java-программер.
Подбираю язык для быстрой разработки небольших приложений и скриптов.
Для очень маленьких «одноразовых» приложений лениво поддерживать инфраструктуру проекта. Иногда хочется просто накидать 50 строк в файле и запустить.

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

Это как-то подозрительно плохо коррелирует с твоим же

Это лишь моё предположение :) Я подозреваю, что у автора «беспроблемного» поста потому и нет проблем с версиями, что он либо ничего не делает, либо делает что-то очень примитивное. Уж слишком у него всё сладко.

cccian
() автор топика
5 мая 2015 г.

Какие-то дивные у автора выводы по Скале, в реальности всё совсем по-другому: Документация отличная, вводных курсов уйма, айдеешки работают хорошо (проблемы бывают только на сложных билдах и в основном с идеей, но Eclipse со СкалаПлагином и прочие идеешки работают вообще без проблем ) использование джавных коллекций решается всего лишь импортом одного имплисита.

antonkulaga
()

Из IDE пробовал только Intellij IDEA + Scala plugin - часто не может сделать автокомплит.

Можешь написать, как воспроизвести самый простой случай?

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

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

Хочешь заюзать джава либу в скале - надо перевести джавовские коллекции в коллекции скалы.

Прям так сложно сделать?

val l = new java.util.LinkedList[Int]
JavaConverters.asScalaIteratorConverter(l.iterator()).asScala.(трэш и угар)

или вообще

l.toArray.toList.(трэш и угар)
ovk48 ★★★
()
Ответ на: комментарий от provaton

Юзаю python2
2015 год

Причина описанного выше version hell именно ты. Лично.

entefeed ☆☆☆
()

groovy для jvm, python для остального. Scala именно для замены Java в «тяжёлых» задачах.

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