Esiste un valore reale in una lingua portatile che ha un runtime molto diverso?

4

Un'altra domanda su SO mi ha presentato Oxygene , precedentemente Chrome prima del browser con lo stesso nome è venuto alla ribalta. È nella famiglia di sintassi Pascal, ma introduce molta grammatica ed elementi orientati agli oggetti dalla famiglia C, in particolare Java / C #. Uno dei suoi punti di forza pubblicizzati è che la lingua è implementata come indipendente dal runtime; i programmi scritti in Oxygene possono essere utilizzati come .NET, J2EE, Android o Cocoa, il che rende un linguaggio gestibile in memoria quasi come quello C / C ++ in terra non gestita.

Tuttavia, la mia domanda è se quel tipo di indipendenza sia davvero utile, dato che i quadri e gli ambienti che si prefiggono sono così diversi (e incompatibili). Ci sono una serie di problemi inerenti alla scrittura di un programma che può essere compilato in modo da mirare a tutti e tre questi runtime, e un linguaggio comune è solo la punta dell'iceberg. Java non ha uno spazio dei nomi System.Windows.Forms; ha java.swing e le classi sottostanti sono completamente differenti. Allo stesso modo, l'interoperabilità tra database di Java avviene tramite JDBC, mentre .NET ha il sotto-framework ADO.NET. Anche se avere un linguaggio comune è bello, essere fluenti in una "lingua" è tanto (in più, IMO) che parlare fluentemente delle biblioteche mirate come nella sintassi della lingua.

Qualcuno ha un esempio comune di dove le lingue indipendenti dal runtime sono state sfruttate per creare programmi veramente portabili su tutti i runtime supportati?

    
posta KeithS 17.07.2013 - 19:31
fonte

2 risposte

3

Non ho familiarità con Oxygene ma da tempo ho passato a guardare in Fantom e in altri linguaggi simili che fanno ciò a cui ti riferisci, quello che ho trovato è che non erano come stai suggerendo di farti conoscere diverse librerie.

La funzionalità killer che hanno è una singola libreria che si traduce in quelle indipendenti indipendenti; quindi scrivi codice contro la libreria Fantom usando le loro funzioni UI e lo tradurrà in Swing o WinForms a seconda che tu lo compili in .NET o Java. In questo modo non hai bisogno di sapere nulla sulle librerie .NET o Java, conosci una libreria e gestirà la traduzione per te su quelle cose standard come accesso DB, GUI, networking, ecc.

    
risposta data 17.07.2013 - 19:59
fonte
0

Si presume che il linguaggio sia progettato per essere in grado di compilare lo stesso identico programma di-per diverse piattaforme. Questo non sembra essere il caso. È portatile allo stesso modo in cui C e C ++ sono portatili. La tua lingua principale è la stessa su tutte le piattaforme, ma hai come target gli ambienti di runtime nativi. In altre parole, la lingua è multipiattaforma, non l'applicazione.

Anche per le applicazioni multipiattaforma, il mantenimento di diversi set di codice specifico per piattaforma è abbastanza comune. Anche se non è possibile riutilizzare il codice specifico della piattaforma, l'uso della stessa lingua consente un sacco di riutilizzo del codice, se si struttura correttamente l'applicazione.

Ad esempio, gestisco un programma per Java / Swing e Java / Android, per il quale il 75% del codice viene riutilizzato tra le piattaforme, anche se entrambe le app sono completamente native. Non è bello come il 100%, ma sicuramente supera lo 0% del codice comune che otterrei se portassi su Objective C / iOS.

    
risposta data 17.07.2013 - 20:14
fonte

Leggi altre domande sui tag