2009-11-16 10 views
6

Heute fragte mich ein guter Freund von mir, was sind die Hauptunterschiede zwischen der neuesten Go-Sprache und Cython, die eine Reihe von C-Erweiterungen für Python ist. Ich habe nicht viel Wissen über Python, kann mir jemand sagen, warum Go besser/schlechter als Cython ist?Unterschiede zwischen Go und Cython

+6

Was sind Ihre Kriterien für die Bestimmung besser oder schlechter? Dies sind zwei völlig verschiedene Programmiersprachen; Es gibt viele Unterschiede, also kommt es darauf an, wonach Sie suchen. –

+0

Eigentlich möchte ich nur wissen, warum jemand Go anstelle von Cython verwenden sollte, z. B. was kann in Go getan werden, was mit Cython nicht einfach zu erreichen ist? Welche Sprachen haben eine bessere Leistung? Bessere Sicherheit? Bessere Benutzerfreundlichkeit? Bessere Debugger? Oder ist es alles nur ein bisschen anders als die Syntax? –

+0

Der Mangel an vernünftigen Thread-Unterstützung in Cython hat meine Liebe für diese Sprache getötet. 'Cython Nogil' – unixman83

Antwort

9

Cython ist nicht wirklich eine Sprache im herkömmlichen Sinne. Es ist ein Präprozessor für den Aufbau von Python-Erweiterungen, die Python-ähnliche Syntax (tatsächlich streben sie volle Python-Kompatibilität) und produziert C-Code (mit der Python-C-API). Dadurch können sie einige spezielle Falloptimierungen einbeziehen, aber die wirklichen Vorteile ergeben sich, wenn Sie Cython-spezifische statische Typinformationen hinzufügen, die in den C-Code integriert sind, wobei die Python-Laufzeit für diese Operationen umgangen wird und eine hohe Geschwindigkeit erreicht wird.

Go ist eine kompilierte Programmiersprache. Das erste, was in Go gemacht werden kann, ist das Erzeugen einer ausführbaren Datei, die die Python-Laufzeit nicht enthält/einen Python-Interpreter starten - das ist in Cython unmöglich. (Dies ist möglicherweise technisch nicht möglich - aber es ist nicht sinnvoll, Cython zu verwenden, wenn Sie nicht mit Python arbeiten). Da Cython nur C produziert, sind die meisten Ihrer Fragen im Kommentar nicht wirklich gültig - Sie können jeden C-Debugger verwenden (obwohl die Tatsache, dass es sich um eine Python-Erweiterung handelt, die Dinge etwas komplizierter macht).

+3

Über Cython: Ich stimme nicht zu. Sie müssen die Denkweise behalten, dass Sie in C arbeiten, NICHT in Python. Das Schreiben eines Stubloaders ist nicht so schwierig, da Python Open Source ist. – unixman83

1

GO stellt Gououtlines und Kanäle vor. Siehe Sprache FAQ

4

Unterschiede? So ziemlich alles!

  • Nebenläufigkeit und Kanäle.
  • Schnittstellen.
  • Statische Typenkontrolle.
  • ...
+4

Ugh Cython hat all diese Plus-Exploits 2 erheblich ausgereiftere und mächtigere Sprachen. –

+1

Als ich das letzte Mal überprüft habe, hat Cython Threads nicht gut unterstützt. – unixman83

1

Mein Hauptgrund geht zum Ausprobieren ist die vermeintliche Leichtigkeit der Gleichzeitigkeit in Programme einzuführen. Ich denke, das wird das "nächste große Ding" sein, da die Prozessorgeschwindigkeiten nachlassen werden und zunehmend mehrere Kerne verfügbar sind. Wenn Sie Multicore-Prozessoren verwenden möchten, müssen Sie Ihr Programm so schreiben, dass es gleichzeitig ausgeführt werden kann.

Ich schaute früher auf Erlang, aber obwohl ich an Prolog gewöhnt bin, finde ich es immer noch ein bisschen komisch; Es unterscheidet sich so sehr von Ihrer "durchschnittlichen" Programmiersprache (der C- oder Pascal-Familie). Aber seine Nebenläufigkeitsfunktionen sind einfach zu bedienen, sobald Sie den Dreh raus haben. Mit sehr wenig Aufwand konnte ich einen parallelen Parser schreiben, der keinen Stack verwendet, aber jedes Mal, wenn mehrere Optionen zur Verfügung standen, einen neuen "Thread/Prozess" hervorbrachte.

Bisher sieht das trotz einiger kleiner Inkonsistenzen recht gut aus. Und es ist auch schnell, was ein Bonus ist. So

es sei denn Cython auch Gleichzeitigkeit leicht macht, würde ich bevorzugen gehen ...

+0

+1 für * einfach zu bedienen *. Nebenläufigkeit in verschiedenen Formen war das "nächste große Ding" seit mindestens 30 Jahren; aber um "Nebenläufigkeit einzuführen" muss man umdenken, nicht einfach. – denis

+1

Cython unterstützt überhaupt keine Nebenläufigkeit ** (die GIL wird die meiste Zeit gehalten). Ja, Sie könnten mehrere * Prozesse * verwenden, aber das ist eine Nebenläufigkeit auf Betriebssystemebene, die unter Windows langsam ist. – unixman83

5

gevent ist eine gleichzeitige Bibliothek, die Cython in ihrem Kern verwendet. Es scheint ziemlich schnell zu sein: http://nichol.as/asynchronous-servers-in-python

+0

Ich bedauere, dies gewählt zu haben ... – unixman83

+0

Warum bereuen Sie es? –

+0

Die Leute scheinen zu denken, dass Python (Cython) gut skaliert, ich war einer von ihnen, bis ich die Interna gelernt habe. Look-up Global Interpreter Lock oder GIL und sehen, was ich spreche. Kurz gesagt, keine echte Threading-Unterstützung. – unixman83

2

Was ist mit Unterstützung. Sie vertrauen auf einen einzelnen Compiler, der von Google bereitgestellt wird. Was ist, wenn Go faltet oder kommerziell wird?

Mit Cython konnten Sie immer zurück zu Python gehen (oder den C-Code portieren), wenn das Cython-Projekt gefaltet wurde.

UPDATE: Ich muss sagen, dass ich jetzt mit Cython verärgert bin.Der Mangel an Thread-Unterstützung ist ein großer Schlag. Cython ist Thread-sicher, aber zu einem ernsthaften Preis. Die globale Interpretersperre wird die ganze Zeit gehalten, während der eine Funktion ausgeführt wird. Dadurch wird die gleichzeitige Ausführung über eine gesamte Codebasis deaktiviert!

Cython C-ähnliche Funktionen sind schlecht dokumentiert und verwirrend für Neulinge. Ich gebe zu.

Cython dient zur Unterstützung der Sage-Mathematiksoftware; Go's soll Googles ehrgeizige Pläne für hochmoderne teure $$ Hardware unterstützen.

Kurz gesagt, ich mag keine dieser Sprachen mehr. Zurück zu C++ (wieder). Mein Favorit ist Cython.

+0

Ugh, C++. Zumindest sind deine Gründe richtig. –

+1

Das ist falsch. Es weiß nicht, ob das im Jahr 2010 richtig war, aber Sie müssen das Gil nicht halten. Sie können das Gil jederzeit freigeben, wenn Sie keinen Python-Aufruf mit dem Befehl with nogil syntex durchführen müssen. – Matt

+1

"einzelner Compiler, von Google bereitgestellt" in beiden Fällen falsch. Es gibt 'gc' und es gibt [' gccgo'] (https://golang.org/doc/install/gccgo) (plus mehr denke ich, aber das sind die Großen). Go ist voll mit Quellen, die nicht von Google stammen. Google könnte morgen go and go aufgeben und Go wäre in Ordnung. –