PDA

View Full Version : [Generico] curiosità sui vari linguaggi


anonimizzato
25-08-2009, 14:30
Ciao a tutti,

scusate la domanda un da niubbo ma mi sono sempre chiesto se tra i vari linguaggi di progammazione: C, C++, Java, Python, Ruby, PHP, ASP ecc. che siano di scripting o no, compilati o interpretati ci siano delle limitazioni varie.

Mi spiego: un linguaggio qualsiasi può fare, in teoria, qualunque cosa che può fare un altro linguaggio? in Java posso fare le stesse cose che farei in C, C++? con Ruby o Python è possibile fare le stesse cose di Java o C, C++ e viceversa?

Non parlo tanto di comodità, ovvio che se voglio ad esempio fare un sito dinamico non lo faccio in C ma PHP o ASP (esempio), quanto alla possibilità del linguaggio di accedere a qualunque risorsa o strumento al pari un suo simile.

Nello creazione di software per usi più disparati, nell'accesso ai vari OS, nel dialogo con l'hardware ecc.

Mi chiedevo appunto se esistono o meno dei limiti invalicabili per cui il linguaggio X può fare "di tutto" mentre il linguaggio Y solo compiti specifici.

Spero di essere stato chiaro.
Tnx :)

banryu79
25-08-2009, 15:45
...
Mi chiedevo appunto se esistono o meno dei limiti invalicabili per cui il linguaggio X può fare "di tutto" mentre il linguaggio Y solo compiti specifici.

Spero di essere stato chiaro.
Tnx :)
Ti do i miei 2 cent, che valgono veramente poco.

Quando ci si pone una domanda come la tua, che è centrata attorno alla definizione di linguaggio, bisogna distinguere bene tra la definizione del linguaggio in se e la/e sua/e eventuale/i implementazione/i concreta/e esistenti.

Senza contare che gli aspetti che determinano alcuni dei limiti/differenze che hai indirettamente citato, quoto:

...quanto alla possibilità del linguaggio di accedere a qualunque risorsa o strumento al pari un suo simile...

sono dovute direttamente da altri aspetti (tipo di codice prodotto dalla compilazione del sorgente - gestione della memoria demandata a un garbage collector o meno - libreria standard di utilità messa a disposizione - ecc..) che sono tra loro interdipendenti.

Per dirla in breve: cito la frase che ha in firma marco.r:

It’s not about what the language makes possible, it’s what the language makes easy

wizard1993
25-08-2009, 15:45
tutti i linguaggi possono fare tutto quello che fanno gli altri in quanto sono tutti turing-completi, se poi invece possono fare tutto in senso assoluto bisogna che qualcuno dimostri la Tesi di Church-Turing, che a mio avviso non sarà meno arduo dell'ipotesi di rieman

fero86
25-08-2009, 16:08
tutti i linguaggi possono fare tutto quello che fanno gli altri in quanto sono tutti turing-completi, come potenza di calcolo si, ma come accesso alla piattaforma sottostante é tutto un altro discorso; in Java ad esempio attualmente non si possono scrivere filesystems ne' per Windows ne' per Linux ne' per Mac OS (non so per Solaris ma dubito fortemente).

edit - inoltre sarebbe meglio precisare che i linguaggi citati sono Turing-completi (anche se ho dei dubbi sul PHP), ma in generale esistono anche linguaggi non Turing-completi, per esempio SQL.

anonimizzato
25-08-2009, 16:10
tutti i linguaggi possono fare tutto quello che fanno gli altri in quanto sono tutti turing-completi, se poi invece possono fare tutto in senso assoluto bisogna che qualcuno dimostri la Tesi di Church-Turing, che a mio avviso non sarà meno arduo dell'ipotesi di rieman

Ti avviso che stai parlando ad un Geometra uscito con 68/100 :D

anonimizzato
25-08-2009, 16:13
come potenza di calcolo si, ma come accesso alla piattaforma sottostante é tutto un altro discorso; in Java ad esempio attualmente non si possono scrivere filesystems ne' per Windows ne' per Linux ne' per Mac OS (non so per Solaris ma dubito fortemente).


Uhm interessante, motivi principali di questa cosa?
Ho sentito di JavaOS, può essere considerato come un vero e proprio OS stile Win, Linux, OSX?


edit - inoltre sarebbe meglio precisare che [b]i linguaggi citati[/i] sono Turing-completi (anche se ho dei dubbi sul PHP), ma in generale esistono anche linguaggi non Turing-completi, per esempio SQL.

Infatti avevo letto che SQL non può essere considerato un vero linguaggio di programmazione in quanto privo, ad esempio, di cicli infiniti.

wizard1993
25-08-2009, 16:15
Ti avviso che stai parlando ad un Geometra uscito con 68/100 :D

e io ho finito da la seconda superiore; non è che sia un decano; so giusto per sentito dire il necessario

anonimizzato
25-08-2009, 17:20
Un'altra cosa che mi stavo chiedendo guardando un pò tra i vari toolkit GUI era perchè GUI come Wx o GTK sono scritte in C.

Java ad esempio ha una sua GUI scritta nel linguaggio stesso come Swing.

Come mai ad esempio Ruby o Python non hanno un toolkit grafico scritto nello stesso linguaggio?

Per questioni di efficenza? in C è più veloce? Oppure perchè non sarebbe possibile realizzarlo?

E sempre in tema: come fa (tecnicamente) un OS come Win a visualizzare le finestre grafiche di una GUI? Essendo abituato alla programmazione web so che le GUI in quel caso sono il rendering del codice HTML/CSS fatto dal browser ad esempio.

Mercie.

wizard1993
25-08-2009, 17:28
Come mai ad esempio Ruby o Python non hanno un toolkit grafico scritto nello stesso linguaggio?

no questione di comodità di chi le ha scritte: riscriversi da zero una libreria grafica è un suicidio visto che c'è possibilità di usare dei bridge verso altri linguaggi in genere si è preferito fare così; java invece è un discorso apparte dovuto alla volonta sun di far avere un look and feel uguale su tutte le piattaforme, cosa che librerie native fanno difficilmente. poi swing non è l'unica, ho trovato più di un applicazione java scritta con le qt

anonimizzato
25-08-2009, 17:40
no questione di comodità di chi le ha scritte: riscriversi da zero una libreria grafica è un suicidio visto che c'è possibilità di usare dei bridge verso altri linguaggi in genere si è preferito fare così

Si, immaginavo.

fero86
25-08-2009, 22:00
Uhm interessante, motivi principali di questa cosa? é cosi e basta; tu conosci un modo per scrivere in Java un file system per Windows o per Linux? senza usare JNI naturalmente, perché altrimenti non lo stai scrivendo in Java ma anche in C o C++.


Ho sentito di JavaOS, può essere considerato come un vero e proprio OS stile Win, Linux, OSX? non ne ho idea, suppongo di si visto che su Wikipedia c'é scritto che gira pure su IA-32, e avrá anche avuto i suoi file systems scritti in Java se é per questo, tuttavia resta il discorso iniziale: se non parliamo di Turing-completezza certi linguaggi, in relazione a specifiche piattaforme, possono risultare molto piu potenti di altri.

fero86
25-08-2009, 22:13
Un'altra cosa che mi stavo chiedendo guardando un pò tra i vari toolkit GUI era perchè GUI come Wx o GTK sono scritte in C. wxWidgets é scritta in C++, non in C. per GTK invece me lo chiedo anch'io.


Java ad esempio ha una sua GUI scritta nel linguaggio stesso come Swing. Swing é un'estensione di AWT e AWT non é scritta interamente in Java: per forza di cose una parte deve andare a finire in ambiente nativo tramite JNI, e quindi sará scritta in C o C++ (non so quale dei due, puoi andare a guardarti i sorgenti per saperlo).


Per questioni di efficenza? in C è più veloce? la questione dell'efficienza dei programmi Java contro quelli nativi ormai é trita e ritrita ed il mito é stato sfatato molte volte. nell'anno del Signore 2009 il bytecode Java parzialmente compilato just in time ha smesso giá da tempo di essere piu lento del codice nativo, anzi per tutta una serie di motivi esistono dei casi in cui il bytecode Java risulta addirittura piu veloce.


E sempre in tema: come fa (tecnicamente) un OS come Win a visualizzare le finestre grafiche di una GUI? a grandi linee nel subsystem grafico di Win32 tutto si riduce al disegno di rettangoli: tutto é finestra (non solo le finestre vere e proprie con le decorazioni* ma anche bottoni, caselle di testo, check boxes, combo boxes, ...) e quindi tutto é un rettangolo all'interno del quale l'applicazione disegna quello che vuole. la logica che permette la gestione ed il disegno in questi rettangoli ovviamente si trova nell'ambiente del kernel e si appoggia sul display driver stack. ok, é una spiegazione di m***a :asd:

*per decorazioni si intendono la barra di spostamento, il bordo, il menu di sistema e i tasti di ridimensionamento e chiusura. in gergo Win32 le finestre dotate di decorazioni si chiamano overlapped windows.


poi swing non è l'unica, ho trovato più di un applicazione java scritta con le qt dopo Swing la piu nota per Java é SWT piu che Qt.

PGI-Bis
25-08-2009, 22:25
Il filesystem di JNode è scritto in Java.

Quel che manca a Java per fare programmazione, diciamo, "di sistema" è il compilatore. Non posso scrivere un sistema operativo con la piattaforma Java standard di Sun semplicemente perchè quella piattaforma richiede un sistema operativo preesistente.

Ma la lingua è neutra rispetto a questo impedimento pratico. E' turing completo, ergo quello che posso fare in C lo posso fare anche in Java - in modo diverso ovviamente.

La ragione per cui non si fa è che esistono già meravigliosi compilatori frutto di decenni di investimenti i quali generano ottimo codice macchina a partire da un linguaggio minimale com'è C.

cdimauro
25-08-2009, 22:27
Se realizzo un s.o. in Java, non sarà possibile scrivere driver in C.

In pratica la situazione sarebbe ribaltata rispetto ai s.o. attuali, che sono scritti in C.

Le "potenzialità" di un linguaggio dipendono dal contesto implementativo e dalla prospettiva adottata.

anonimizzato
26-08-2009, 13:58
Il filesystem di JNode è scritto in Java.

Quel che manca a Java per fare programmazione, diciamo, "di sistema" è il compilatore. Non posso scrivere un sistema operativo con la piattaforma Java standard di Sun semplicemente perchè quella piattaforma richiede un sistema operativo preesistente.

Ma la lingua è neutra rispetto a questo impedimento pratico. E' turing completo, ergo quello che posso fare in C lo posso fare anche in Java - in modo diverso ovviamente.

La ragione per cui non si fa è che esistono già meravigliosi compilatori frutto di decenni di investimenti i quali generano ottimo codice macchina a partire da un linguaggio minimale com'è C.

Capito.