Чому люди переписують деякі бібліотеки на багато мов програмування?


13

Є деякі бібліотеки, які доступні у своїх версіях, написаних багатьма різними мовами програмування, як, наприклад, Lucene , який написаний на Java (як то кажуть, на 100% чиста Java), але також є свої версії на C ++, C, Perl , Ruby, Lisp та деякі інші мови. І я говорю про реалізації на цих мовах, а не лише інтерфейси FFI .

Чому люди так роблять? Я бачу одну очевидну причину: розгортання та розповсюдження (і, можливо, також розвиток) легше, коли проект має менше залежностей. Але чи є ще щось? У яких ситуаціях воно того варте?


4
Спілкуватися через природні межі вашого середовища виконання може бути дуже дорого.

1
@Thor: Однак деякі мови / середовища позитивно заохочують перетинати природні кордони (C - це загальний приклад цього, і це сильна тема серед програмістів Tcl). Я підозрюю, що це стосується переважно управління пам’яттю (а іноді й іншими ресурсами); насправді не добре мати двох менеджерів пам'яті в одному процесі, особливо якщо вони не були створені для співіснування. Зрештою, я припускаю, що це зводиться до того, які припущення ви робите, і які операції вони, у свою чергу, роблять неприпустимими ...
Донецькі стипендіати

Відповіді:


16

З деяких причин я це зробив (переписати код C в Haskell, в моєму випадку):

  • простіше розгортання: лише один ланцюжок побудови
  • менше залежностей (щоб отримати більше прийняття)
  • більш портативний (наприклад, для Windows), якщо код є мовою високого рівня
  • додати підтримку паралелізму, що не робиться легко на низькому рівні С
  • щоб зробити код трохи безпечнішим з його ресурсами
  • щоб полегшити довіру коду
  • більш ідіоматичні (сильні типи, простіший API, більше використання)

19

Зазвичай повторне впровадження бібліотеки "рідною" для певної платформи дозволяє:

  • Більш просте розгортання та розповсюдження
  • Легша налагодження
  • Більш ідіоматичні API підходять для вашої точної платформи
  • Часто краща продуктивність (інтероп платформи може бути болем)
  • Виправлення проблем із дизайном, які ще є в оригіналі для сумісності

Наприклад, я розпочав проект Noda Time як порт Joda Time . Просто не практично використовувати Joda Time безпосередньо зсередини .NET ... вам дійсно не потрібно спінізувати JVM просто для того, щоб робити розрахунки дати та часу, а також розробляти, як робити взаємодію між два. Автоматизований порт (a la J #) міг бути здійсненним, але кінцевий результат не був би приємним та ідіоматичним API для використання з C #.


11

Деякі люди роблять це, щоб допомогти вивчити нову мову. Вони вибирають віночок, з яким були знайомі попередньою мовою, бачать, що є потреба в новій, і починають переносити його.

Перенесення чогось знайомого - найкращий спосіб зосередитись лише на мовних частинах нової мови, а не дуже хвилюватися щодо проблемної області.

Це також має додаткову перевагу, коли це зроблено, не викидаючи код, як стільки зразкових проектів, знайдених у книзі чи навчальному посібнику, це насправді може бути чимось спільнотою, яке може використовувати, додавати, рефактор, обговорювати тощо.


0

Іноді ви розробляєте платформу, на якій інструмент, на якому було написано програмне забезпечення (Java у випадку Люцена), не є можливим. Якщо ви хочете, щоб функції не потребували повторної інженерії коду з нуля, ви портуєте код.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.