Есть некоторые библиотеки, которые доступны в своих версиях, написанных на разных языках программирования, например, Lucene , который написан на Java (как говорится, на 100% чистой Java), но также имеет свои версии на C ++, C, Perl , Ruby, Lisp и некоторые другие языки. И я говорю о реализации на этих языках, а не только интерфейсы FFI .
Почему люди так делают? Я вижу одну очевидную причину: развертывание и распространение (и, возможно, разработка) легче, когда у проекта меньше зависимостей. Но есть ли что-нибудь еще? В каких ситуациях это стоит?
programming-languages
libraries
mik01aj
источник
источник
Ответы:
Некоторые причины, по которым я это сделал (переписать C-код в Haskell, в моем случае):
источник
Как правило, переопределение библиотеки как «родной» для конкретной платформы позволяет:
Например, я начал проект Noda Time как порт Joda Time . Просто не практично использовать Joda Time непосредственно из .NET ... вы действительно не хотите раскручивать JVM просто для вычисления даты и времени, а также для того, чтобы выяснить, как сделать взаимодействие между два. Автоматизированный порт (в стиле J #) мог бы быть выполнимым, но конечный результат не был бы приятным и идиоматическим API для использования из C #.
источник
Некоторые люди делают это, чтобы помочь выучить новый язык. Они выбирают библиотеку, с которой они были знакомы на предыдущем языке, видят необходимость в новом и начинают переносить ее.
Портирование чего-то знакомого - лучший способ сосредоточиться только на языковых частях нового языка, а не беспокоиться о проблемной области.
Он также имеет дополнительное преимущество, заключающееся в том, что он не выбрасывает код, как многие примеры проектов, найденные в книге или учебном пособии, это может быть то, что сообщество может использовать, добавлять, реорганизовывать, обсуждать и т. Д.
источник
Иногда вы разрабатываете для платформы, на которой инструмент, на котором написано программное обеспечение (Java в случае Lucene), не вариант. Если вам нужны функции без необходимости реинжиниринга кода с нуля, вы портируете код.
источник