Scegliere la lingua per scrivere la biblioteca generale in

1

Sto per iniziare a scrivere una libreria per supportare algoritmi di apprendimento automatico (alberi decisionali, RNA, reti Bayes, ecc.) e sto pensando di renderla una biblioteca molto generale. Con questo, voglio dire che voglio essere in grado di collegare questo modulo nel maggior numero possibile di lingue.

Per chiarire, ecco perché ho iniziato a scriverlo in C ++ (intestazioni di Windows):

  • So di poter importare librerie C ++ in C # e ho sentito che puoi importare C ++ in Python. Quindi, ovviamente, la libreria può essere utilizzata in 3 lingue, possibilmente 4 se non utilizzo intestazioni specifiche del sistema.

  • C'è una lingua in cui posso coprire una diffusione più ampia, ponderata dalla popolarità delle lingue? (Ad esempio, C # e C ++ hanno un peso piuttosto elevato per me perché uso entrambi frequentemente, meno Python.)

posta yolksamurai 23.12.2011 - 08:48
fonte

3 risposte

5

Se fai attenzione, puoi scrivere una biblioteca abbastanza generale con diversi collegamenti ad altre lingue . Ad esempio entrambi GTK (un toolkit grafico, codificato in C, concesso in licenza LGPL) e Parma Polyhedra Library (una libreria che gestisce le inaliquità e le astrazioni numeriche, codificata in C ++, licenza GPL) ha interfacce in diverse lingue. Assicurati di sapere come associare il codice a più lingue e amp; implementazioni (Ocaml, C ++, Python, Haskell, Java, Lua, ...). Ulteriori informazioni sulla gestione della memoria e sulle tecniche garbage collection .

Ti suggerisco anche di rendere il tuo software gratuito per la libreria , è IMHO il modo migliore (e forse il solo) per renderlo ampiamente utilizzato.

Ti suggerisco caldamente di rendere la tua libreria attiva su diverse piattaforme (dall'inizio), come Windows, Linux, MacOSX. Non renderlo solo per Windows!

Studia le librerie della concorrenza. Esistono già diverse librerie di apprendimento automatico.

Quindi la lingua per codificare la libreria non è il fattore più importante. E potresti anche renderlo un server, con il protocollo pubblicato per accedervi.

Forse scegliere la lingua che conosci bene è meglio. Altrimenti, potrei raccomandare Ocaml, C, C ++, Java, ...

suggerimenti per C ++

Se la codifica in C ++ considera l'utilizzo di un recente compilatore compatibile con C ++ 11 e forse qualche framework di librerie multipiattaforma come QtCore o Poco

    
risposta data 23.12.2011 - 09:06
fonte
2

In generale, puoi scrivere in qualsiasi lingua desideri, purché esca un legame C, quindi praticamente qualsiasi linguaggio può associarlo.

    
risposta data 23.12.2011 - 13:55
fonte
0

Se l'ampia compatibilità e portabilità sono le tue preoccupazioni principali, penso che ci siano due opzioni serie:

  • C / C ++ - questo sarà più facilmente importabile nella maggior parte degli altri linguaggi, poiché quasi ogni lingua ha un meccanismo per chiamare il codice C. Puoi compilare codice C / C ++ praticamente su qualsiasi piattaforma. Inoltre, se le prestazioni sono prioritarie, è bello poter codificare molto vicino al metal.
  • Java : è la lingua più diffusa in assoluto , anche con la più ampia diffusione e portabilità di una qualsiasi delle principali piattaforme VM, è anche una scelta molto comune per lo sviluppo dell'apprendimento automatico. Sospetto che la maggior parte dei tuoi potenziali utenti della biblioteca vorrà utilizzare Java. Un ulteriore vantaggio della pura Java è che ti offre la portabilità binaria (bytecode), quindi non hai nemmeno bisogno di ricompilarlo per piattaforme diverse. Lo svantaggio è che chiamare Java da altre lingue è un po 'più complicato (una soluzione sarebbe quella di fornire un'API in stile REST o socket)

La mia raccomandazione personale sarebbe probabilmente quella di andare per Java, perché è lì che la maggior parte dei tuoi potenziali utenti di biblioteca sarà (ricerca, sviluppo di software aziendale, avvio di cloud ecc.). Se vuoi rendere davvero facile per queste persone adottare la tua libreria, allora una libreria Java pura sarà molto più bella di un insieme di associazioni di codici nativi.

P.S. Ho un bel po 'di esperienza in questo spazio e ho studiato le opzioni abbastanza ampiamente, sto attualmente scrivendo una libreria di apprendimento automatico sulla JVM usando Java + Clojure.

    
risposta data 11.01.2012 - 02:46
fonte

Leggi altre domande sui tag