Quale di queste lingue è più facile da confezionare per altre lingue?

2

Voglio creare un progetto che può essere aggiunto come dipendenza ad altri progetti nelle seguenti lingue:

Java, C #, Rubino, Pitone, JavaScript (Nodo)

Ad esempio, voglio creare un jar che può essere aggiunto a un progetto Java, nonché un gioiello che può essere aggiunto a un progetto Ruby, ecc.

Quindi, per scrivere il mio progetto originale, è importante quale lingua uso? Qualcuna delle lingue sopra descritte sarà più vantaggiosa o più facile, quando arriverà il momento di impacchettarla in un barattolo, una gemma, ecc.?

Posso generare una gemma dal codice sorgente Java? O devo riscrivere il codice sorgente per ogni lingua desiderata?

    
posta Pat Meeker 14.07.2017 - 06:41
fonte

2 risposte

8

Dipende meno dalla lingua e più dalle specifiche implementazioni che usi. Ad esempio, l'uso di una libreria Java di JRuby, Jython e Nashorn sarà banale (non è nemmeno necessario comprimerlo come un modulo Gem, un uovo o un modulo npm, è possibile utilizzare direttamente un jar), utilizzarlo da YARV, CPython e Node.js sarà molto complesso.

Lo stesso vale per praticamente qualsiasi lingua tu scelga. Il denominatore minimo comune sarebbe probabilmente quello di esporre un'API compatibile con C (ad esempio, scriverlo in C, scriverlo in C ++ ed esporre un'API% di% POD e funzioni, scriverlo in Rust, scriverlo in D, ecc. e quindi fornire wrapper idiomatici per le implementazioni a cui sei interessato. La maggior parte delle implementazioni ha un modo di interagire con le API C, ma non è sempre conveniente, e sicuramente non è sempre veloce (JNI ad esempio è notoriamente lento, e JRuby dipende su JNI per l'interazione con C).

Si noti che lingue diverse e comunità diverse hanno idiomi diversi, quindi un'API che potrebbe essere appropriata per una lingua apparirebbe totalmente aliena in un'altra lingua. Tienilo a mente e fornisci wrapper idiomatici per tutte le lingue!

    
risposta data 14.07.2017 - 09:05
fonte
1

La soluzione migliore potrebbe essere quella di scrivere la tua libreria in chiaro C, e quindi fornire wrapper ad essa nella lingua di destinazione utilizzando il particolare metodo di caricamento delle librerie C in ogni lingua. Ogni lingua principale ha alcune possibilità di sfruttare le librerie C semplici.

    
risposta data 14.07.2017 - 07:19
fonte