Несколько вопросов знатокам Python?

Сразу скажу, на Пайтоне я не пишу.


Как-то читал про Jython и IronPython. Все-таки, это интерпретаторы, реализованные на JVM/.NET соответственно, трансляторы Python в Java/C#, или компиляторы в код для JVM и .NET? Если точнее — интересует, можно ли написать одно приложение на Python, чтобы оно одинаково хорошо работало на Android, iOS и Windows Phone и не требовало при этом от пользователя установки дополнительных интерпретаторов и виртуальных машин.


Это был вопрос номер 1. Вопрос номер 2 — реализованы ли в компиляторах (названных выше и в Cython) или интерпретаторах (CPython) Пайтона автоматическое распараллеливание программы и ленивые вычисления? По моим представлениям, это наиболее интересные фишки, предоставляемые функциональной парадигмой. Или тут все ограниченно банальными map/grep и быстрой работы на многоядерных процессорах ждать не приходится?
  • Вопрос задан
  • 7873 просмотра
Решения вопроса 1
susl
@susl
1) IronPython не совсем интерпретатор, хотя он и ближе к нему, чем к компилятору. Он «компилирует» питон в деревья DLR, которые потом JIT-компилируются и модифицируются (не деревья, контексты) по ходу выполнения. В целом, даже первые версии были быстрее отточенного годами CPython только за счет этого. Но до уровня производительности даже C# и близко не дотягивает.

IronPython можно юзать на виндофоне, нужно с собой только 2 dllки тянуть. На Android, насколько знаю тоже нужно встраивать Python. А на iOS вроде бы совсем запрещено использовать интерпретируемые языки, но я с этим не разбирался, так что могут быть нюансы :)
Одно приложение под 3 столь разные платформы будет тяжело в любом случае, весь интерфейс придется переписывать, а на мобильных девайсах интерфейс собственно и есть 80% приложения.

2) Автоматическое распараллеливание не видел ни в одной реализации, да и не совсем питон под это подходит. Кроме того в CPython с параллельностью на уровне потока свои проблемы есть :)
С lazy не совсем понимаю что Вы спрашиваете, язык ведь не call-by-name/call-by-need. Eager evaluation как бы подразумевает что нет ленивости. Но, как и в любом языке с поддержкой замыкания можно спокойно что нужно реализовать, например простым декоратором, который заворачивает нужный метод и делает вызов только когда нужно.
Кроме того, есть генераторы и itertools — по сути ленивая работа с потоками в питоне.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@MikhailEdoshin
Я не эксперт, но, насколько понимаю 1) это интерпретаторы, компилятор один — Cython; 2а) автоматического распараллеливания нет, там вообще глобальный lock на интерпретатор; 2б) ленивые вычисления, в принципе, можно сделать с генераторами; в целом, на многоядерных процессорах Python автоматом не ускорится, а то и замедлится.
Ответ написан
retran
@retran
В IronPython нет никаких проблем с распараллеливанием, GIL`а там нет.
Ответ написан
Комментировать
Lerg
@Lerg
Defold, Corona, Lua, GameDev
IronPython это полноценная реализация питона для .Net, работает очень хорошо, можно пользоваться.
На счёт виндофона не знаю, а в Android и iOS можно загружать свою программу с уже установленным в неё интерпретатором питона (через библиотеку).
Автоматического распараллеливания в CPython нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
28 мар. 2024, в 21:25
2000 руб./за проект
28 мар. 2024, в 21:17
5000 руб./за проект
28 мар. 2024, в 20:46
150000 руб./за проект