Quel genre de choses peut-on faire avec Java mais pas Python?


Je voudrais prendre un nouveau langage de programmation - Java, ayant utilisé Python depuis un certain temps. Mais il semble que la plupart des choses qui peuvent être faites avec Java peuvent être faites avec Python. Donc je voudrais savoir

  1. Quel genre de choses peut-on faire avec Java mais pas Python?
    • programmation mobile (Android).
    • Programmation des Threads POSIX.
  2. Inversement, quel genre de choses peut être fait avec Python mais pas Java si tout?

précisions: J'espère obtenir une réponse d'un point de vue pratique mais pas théorique et il devrait s'agir de l'état actuel, pas de l'avenir. Donc, théoriquement, tous les langages de programmation peuvent effectuer n'importe quelle tâche, pratiquement chacun est limité d'une manière ou d'une autre.

Author: kakarukeys, 2011-02-26

4 answers

Je suppose qu'en utilisant Jython, vous pouvez faire tout ce que vous pouvez faire en Java avec Python.

Inversement, Python a le compilateur PyPy, ce qui est assez cool - une machine virtuelle avec plusieurs backeds (Java Runtime, LLVM,. net et Python IIRC), plusieurs garbage collectors, plusieurs implémentations (Stackless), etc. Je sais que Java a un grand choix de machines virtuelles, mais la croissance de PyPy est incroyable, car il est écrit en RPython - un langage assez productif.

Aussi, un Java peut-il faites-le, dans 1 fichier et moins de 20 lignes, sans importation de bibliothèque? Évidemment, les deux langues ont des bibliothèques qui peuvent le faire, mais je parle juste de la flexibilité des langues.

class Logger(object): # boilerplate code
    def log(self,level,msg,*args,**kwargs): # *args, **kwargs = flexible arguments
        self._log(level,msg,*args,**kwargs) # call with flexible argments

    def _log(self,level,msg,*args,**kwargs):
        # override me at runtime :) 
        # I think Java people call this Dependency Runtime Injection
        if level>1:
            print msg,args,kwargs

logger = Logger() # boilerplate code

def logged(level): # what pattern do you call this?
    def logged_decorator(function): # and this? 
        def func(*args,**kwars): 
            name = func.__name__ # look ma, reflective metaprogramming!
            logger.log(level,name,*args,**kwargs)
            return func(*args,**kwargs)
        return func # boilerplate code
    return logged_decorator # boilerplate code

Exemple d'utilisation:

@logged
def my_func(arg1,arg2):
   # your code here
   pass
 4
Author: wisty, 2011-02-27 08:28:54

Les deux langues sont Turing complet, les deux ont de vastes bibliothèques, et les deux prennent en charge les extensions écrites en C afin que vous puissiez accéder au code de bas niveau si nécessaire. La principale différence réside dans l'endroit où ils sont actuellement pris en charge. Java en général a un support plus large que Python.

Votre exemple d'Android est un endroit où Java est le choix standard, bien que Python ait également un support sous la forme de Environnement de script Android. Java est déjà installé sur la plupart des ordinateurs personnels. Vous peut écrire des applets Java et s'attendre à travailler dans la plupart des navigateurs.

Une chose que vous ne pouvez pas faire facilement en Java est d'écrire rapidement des scripts courts qui effectuent des tâches utiles. Python est plus adapté aux scripts que Java (bien qu'il existe bien sûr d'autres alternatives).

 12
Author: Mark Byers, 2011-02-26 16:44:11

Vous aimeriez sûrement lire les comparaisons faites ci-dessous entre ces 2 langues.
Vérifiez - les:

 2
Author: Javascript is GOD, 2011-02-26 14:14:14

CPython a beaucoup de bibliothèques avec des liaisons vers des bibliothèques natives-pas si Java.

 -1
Author: Tony Merrit, 2011-02-26 11:23:40