Topic: Chiarimenti estensioni, implementazioni, Cython&Co  (Letto 221 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline drmacchius

  • python unicellularis
  • *
  • Post: 1
  • Punti reputazione: 0
    • Mostra profilo
Chiarimenti estensioni, implementazioni, Cython&Co
« il: Marzo 07, 2018, 12:10 »
Qualcuno mi chiarisce un attimo le idee?
cosa sono le implmemtazioni di python e le estensioni in altri linguaggi?




Python é interpretato, questo significa che permette di utilizzare una sintassi logica, chiara e libera il programmatore dal dover essere esperto di information tecnology per fare la programmazione di basso livello che rende C/C++ molto piú efficiente dal punto di vista della velocitä di esecuzione, ma anche molto piü complesso da programmare.




Ho letto che con estensioni e implementazioni si puó estendere il linguaggio evitando di dover usare altri linguaggi per fare ció che con python interpretato non si puö fare....ma la cosa non mi é molto chiara.




E poi cosa sono di preciso Cython, Jython e CPython? un traduttore automatico degli script in python in codice C per poterlo compilare come fosse C con tutti i problemi e i rischi delle traduzioni automatiche? un linguaggio che usa la sintassi di Python ma permette di fare programmazione di basso livello come in C/C++ permettendo di programmare anche attrezzature elettroniche e sistemi integrati? Un compilatore in grado di leggere codice sia in C/C++/Java che in Python permettendo di integrare parti di codice in C e parti in Python per incrementare le prestazioni, qualora si conoscesse bene entrambi i linguaggi?




Programmo per hobby e non farö mai di professione il programmatore, ma python mi piace perché mi ha permesso di capire e realizzare in pochi giorni quello che non capii e non fui in grado di fare in 5 anni con pascal nelle scuole 20 anni fa. La sua sintassi priva di parentesi strane e comandi oscuri permette di pensare il codice come lo si farebbe in un esercizio di logica o di matematica, invogliando a sperimentare.




Ma la fame vien mangiando e se uno pensa che magari potrebbe avere voglia di mettersi a fare elettronica per hobby con arduino e cose simili, farsi la casa dromotica e magari voler utilizzare tutti i gli smartphone abbandonati come controller per piccole sperimentazioni robotiche casalinghe, ci si domanda se dopo una prima fase in iniziale in cui si inizia ad avere autonomia con gli script e le macro in vari programmi (Reaper, Openoffice) e si ha un´infarinatura con la libreria di base e con le principali librerie per scrivere programmini desktop, si debba mettersi a studiare altri linguaggi - se si quale? Java per poi passare a farsi una infarinatura senza troppe pretese in C/C++ o direttamente in C++ o addirittura haswell e Lisp?- e se si vuole espandere i propri orizzonti ha poco senso addentrarsi ad approfondire a menadito tuttii meandri del linguaggio e conviene ampliare la propria visione facendosi un´infarinatura superficiale con altri linguaggi che perö permettono di essere usati piü facilmente su dispositivi portatili o nella hobbystica elettronica?




In pratica, se si vuole progredire si puö considerare Python (o la sua sintassi) solo come un mezzo didattico per avvicinarsi facilmente alla programmazione e per diventare un utente di mediolivello quando si usano sistemi operativi Unix-Like e con applicazioni particolari che ne prevedono l´utilizzo nella scrittura di macro oppure pué essere considerato un moderno linguaggio generalista che permette ai suoi conoscitori con le dovute integrazioni di poter fare tutto quello che puö fare chi conosce C/C++?




Di fatto se non si hanno ambiazioni professionali ma si vuole solo divenire un utilizzatore di computer e hobbysta elettronico evoluto serve tornare indietro e studiare linguaggi che erano basilari 20 anni fa o se ne puö fare a meno perché come C ha asservito la propria sintassi per la crezione di un linguaggio a oggetti (c++) per poi mantenerne la sintassi per creare un linguaggio meno complesso ma portabile e di script (Jawa), python si é evoluto asservendo la propria sintassi per la nascita di linguaggi compilabili e che permettano la programmazione di basso livello con la stessa efficienza di C/C++ ma con un linguaggio piú moderno e leggibile?

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 2.857
  • Punti reputazione: 9
    • Mostra profilo
Re:Chiarimenti estensioni, implementazioni, Cython&Co
« Risposta #1 il: Marzo 07, 2018, 21:44 »
C'è una gigantesca insalata di concetti, qui. Praticamente tutto quello che ti chiedi può essere imparato cercando su wikipedia, voce per voce. Wikipedia inglese, però. Ti rimando a quella.
Ma per cominciare.
"Python" è un linguaggio di programmazione. Vuole dire, una sintassi e una semantica descritti in modo astratto. Puoi pensarlo come un manuale di istruzioni, o come il libro della grammatica italiana. Ci sono anche delle persone che, nel tempo, aggiungono e/o modificano una regola qui, una regola là. Cercando di non esagerare.

Una "implementazione" di python è una realizzazione fisica delle regole descritte dal linguaggio. Puoi implementare python come vuoi, in teoria. Puoi implementarlo come un complicato gioco da tavolo, con molte carte, segnaposto, pedine colorate, tabelloni, percorsi a caselle (tutto tranne che dadi). Ma, per qualche ragione che adesso mi sfugge, python in genere non viene implementato come un gioco da tavolo. Di solito python viene implementato sotto forma di (attenzione, spoiler) software per computer. Una implementazione di python è un "programma" che ti consente di produrre dei risultati rispettando le regole della sintassi e semantica di python. Proprio come Word è un programma che ti consente di produrre dei documenti di testo rispettando certe regole di composizione (margini, dimensioni del foglio, font...).
L'implementazione più comune di Python è "Cpython", che è un programma scritto in C (un altro linguaggio di programmazione... da queste parti amiamo molto i giochi di scatole cinesi). E' anche l'implementazione "ufficiale", nel senso che gli sviluppatori di Python-il-linguaggio (ovvero i signori che ogni tanto cambiano e aggiungono le regole - sempre senza esagerare), nel tempo che gli rimane tra una discussione teorica e una pausa caffè, producono anche Cpython-il-programma.

Jython è un'altra implementazione di python, e IronPython è un'altra ancora. Wikipedia, please.

La distinzione tra "linguaggio compilato" e "linguaggio interpretato" è sfumata, scivolosa e tutto sommato non molto interessante. Fa parte del capitolo "implementazione", non del capitolo "linguaggio". Grosso modo, Cpython, Jython e IronPython non sono "compilati" in senso stretto, ma funzionano con la presenza di una virtual machine che precompila il codice e lo esegue.

Una "estensione" è un pezzo di codice (organizzato in vario modo) scritto in un linguaggio diverso da python, che però viene infilato dentro un programma python. Cpython è particolarmente attrezzato per accettare estensioni scritte in C/C++ (bisogna compilarle, però). Per esempio, librerie come Numpy fanno grande uso di estensioni C per velocizzare calcoli numerici complicati.
Cython è una libreria che facilita la scrittura e l'integrazione di estensioni C dentro Cpython.

Con python puoi fare qualunque cosa, o nessuna cosa. Man mano che studi python e che aumenti la tua comprensione del linguaggio, puoi accostarti a singoli e diversi domini applicativi, verificare come python è utilizzato in quei contesti, ed eventualmente capire se vuoi usare python, in tutto o in parte, o per nulla, per risolvere il tuo problema specifico nel tuo contesto specifico.
Ma l'errore più grave in assoluto che puoi fare è partire da zero, senza sapere nulla né di python né degli specifici domini applicativi, e chiederti subito, come prima cosa, se python "mi permette di fare la cosa x". Con python posso scrivere una web app? il firmware di un missile? un sistema di domotica su arduino? un'AI che gioca a scacchi? un gioco di strategia in tempo reale? un lemmatizzatore per classificare il corpus dell'Ariosto? un software che analizza il mercato dei bitcoin? un gestionale di magazzino? un sistema di guida automatica per automobili? un allarme anti-intrusione?
La risposta a queste domande è (nell'ordine): sì, sì, sì, sì, sì, sì, sì, sì, sì e sì. La risposta a queste domande è anche (in ordine inverso, questa volta): no, no, no, no, no, no, no, no, no e no.
Man mano che studi python, capirai fino a che punto puoi rispondere "sì" oppure "no", perché capirai python e capirai che cosa vuoi farci.