¿Por qué las personas reescriben algunas bibliotecas a muchos lenguajes de programación?

13

Hay algunas bibliotecas, que están disponibles en sus versiones escritas en muchos lenguajes de programación diferentes, como por ejemplo Lucene , que está escrito en Java (como dicen, 100% de Java puro), pero también tiene sus versiones en C ++, C, Perl, Ruby, Lisp y algunos otros lenguajes. Y estoy hablando de implementaciones en estos idiomas, no solo de las interfaces FFI .

¿Por qué la gente hace eso? Puedo ver una razón obvia: la implementación y distribución (y probablemente también el desarrollo) más fácil cuando un proyecto tiene menos dependencias. Pero ¿hay algo más? ¿En qué situaciones vale la pena?

    
pregunta mik01aj 23.05.2011 - 15:46

4 respuestas

16

Algunas razones por las que lo hice (reescriba el código C en Haskell, en mi caso):

  • implementación más sencilla: solo una cadena de compilación
  • menos dependencias (para obtener más adopción)
  • más portátil (por ejemplo, a Windows) si el código está en un lenguaje de alto nivel
  • para agregar soporte para el paralelismo no se hace fácilmente en el nivel bajo C
  • para hacer que el código sea un poco más seguro con sus recursos
  • para que el código sea más fácil de confiar
  • más idiomático (tipos fuertes, API más simple, más reutilización)
respondido por el Don Stewart 24.05.2011 - 20:26
18

Normalmente, la reimplementación de una biblioteca para que sea "nativa" en una plataforma particular permite:

  • Implementación y distribución más simples
  • Depuración más fácil
  • Más API idiomáticas adecuadas para su plataforma exacta
  • A menudo, un mejor rendimiento (la interoperabilidad de la plataforma puede ser una molestia)
  • Solucionar problemas de diseño que aún se encuentran en el original por compatibilidad

Por ejemplo, comencé el proyecto Noda Time como un puerto de Joda Time . Simplemente no es práctico usar Joda Time directamente desde .NET ... realmente no quiere tener que girar una JVM solo para hacer cálculos de fecha y hora, así como para averiguar cómo hacer la interoperabilidad entre los dos. Un puerto automatizado (a la J #) podría ser posible, pero el resultado final no habría sido una API agradable e idiomática para usar desde C #.

    
respondido por el Jon Skeet 23.05.2011 - 15:52
11

Algunas personas lo hacen para ayudar a aprender un nuevo idioma. Escogen una biblioteca con la que estaban familiarizados en un idioma anterior, ven que hay una necesidad en el nuevo y comienzan a migrar.

Portar algo familiar es la mejor manera de concentrarse solo en las partes del idioma de un nuevo idioma, y no preocuparse realmente por el dominio del problema.

También tiene el beneficio adicional de que, una vez hecho, no se descarte el código como lo serían tantos proyectos de ejemplo encontrados en un libro o tutorial, en realidad puede ser algo que la comunidad puede usar, agregar, refactorizar, comenta , etc.

    
respondido por el Neil N 23.05.2011 - 15:56
0

A veces se está desarrollando para una plataforma donde la herramienta en la que se escribió el software (Java en el caso de Lucene) no es una opción. Si desea las funciones sin tener que rediseñar el código desde cero, debe portar el código.

    
respondido por el Blrfl 25.05.2011 - 23:03

Lea otras preguntas en las etiquetas