Mengapa orang menulis ulang beberapa perpustakaan menjadi banyak bahasa pemrograman?

13

Ada beberapa perpustakaan, yang tersedia dalam versi mereka yang ditulis dalam banyak bahasa pemrograman yang berbeda, seperti misalnya Lucene , yang ditulis dalam Java (seperti yang mereka katakan, 100% Java murni), tetapi juga memiliki versinya dalam C ++, C, Perl , Ruby, Lisp dan beberapa bahasa lainnya. Dan saya berbicara tentang implementasi dalam bahasa ini, bukan hanya antarmuka FFI .

Mengapa orang melakukan itu? Saya dapat melihat satu alasan yang jelas: penyebaran dan distribusi (dan mungkin pengembangan juga) lebih mudah ketika sebuah proyek memiliki lebih sedikit ketergantungan. Tetapi apakah ada hal lain? Dalam situasi apa itu sepadan?

mik01aj
sumber
4
Akan sangat mahal untuk berkomunikasi melintasi batas alami dari lingkungan eksekusi Anda.
1
@Thor: Namun beberapa bahasa / lingkungan secara positif mendorong melintasi batas alami (C adalah contoh umum dari ini, dan itu adalah tema yang kuat di antara programmer Tcl). Saya menduga ini terutama berkaitan dengan manajemen memori (dan terkadang sumber daya lainnya); itu benar-benar tidak baik untuk memiliki dua manajer memori dalam proses yang sama, terutama jika mereka tidak dirancang untuk hidup berdampingan. Pada akhirnya, saya kira itu tergantung pada asumsi apa yang Anda buat, dan operasi apa yang pada gilirannya membuat mereka tidak dapat diterima ...
Donal Fellows

Jawaban:

16

Beberapa alasan saya telah melakukannya (menulis ulang kode C di Haskell, dalam kasus saya):

  • penyebaran lebih mudah: satu rantai saja
  • lebih sedikit ketergantungan (untuk mendapatkan lebih banyak adopsi)
  • lebih portabel (misalnya ke Windows) jika kodenya dalam bahasa tingkat tinggi
  • untuk menambah dukungan untuk paralelisme tidak mudah dilakukan di level rendah C
  • untuk membuat kode sedikit lebih aman dengan sumbernya
  • untuk membuat kode lebih mudah dipercaya
  • lebih idiomatik (tipe kuat, API lebih sederhana, lebih banyak digunakan kembali)
Don Stewart
sumber
19

Biasanya menerapkan kembali perpustakaan menjadi "asli" untuk platform tertentu memungkinkan untuk:

  • Penyebaran dan distribusi yang lebih sederhana
  • Debugging lebih mudah
  • Lebih banyak API idiomatik yang cocok untuk platform Anda
  • Seringkali kinerja yang lebih baik (platform interop dapat menyebalkan)
  • Memperbaiki masalah desain yang masih asli untuk kompatibilitas

Sebagai contoh, saya memulai proyek Noda Time sebagai pelabuhan Joda Time . Ini tidak praktis untuk menggunakan Joda Time langsung dari dalam. NET ... Anda benar-benar tidak ingin harus memutar JVM hanya untuk melakukan perhitungan tanggal dan waktu, serta mencari cara melakukan interop antara keduanya Port otomatis (ala J #) mungkin layak, tetapi hasil akhirnya tidak akan menjadi API yang menyenangkan dan idiomatis untuk digunakan dari C #.

Jon Skeet
sumber
11

Beberapa orang melakukannya untuk membantu mempelajari bahasa baru. Mereka memilih lib yang mereka kenal dalam bahasa sebelumnya, melihat bahwa ada kebutuhan untuk itu dalam bahasa baru, dan mulai memindahkannya.

Porting sesuatu yang akrab adalah cara terbaik untuk fokus hanya pada bagian bahasa dari bahasa baru, dan tidak benar-benar khawatir tentang masalah domain.

Ini juga memiliki manfaat tambahan, setelah selesai, tidak membuang kode seperti banyak proyek sampel yang ditemukan dalam buku atau tutorial, itu sebenarnya bisa menjadi sesuatu yang dapat digunakan masyarakat, menambahkan, refactor, mendiskusikan, dll.

Neil N
sumber
0

Terkadang Anda mengembangkan untuk platform di mana alat perangkat lunak itu ditulis (Java dalam kasus Lucene) bukan pilihan. Jika Anda ingin fitur tanpa harus merekayasa ulang kode dari awal, Anda port kode.

Blrfl
sumber