Scrittura di un'API che è sintatticamente valido in più linguaggi di programmazione

1

Sto pianificando di scrivere una singola API che sia sintatticamente valida nella maggior parte dei principali linguaggi di programmazione (nella maggior misura possibile, in modo che solo una minima quantità di codice debba essere riscritta quando si passa da una lingua all'altra) . Penso che il modo più semplice per farlo sarebbe scrivere un gruppo di funzioni che consistesse interamente di chiamate di funzione e assegnazioni di variabili, poiché la sintassi per le chiamate di funzione è quasi identica in tutti i principali linguaggi di programmazione.

Ovviamente, dovrei scrivere funzioni "wrapper" per le if-statement e i while-loop, poiché la sintassi di ognuna di queste è diversa in ogni linguaggio di programmazione.

Ecco una prova di concetto per una funzione "poliglotta" che dovrebbe funzionare nella maggior parte dei linguaggi di programmazione:

//JavaScript syntax
function proofOfConcept(){
    printSomething("This is just a proof of concept."); //the function printSomething will
    //                      need to be implemented separately in each programming language.
}

//Java syntax
public static void proofOfConcept(){
    printSomething("This is just a proof of concept."); //the function printSomething will
    //                      need to be implemented separately in each programming language.
}

//Python syntax
def proofOfConcept():
    printSomething("This is just a proof of concept."); //the function printSomething will
    //                      need to be implemented separately in each programming language.

//C syntax
void proofOfConcept(){
    printSomething("This is just a proof of concept."); //the function printSomething will
    //                      need to be implemented separately in each programming language.
}

Questa sarebbe una strategia di progettazione utile o esiste un modo migliore per farlo? Penso che questa sarebbe una strategia utile per lo sviluppo di librerie in più linguaggi di programmazione, anche se richiederebbe un piccolo numero di funzioni "specifiche della lingua" da scrivere per ciascuna lingua di destinazione.

    
posta Anderson Green 18.03.2013 - 03:44
fonte

2 risposte

0

Il linguaggio di programmazione di Katahdin è stato progettato per risolvere questo problema. La sua documentazione include questo esempio, che combina le funzioni di Fortran e Python in un unico file:

import "fortran.kat";
import "python.kat";

fortran {
    SUBROUTINE RANDOM(SEED, RANDX)
        INTEGER SEED
        REAL RANDX
        SEED = 2045*SEED + 1
        SEED = SEED - (SEED/1048576)*1048576
        RANDX = REAL(SEED + 1)/1048577.0
        RETURN
    END
}

python {
    seed = 128
    randx = 0
    for n in range(5):
        RANDOM(seed, randx)
        print randx
}
    
risposta data 23.03.2014 - 21:42
fonte
4

Prima domanda: è utile? Non particolarmente. Cercare di creare un'unica API adatta a una moltitudine di lingue è spesso un approccio errato. Esistono diversi tipi di programmazione elencati nell'esempio:

  • C - programmazione procedurale classica
  • JavaScript - multi-paradigma tendente al funzionale e orientato agli oggetti
  • Java - Orientato agli oggetti.
  • Python - multi-paradigma tendente all'oggetto orientato

Il modo di pensare in ciascuna di queste lingue è particolare per quella lingua. Si può provare a scrivere codice procedurale in tutte le lingue, ignorando completamente il polimorfismo e semplicemente riportando tutto a C come montanti, ma non si integrerebbe bene con gli altri. Dovrebbe anche rinunciare a tutti i vantaggi della scrittura in un linguaggio di livello superiore. Passare da oggetti stupidi a procedure statiche definite da qualche parte - cioè così anni '80.

La domanda di perché si presenta davvero. A che scopo pratico servirebbe questo? Se sto scrivendo il codice C, sto scrivendo il codice C. Esistono negozi Polyglot, ma non sono la norma (è molto più semplice assumere 6 programmatori per una lingua e fare cose di quanto non sia assumere 1 programmatore in ciascuna delle 6 lingue e ottenere la stessa quantità di cose fatte). Raramente si trova un programmatore che stia scrivendo Java e C nello stesso momento in cui il vantaggio percepito di avere un'API di libreria che si adatta sia a Java che a C potrebbe essere un vantaggio molto piccolo.

Ciò di cui stai parlando è l'implementazione di un linguaggio specifico del dominio (il printSomething(String) dell'API poliglotta) come ambiente di runtime in più lingue. Questo non è impossibile, ma non è altrettanto utile. Questo è più difficile di quanto si possa immaginare - l'ambito di Python si basa sul rientro, il punto e virgola di Javascript è un separatore di istruzioni in opposizione al terminatore dell'istruzione in Java e C (e inesistente in python).

Questo non è un compito impossibile, ma in realtà non è così utile.

    
risposta data 18.03.2013 - 04:34
fonte

Leggi altre domande sui tag