¿Qué problemas pueden surgir al emular conceptos de otros idiomas?

12

He leído muchas veces en la web que si su idioma no admite algún concepto, por ejemplo, orientación a objetos, o quizás llamadas a funciones, y se considera una buena práctica en este otro contexto, debería hacerlo.

El único problema que puedo ver ahora es que otros programadores pueden encontrar su código muy diferente al habitual, lo que dificulta la programación. ¿Qué otros problemas crees que puedan surgir de esto?

    
pregunta Julio Rodrigues 17.09.2012 - 22:58

5 respuestas

23

Uno de los problemas es que puedes encontrarte escribiendo un montón de código para expresar algo de una manera que lo harás en otro idioma, mientras que hay una forma más directa en el idioma que usas.

Por ejemplo, en una respuesta sobre Desbordamiento de pila , he explicado cómo se contrae el código, concepto utilizado en .NET Framework, puede ser parcialmente emulado en PHP que no los admite. Terminé escribiendo un montón de código para nada, ya que lo mismo era factible con matrices simples.

Más generalmente, cada idioma tiene su propia cultura, sus mejores prácticas, su propio estilo.

  • Si empiezo a escribir código C # como si fuera C, sería feo.

  • Si aprehendo a Haskell como un desarrollador de Java que se vio obligado a usar Haskell, pero no quiere entender sus fortalezas y solo quiere clonar los conceptos de Java, el código que escribiría sufrirá.

  • etc.

No hay nada de malo en mejorar el idioma (por ejemplo, mejorar C # introduciendo unidades de medida me gusta en F #), pero si lo estás haciendo demasiado, tal vez deberías elegir un idioma diferente que realmente se ajuste a tus necesidades.

    
respondido por el Arseni Mourzenko 17.09.2012 - 23:17
10

La caída de la legibilidad es un problema en sí mismo: reduce drásticamente el número de personas que podrían mantener su proyecto sin una capacitación extensa de su parte.

Además,

  • La implementación del paradigma externo puede costar más que los ahorros potenciales de su uso
  • Su adaptación de la funcionalidad externa puede tener errores, lo que aumenta los costos de mantenimiento
  • Su adaptación de la funcionalidad externa puede llevar su pila de tecnología a límites más allá de los requeridos por su implementación nativa.
respondido por el dasblinkenlight 17.09.2012 - 23:24
4

No es tan buena idea como aparece en el papel.

Ejemplo 1: si tienes edad suficiente, puedes recordar los días en que C era el chico nuevo en la ciudad. A los programadores de Pascal y Ada no les gustaban las llaves de apertura y cierre de C. Ellos # definieron begin y end para abrir corsé y cerrar corsé, y ¡voilá! CADA! El desafortunado resultado fue feo desde la perspectiva de Ada o C.

Ejemplo 2, personal: una de las cosas que realmente me gustó del sistema de objetos Common Lisp es que es antes, después y alrededor de los métodos. Pueden ser muy útiles en múltiples lugares. Así que emulé este concepto en C ++ en algunos lugares seleccionados. La única forma de emular estas construcciones en C ++ es requerir que el desarrollador de una clase derivada llame al método de la clase primaria del mismo nombre en el lugar correcto en el código. Esto puso un requisito en los desarrolladores que derivaron de mis clases que eran un poco ajenos a la programación en C ++, y tal vez en contra de la programación en C ++. No importa qué tan bien documentado esté este requisito, la gente simplemente no siguió las pautas porque no se ajustaba al paradigma de C ++.

    
respondido por el David Hammen 18.09.2012 - 02:51
2
  

¿Qué problemas pueden surgir al emular conceptos de otros idiomas?

Abstracciones con fugas.

    
respondido por el Jim G. 18.09.2012 - 00:04
1

Puede ser prohibitivamente difícil. Imagine que intenta implementar LINQ desde C # en su aplicación Java. ¿O qué tal simplemente agregar cierres léxicos a un idioma? Tendrías que escribir un nuevo compilador, que te da un nuevo idioma.

O, para los casos en los que no tiene que implementar su propio idioma, imagine que intenta implementar métodos de recopilación utilizando funciones de orden superior (como el mapa) en un idioma que no tiene bloques de código o funciones o cierres lambda o Funciona como objetos de primera clase. Cada función de orden superior debe declararse como una interfaz e implementarse explícitamente, y todos los estados que se hubieran capturado en un cierre deben almacenarse explícitamente en la clase de implementación. Es tanto escribir más, y mucho más difícil de leer, que a menudo no vale la pena.

    
respondido por el psr 18.09.2012 - 00:11

Lea otras preguntas en las etiquetas