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

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

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

Это был вопрос номер 1. Вопрос номер 2 — реализованы ли в компиляторах (названных выше и в Cython) или интерпретаторах (CPython) Пайтона автоматическое распараллеливание программы и ленивые вычисления? По моим представлениям, это наиболее интересные фишки, предоставляемые функциональной парадигмой. Или тут все ограниченно банальными map/grep и быстрой работы на многоядерных процессорах ждать не приходится? 

 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 — по сути ленивая работа с потоками в питоне. 

 Я не эксперт, но, насколько понимаю 1) это интерпретаторы, компилятор один — Cython; 2а) автоматического распараллеливания нет, там вообще глобальный lock на интерпретатор; 2б) ленивые вычисления, в принципе, можно сделать с генераторами; в целом, на многоядерных процессорах Python автоматом не ускорится, а то и замедлится. 

 В IronPython нет никаких проблем с распараллеливанием, GIL`а там нет. 

 IronPython это полноценная реализация питона для .Net, работает очень хорошо, можно пользоваться.  

На счёт виндофона не знаю, а в Android и iOS можно загружать свою программу с уже установленным в неё интерпретатором питона (через библиотеку).  

Автоматического распараллеливания в CPython нет.