LINUX.ORG.RU

Ruby vs Python vs Perl на винде

 , , ,


0

2

Надо ЯП подобрать запасной, кроме Java/Groovy/Scala. Лабки писать, приложения небольшие

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

Хочу подобрать ЯП, ибо вчера написал лабку на NumPy, PIL, ScientificPython. Должен признать Python для маленьких скриптецов достаточно годен. Думаю стоит ли его получше изучить или пока не поздно перепрыгнуть на Ruby. В контексте конечно миграции скриптецов на венду

★★★★★

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

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

Вообще очевидно, но все же. У кого более out-of-the-box env на венде?

Например для плюсов подключить gtk - ад. А если для Python, Ruby?

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

vertexua

У кого более out-of-the-box env на венде?

GTK хуже на винде выглядит, Qt более похож на «свой».

vertexua

Например для плюсов подключить gtk - ад. А если для Python, Ruby?

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

april
()

В качестве гуя можно использовать web. Локально поднимаешь мини-сервер (во многие фреймворки вшит). Проблем с переносимость должно быть минимум.

Написал лабу на Python - используй python. В чём проблема?

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

Я о будущих лабах. Тут Python был в требованиях, ибо все делалось с кучей матана, которая сразу есть в PIL и NumPy

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

В догонку

У потоков есть метод exit, который позволяет штатно остановить работу потока снаружи. В Python остановить работу потока «снаружи» нельзя — нужно встраивать собственные велосипеды с флагом остановки.

Автор дебил

vertexua ★★★★★
() автор топика

Не в курсе как с биндингами в gtk/qt у остальных, но у питона с этим все ок, в т.ч. есть бинарники для винды.

zz ★★★★
()

Если удобно на python оказалось, так пиши не нем, для него много дополнительных фиговин есть. Сам выбрал perl. =)

sol13 ★★★★★
()

А чем Haskell не подходит?

anonymous
()

Сайт питоновский крутил на винде, проблем не заметил. Кода было over 6000 строк + шаблоны.

anonymous
()

Надо ЯП подобрать запасной, кроме Java/Groovy/Scala. Лабки писать, приложения небольшие

вообще у вас вполне достаточный набор. Для расширения сознания посоветую tcl/tk просто потому что они сильно отличается от имеющихся. Да и скрипты на нём переносятся между платформами простым копированием и без лишних зависимостей (или вообще единственным файлом, если юзать starpack).

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

стоит. Тем более что какое-никакое, а начало положено.

пока не поздно перепрыгнуть на Ruby

если уже владеете Java или JS и будете к тому-же знать Python, то дальнейший прыжок на Ruby не должен вызывать затруднений

В контексте конечно миграции скриптецов на венду

во всех реализациях языков и тулкитов указанны системо-зависимые вещи, рекомендации и best-practice переносимого кода. Надо просто это иметь в виду и следовать изначально.

вердикт: из предложенного выбора Python. Дополнительно tcl.

MKuznetsov ★★★★★
()

Для питона есть всякие пакеры типа py2exe. Аргумент номер раз. Потом питон как по мне именно для университетский лаб подходит больше, так как он более распологает к ФП, и вообще в научном мире питон жалуют, потому много научных библиотек. Руби же для хипстеров-сайтостроителей. С перлом бы я вообще не стал связываться.

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

Тоже склоняюсь в сторону Python. Я не собираюсь его использовать как основной ЯП. Но просто иногда хочется обойтись одним *.py файлом в качестве лабы, ничего не настраивая. Даже Scala/Java/Maven проект делать лениво. Ну и полегче с точки зрения памяти чем Groovy

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

В Python остановить работу потока «снаружи» нельзя — нужно встраивать собственные велосипеды с флагом остановки.

Автор дебил

Расскажи, как в Python завершить нить «снаружи» :)

tailgunner ★★★★★
()

Ruby + Qt4 довольно неплохо выглядит и просто подключается. Правда с первого раза у меня в убунте не получилось, где-то даже остался тред. Насчёт маленьких скриптецов - на руби они выглядят, имхо конечно, наилучшим образом. Я все свои шелл-скрипты на руби переписал, доволен как слон.

Alve ★★★★★
()

Рубист-вхора в треде.

Если под винду, то либо мучай JRuby (он очень годен), либо так и продолжай на пейтоне, с обычными рубями под виндой очень грустно всё.

Но ты смотри JRuby, он клёвый.

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

Это ужасная операция. Нормальное решение - флажок, проверяя который поток сможет нормально завершиться.

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

Это ужасная операция

Ужасная или нет, но автор прав, так что дебил не он... и в насильном завершении нити нет ничего ужасного, если при этом вызываются cleanup handler'ы. Очень жаль, что Python так не умеет.

Нормальное решение - флажок, проверяя который поток сможет нормально завершиться.

флажок

Мде. Ладно, я буду считать, что под «флажок» ты имел в виду условную переменную или сообщение со специальным тегом.

tailgunner ★★★★★
()

Perl под винду это ActivePerl+Tk. Если что-то менее страшное - StrawberryPerl + Wx. В треде уже советовали писать WEB UI - под перл есть чудесный Mojolicious.

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

Ужасная или нет, но автор прав, так что дебил не он

Автор согласен и поощряет. «Моя ЯП XYZ позволяет такой грязный хак, а ваш ЯП нет»

Ладно, я буду считать, что под «флажок» ты имел в виду условную переменную или сообщение со специальным тегом.

Не обязательно. Если в потоке цикл, который часто производит операции, то обычного флажка достаточно. Конечно если Memory Model позволяет. Если там IO, то нужен способ его прервать

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

Если в потоке цикл, который часто производит операции, то обычного флажка достаточно

Я начинаю понимать, почему проги на Яве тормозят, несмотря на навороченный JIT %)

interrupt() - идеальное решение

В общем, да. Завершение нити «снаружи», в котором нет ничего ужасного.

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

В общем, да. Завершение нити «снаружи», в котором нет ничего ужасного.

Читай ман.

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

Я начинаю понимать, почему проги на Яве тормозят, несмотря на навороченный JIT %)

Просвети что не так?

vertexua ★★★★★
() автор топика

Для лаб, имхо, питон поудобнее будет, ибо библиотек подходящих много. Из упаковщиков в exe есть py2exe, PyInstaller, cx_freeze (сам использую последний).

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

interrupt() - идеальное решение.

4.2

If this thread is blocked in an I/O operation upon an interruptible channel then the channel will be closed, the thread's interrupt status will be set, and the thread will receive a ClosedByInterruptException.

Что будет с теми кто не юзает nio?

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

По идее любая длительная сторонняя операция должна быть interruptible. Если это не так, то это недостаток этой операции, а не модели потоков.

vertexua ★★★★★
() автор топика

Лучше всего mono, а то и вовсе .net, я серьезно, во первых там уйма приятных концепций, которых нет во всяком неразвивающемся статье вроде питона или перла, во вторых там вменяемый синтаксис в отличии от ruby

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

По идее любая длительная сторонняя операция должна быть interruptible.

Мусье теоретик? А я вот недавно на нагруженном сервере писал work around для вызова въебсервиса, который делается через старый io (сторонней либой), и отваливается только через 5 минут, и никаким образом его не заставить отвалиться раньше. И так везде, даже HTTPUrlConnection

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

Все же для грязного API - грязные хаки. Но если мы обсуждаем хорошее API, то обычно его пытаются проектировать с поддержкой чистого прерывания. Будь то Posix или Java.

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

Все же для грязного API - грязные хаки.

Не грязное а legacy, а в вашем новом и чистом api достаточно гдето перехватить interruptedexception чтобы оно испачкалось. Также очевидно что из-за убогость явы - обязательной декларируемости сего исключения его зачастую невозможно корректно пробросить - у вас оно просто будет торчать во всех интерфейсах 8)

belous_k_a
()

Если гуй на Tkinter то переносится влет, тока надо шрифты пральные выбирать. Насчет упаковки - py2exe я ниасилил, но просто прикладывал сам питон + батч файл для запуска;-)

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

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

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

его зачастую невозможно корректно пробросить

Приведи пример, где его невозможно корректно пробросить.

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

Приведи пример, где его невозможно корректно пробросить.

При реализации интерфейса из метода не имеющего объявленных исключений.

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

То есть строго говоря нам всегда нужно проверят признак прерванности потока и совершать выход в ручную.

Даже из документации следует, что это нужно делать не всегда:

«will receive a ClosedByInterruptException.

...

will receive an InterruptedException. »

Если вызвать interrupt, и _после_ этого нить заблокируется, что будет?

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

Если вызвать interrupt, и _после_ этого нить заблокируется, что будет?

Если вызывается какой-то блокирующий метод для уже прерванного треда, то должно кинуться InterruptedException.

Потенциально опасной влется ситуация когда мы вызомет interrupt когда прерываемый тред не заблокирован. Именно на этот случай нужно обрабатывать исключение.

Даже из документации следует, что это нужно делать не всегда:

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

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

Ну конечно же lisp!

Нет лиспа кроме Common Lisp-а,
и clisp пророк его :)

на винде работает, сам наблюдал и пользовался

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

А что вуаля? Почему это он ловит все исключения? Довольно редкая ситуация. Ну а если ловит, то чем эта ситуация отличается от обработки какого-то другого исключения?

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

Почему это он ловит все исключения? Довольно редкая ситуация.

Посмотрите в зеркало в ваши честные глаза.

Ну а если ловит, то чем эта ситуация отличается от обработки какого-то другого исключения?

Тем что поток не останавливается, удивлены?

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