Domanda

Oggi un mio grande amico mi ha chiesto quali sono le principali differenze tra il nuovo linguaggio Go e Cython , che è un insieme di C-estensioni per Python. Non ho molta conoscenza su Python, qualcuno può dirmi perché andare è meglio / peggio di Cython?

È stato utile?

Soluzione

Cython non è davvero una lingua in senso convenzionale. È un preprocessore per costruire le estensioni Python che prende sintassi Python-simile (in realtà si sforzano di piena compatibilità Python) e produce codice C (utilizzando l'API Python C). In questo modo sono in grado di includere alcuni ottimizzazioni particolari caso, ma i reali benefici arrivano quando si aggiungono Cython informazioni di tipo statico specifico che è incorporato nel codice C, bypassando il runtime di Python per tali operazioni e con una conseguente alta velocità fino.

Go è un linguaggio di programmazione compilato. La prima cosa che si può fare in Go sta producendo un file eseguibile che non include il runtime di Python / avviare un'interprete Python - questo è impossibile in Cython. (Non può essere tecnicamente impossibile - ma non c'è davvero nessun punto di usare Cython se non si lavora con Python). Dal momento che Cython solo produce C la maggior parte delle vostre domande nel commento non si applicano in realtà -. È possibile utilizzare qualsiasi debugger C (anche se il fatto che è un'estensione Python rende le cose un po 'più complicato)

Altri suggerimenti

gevent è una libreria concorrente che utilizza Cython al suo centro. Sembra essere abbastanza veloce: http://nichol.as/asynchronous-servers-in-python

differenze? Praticamente tutto!

  • Concorrenza e canali.
  • Interfacce.
  • typechecking statico.
  • ...

Che dire di supporto. Si fa affidamento su un unico compilatore, fornito da Google. Che cosa succede se Go pieghe o va commerciale?

Con Cython si può sempre tornare a Python (o alla porta il codice C) se il progetto Cython piegato.

UPDATE:. Devo dire che ora sono arrabbiato con Cython La mancanza di sostegno filo è un duro colpo. Cython è thread-safe, ma ad un costo notevole. Il blocco interprete globale viene mantenuto per tutto il tempo una funzione esegue. In tal modo disattivando l'esecuzione simultanea su un intero codebase!

caratteristiche del Cython C-come sono scarsamente documentati e confusione per novizi. Lo ammetto.

Lo scopo di Cython è quello di supportare il software di matematica Sage; Go è quello di sostenere i piani ambiziosi di Google per avanguardia hardware costoso $$.

In breve, non ho più come uno di queste lingue. Tornando al C ++ (di nuovo). Il mio preferito è Cython .

GO introduce goroutines e canali. Vedere lingua FAQ

La ragione principale per provare andare è la presunta facilità di introdurre la concorrenza nei programmi. Credo che sarà la 'prossima cosa grande', come si coda fuori, e sempre più core sono disponibili velocità del processore. Se si vuole fare uso di processori multicore, è necessario scrivere il programma in modo che possa gestire le cose contemporaneamente.

ho già guardato Erlang, ma pur essendo utilizzato per Prolog lo trovo un po 'strano ancora; è così diversa dalla tua lingua 'media' di programmazione (della famiglia Pascal C o). Ma le sue caratteristiche di concorrenza sono facili da usare, una volta a ottenere il blocco di esso. Con poco sforzo sono riuscito a scrivere un parser in parallelo, che non fa uso di una pila, ma genera un nuovo 'filo / processo' ogni volta che ci sono stati più opzioni.

Finora andare sguardi abbastanza bene, nonostante alcune lievi incongruenze. Ed è anche veloce, che è un bonus.

Quindi, a meno Cython fa anche concorrenza facile, sarei favorevole andare ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top