Perché le persone riscrivono alcune librerie in molti linguaggi di programmazione?

13

Ci sono alcune librerie, che sono disponibili nelle loro versioni scritte in diversi linguaggi di programmazione, come ad esempio Lucene , che è scritto in Java (come si dice, 100% puro Java), ma ha anche le sue versioni in C ++, C, Perl, Ruby, Lisp e alcuni altri linguaggi. E sto parlando di implementazioni in queste lingue, non solo delle interfacce FFI .

Perché le persone lo fanno? Riesco a vedere una ragione ovvia: distribuzione e distribuzione (e probabilmente anche sviluppo) più facili quando un progetto ha meno dipendenze. Ma c'è qualcos'altro? In quali situazioni ne vale la pena?

    
posta mik01aj 23.05.2011 - 15:46
fonte

4 risposte

16

Alcuni motivi per cui l'ho fatto (riscrivo il codice C in Haskell, nel mio caso):

  • implementazione più semplice: una sola catena di build
  • meno dipendenze (per ottenere più adozione)
  • più portabile (ad esempio Windows) se il codice è in una lingua di alto livello
  • per aggiungere il supporto per il parallelismo non facilmente fatto in basso livello C
  • per rendere il codice un po 'più sicuro con le sue risorse
  • per rendere il codice più facile da fidarsi
  • più idiomatico (tipi forti, API più semplice, altro riutilizzo)
risposta data 24.05.2011 - 20:26
fonte
18

In genere il reimplementing di una libreria per essere "nativo" su una piattaforma specifica consente:

  • Implementazione e distribuzione più semplici
  • Più facile debug
  • Altre API idiomatiche adatte alla tua esatta piattaforma
  • Prestazioni spesso migliori (l'interoperabilità con la piattaforma può essere un problema)
  • Risoluzione dei problemi di progettazione che sono ancora nell'originale per compatibilità

Ad esempio, ho avviato il progetto Noda Time come porta di Joda Time . Semplicemente non è pratico utilizzare Joda Time direttamente da .NET ... non si vuole davvero dover avviare una JVM solo per fare calcoli di data e ora, oltre a capire come fare l'interopzione tra il due. Una porta automatizzata (a la J #) potrebbe essere stata fattibile, ma il risultato finale non sarebbe stata un'API piacevole e idiomatica da utilizzare da C #.

    
risposta data 23.05.2011 - 15:52
fonte
11

Alcuni lo fanno per aiutare ad apprendere una nuova lingua. Prendono una decisione con la quale erano familiari in una lingua precedente, vedono che c'è una necessità nel nuovo e iniziano a portarla a termine.

Portare qualcosa di familiare è il modo migliore per concentrarsi solo sulle parti linguistiche di una nuova lingua e non preoccuparti del dominio del problema.

Ha anche l'ulteriore vantaggio di, una volta fatto, di non buttare via il codice come tanti progetti di esempio trovati in un libro o in un tutorial, può essere in realtà qualcosa che la comunità può usare, aggiungere a, refactoring, discute , ecc.

    
risposta data 23.05.2011 - 15:56
fonte
0

A volte state sviluppando per una piattaforma in cui lo strumento in cui è stato scritto il software (Java nel caso di Lucene) non è un'opzione. Se vuoi le funzionalità senza dover reingegnerizzare il codice da zero, porti il codice.

    
risposta data 25.05.2011 - 23:03
fonte

Leggi altre domande sui tag