¿Qué es un lenguaje "poderoso"?

22

A menudo he visto personas peleándose por que su idioma favorito es más "poderoso" que otros. Cuando se trata de describir un lenguaje de programación, puedo entender qué es un lenguaje orientado a objetos o qué es un lenguaje dinámico, pero aún no puedo entender qué es exactamente un lenguaje "poderoso". ¿Cuáles son tus pensamientos?

artesano
fuente
55
Un lenguaje es tan poderoso como su usuario.
ysolik
66
@ysolik no necesariamente es cierto. podría darle a alguien un lenguaje horrible y ver hasta dónde llegan. tiene una op, NOOP! =)
Mark Canlas
2
@ Mark si estamos hablando de extremos, entonces tienes razón. Sin embargo, si considera los lenguajes más o menos utilizados de la actualidad, el usuario es una gran parte de él.
ysolik
1
PowerBASIC: No puede ser más poderoso que eso. ^^
gablin
1
@ysolik: sería más exacto decir "un idioma no puede ser más poderoso que su usuario".
Duncan Bayne

Respuestas:

32

No podemos definir qué es un lenguaje "poderoso" sin definir primero la palabra "poderoso".

La definición literal de potencia sería "potencia", y creo que todos podemos estar de acuerdo en que la gran mayoría de los compiladores, e incluso muchos intérpretes que no están completos en Turing, hacen un trabajo igualmente bueno para que el procesador ejecute sus instrucciones. . En cuanto a la definición literal, la respuesta a la pregunta sería "casi cualquier idioma".

Prácticamente, realmente deberíamos parar allí; definir un "lenguaje poderoso" es un poco como definir una "buena persona" o un "producto de calidad". No hay absolutamente ninguna definición objetiva de estas palabras que pueda hacer que todos, o incluso la mayoría de los expertos, estén de acuerdo, y la mayoría de las definiciones simplemente terminan planteando la pregunta . Dependiendo de con quién hable, el poder podría ser cualquiera de los siguientes:

  • Un rico marco o biblioteca de uso general para realizar una amplia variedad de tareas comunes
  • Una sofisticada sintaxis específica de dominio que "hace una cosa y lo hace bien"
  • Acceso directo a las funciones de la máquina, es decir, la capacidad de escribir código de bajo nivel.
  • Extraer conceptos de nivel de máquina, es decir, la capacidad de escribir código de alto nivel
  • Un sistema de tipo muy rico que permite estrategias avanzadas como reflexión, DI y análisis estático.
  • Un sistema de tipo muy suelto que permite a los programadores simplemente hacerlo (coerción de tipo, etc.)
  • La capacidad de tratar todo como un objeto , que ofrece verificación conceptual
  • La capacidad de tratar todo como una función , que ofrece verificación matemática
  • Gestión automática de memoria y recursos (GC, RAII) que genera menos errores
  • Memoria manual y gestión de recursos, lo que puede conducir a un rendimiento optimizado.
  • Una cantidad mínima de ruido sintáctico , lo que mejora la legibilidad
  • Una sintaxis más parecida al inglés , que ofrece una curva de aprendizaje más superficial
  • La capacidad de escribir código muy conciso (es decir, operador ternario, fusión nula, extensión nula)
  • La incapacidad para escribir código potencialmente confuso (es decir, sin operadores ternarios, etc.)

¿Todos ven lo que está pasando aquí? Prácticamente cada característica de viñeta puede interpretarse como un signo de "poder", ¡ y también puede ser exactamente lo contrario!

Alguien, en algún lugar, obviamente pensó que las variables variables eran una idea asombrosa que haría que el lenguaje fuera muy poderoso . No voy a juzgar; No soy un chico PHP.

Propongo que en lugar de todas estas tonterías de la guerra santa, todos usemos esta Definición Realmente Simple:

El lenguaje más poderoso es el que le permite enviar el producto de mayor calidad al menor costo en el menor tiempo posible.

¿Vago? Puedes apostar. Es por eso que cualquiera que quiera llamarse a sí mismo profesional debe comprender tanto los conceptos de programación como el dominio del proyecto. Esa es la única forma en que podrá decidir qué es "poderoso" para usted.

De lo contrario, podrías llevar un cuchillo realmente grande a una pelea de armas.

Aaronaught
fuente
1
+1 Esta es la única definición que intenta incluir todas las diversas nociones del poder del lenguaje. Me gusta especialmente cómo demuestras que las características en conflicto pueden considerarse poderosas. La informática es la ciencia de las compensaciones, incluso en la elección del idioma.
CodexArcanum el
11

Tal vez soy parcial porque soy un programador de sistemas. Creo que un lenguaje de programación utilizado para toda la programación de kernel, sistema, servidor y aplicaciones, o que admite múltiples paradigmas de programación, o ambos, puede llamarse "poderoso".

C, C ++, D son poderosos, pero obviamente esta es solo mi humilde opinión.

grokus
fuente
¿Usaría Java para la programación a nivel de kernel o le estoy malentendiendo?
Davy8
@ Davy8, tienes razón, según mi propia definición, no debería haber incluido Java.
grokus
5

Hay algunas definiciones de poder más allá de la integridad de Turing. Mark ha citado lo que tiendo a pensar como "la definición de Paul Graham". Es una definición bastante buena, con un defecto grave: está mal. Teóricamente es una muy buena definición del poder del lenguaje, pero ya sabes lo que dicen sobre la diferencia entre teoría y práctica ...

Si todos fueran capaces de escribir código perfecto, no solo perfectamente libre de errores, sino también a prueba de futuro, de manera consistente, entonces la definición de Paul Graham sería correcta. Pero ese obviamente no es el caso. En el mundo real, la mayor parte del tiempo y el esfuerzo que se dedica a la ingeniería de software no se dedica a la creación inicial del producto, sino al mantenimiento posterior. Dependiendo de las estadísticas que escuche (y probablemente varía bastante de un proyecto a otro), el mantenimiento puede representar entre el 60% y el 90% del esfuerzo total que se dedica a un programa.

El mantenimiento a menudo es realizado por personas distintas a la persona que escribió el código inicialmente, y con frecuencia meses o incluso años después de la escritura inicial del código, lo que significa que incluso para el codificador original también podría ser "código de otras personas". punto. Si desea ser productivo durante el mantenimiento, debe poder determinar rápidamente la intención original del código al leerlo.

Por lo tanto, un lenguaje más potente es aquel que hace que el código sea más fácil de leer rápidamente, no uno que hace que el código sea más fácil de escribir rápidamente. Suele haber una buena cantidad de superposición entre los dos, pero los conceptos a menudo también tienen propósitos cruzados, ya que la sintaxis breve a menudo omite detalles que un compilador / intérprete puede inferir mucho más fácilmente que un programador de mantenimiento.

EDITAR: Hay otro punto importante en la descripción del poder de un lenguaje: la gama de conceptos que puede expresar y la facilidad con la que puede alcanzar ambos extremos. A Paul Graham le gusta evaluar este nivel de nivel de abstracción que puede alcanzar, pero eso es solo la mitad. Cualquier lenguaje que imponga un límite inferior de abstracción, por debajo del cual no se puede ir cuando sea necesario, está paralizado porque los detalles que se están abstrayendo están allí por una razón. Esta es la diferencia entre un lenguaje de juguete fácil de leer como COBOL y un lenguaje poderoso y fácil de leer: COBOL no tiene punteros ni acceso al ensamblaje en línea, donde puede expresar cualquier cálculo, incluso aquellos para los que COBOL no es adecuado.

COBOL tampoco es particularmente bueno para alcanzar el extremo superior del espectro de abstracción. Según Wikipedia, "no tiene tipos definidos por el usuario ni funciones definidas por el usuario", lo que hace que sea muy difícil crear algoritmos y estructuras de datos.

Mason Wheeler
fuente
1
El problema que tengo con esto es que parece señalar a COBOL como un lenguaje muy poderoso.
David Thornley, el
2
Supongo que no sabes Lisp? :)
dash-tom-bang
1
@ Matt: Esa es la cosa. Lo que un lenguaje se utiliza para está limitada por lo que una lengua se puede utilizar para, y hay mucho menos se puede hacer con Python que con un lenguaje que no abstracta de distancia detalles de la memoria relacionada.
Mason Wheeler
3
-1 Debido a la noción implícita de que un código más corto y expresivo es de alguna manera más difícil de mantener. Has tomado los significados comunes del poder del lenguaje (expresividad versus apertura) y los has combinado en un concepto que solo la mitad expresa cualquiera de las dos ideas originales.
CodexArcanum
1
@ Jörg W Mittag: Tiene razón, pero creo que la oración que cité se refiere al control directo de los recursos de hardware (por ejemplo, memoria): C ++ le da más control. Por supuesto, si implementa una máquina virtual, tiene el control total, pero creo que Mason Wheeler se refirió a tener el control de la máquina real.
Giorgio
4

Esto se ha debatido repetidamente en gran medida (por ejemplo, en comp.lang.lisp, varias veces). No creo que a nadie se le ocurra una respuesta "correcta", pero mucha gente ha encontrado respuestas que me parecen obviamente erróneas.

En las respuestas que veo aquí, permítanme elegir la respuesta de Mason Wheeler. Por un lado, los temas que cubre son importantes, pero por otro lado, no puedo imaginar llamarlos relacionados con el "poder". Es un poco como si dijera que su mini furgoneta Honda es más poderosa que una dragster de combustible superior porque es más segura, más silenciosa, tiene un mejor manejo, más espacio para pasajeros y una conducción mucho más cómoda. Todo esto es absolutamente cierto, y todo es importante. Esos factores (entre muchos otros) hacen que la minivan sea mucho más práctica y razonable para la mayoría de las personas, pero no cambian el hecho de que el motor de la minivan produce solo unos 250 HP, mientras que el del dragster produce alrededor de 8000 HP.

El problema, por supuesto, es que con los vehículos hay una definición clara de lo que constituye "potencia" y lo que no. Con los lenguajes de programación, me parece que la discusión termina siendo equivalente a tratar el manejo, la comodidad, la velocidad, la capacidad de carga y el rango de crucero como parte de la "potencia". El resultado tiende a ser hilos que se ejecutan sin fin, generando mucho más calor que luz. La mayoría de las preguntas que surgen básicamente se reducen al grado de importancia que le da a las características ortogonales y completamente ajenas, por ejemplo, la capacidad de programar la MMU en lenguaje ensamblador es más o menos "poderosa" que la capacidad de crear funciones de nivel superior en Haskell? Al menos en mi opinión, no hay una manera significativa de comparar los dos, y no hay una respuesta significativa a la cual es "

Como tal, por mucho que odio, tengo que decir que en este caso, la única respuesta significativa es básicamente una relativista: un lenguaje poderoso es el que encuentras que te ayuda a lograr lo que quieres. Las diferencias en los objetivos de las personas hacen que la mayoría de las mediciones "absolutas" del poder no tengan sentido en el mejor de los casos.

Jerry Coffin
fuente
3

El equilibrio adecuado entre brevedad y flexibilidad.

Gran pregunta Dado que muchos idiomas son "completos de Turing", podemos ponerlos a todos en igualdad de condiciones con respecto a lo que son teóricamente capaces de hacer. Pero no hacemos eso porque los idiomas obviamente difieren entre sí. ¿Y cual es la diferencia?

La diferencia es la capacidad de decir muchas cosas diferentes con muy poco . Si pudiéramos saltar directamente a los extremos, podría crear un lenguaje que sea el mejor lenguaje para inicializar automáticamente un sistema de administración de contenido utilizando solo un carácter, 'c'. Pero, ¿cuál sería el punto de eso? Claro, es poderoso en un sentido de ser muy breve, pero no es flexible. Lo que quieres es un lenguaje que te permita decir muchas cosas complejas diferentes sin ser demasiado detallado. Sin ser como un ensamblaje, capaz de todo bajo el sol, infinitamente flexible pero extremadamente detallado.

Un lenguaje poderoso es un lenguaje que le permite decir muchas cosas diferentes con la menor cantidad de longitud posible.

Mark Canlas
fuente
1
-1. Lo siento, pero eso no es solo un concepto erróneo, sino peligroso, ya que puede obstaculizar severamente la productividad más adelante.
Mason Wheeler
@Mason Wheeler: ¿Podría dar más detalles?
Joey Adams
@Joey: Vea mi respuesta a esta pregunta.
Mason Wheeler
1

Una vez que llegas a Turing completo (y es fácil para un idioma hacer esto), "poder" no significa mucho, en el sentido de que todo lo que puedes decir en un idioma completo de Turing lo puedes decir en otro. La respuesta de Mark Canlas lo clava: la brevedad y la flexibilidad hacen la diferencia.

Dicho esto, el artículo de Matthias Felleisen sobre el poder expresivo de los lenguajes de programación constituye una lectura interesante. En él intenta formalizar la noción de expresividad en los idiomas.

Frank Shearar
fuente
Por cierto, esto no es realmente cierto. He visto idiomas que son Turing completos pero menos potentes que otros idiomas. Un ejemplo simple: considere un lenguaje que solo tiene enteros y cadenas como sus tipos de datos, no hay forma de convertir entre ellos, computación arbitraria en enteros y solo concatenación de cadenas y comparación en cadenas. (He trabajado con un lenguaje así.) Está Turing completo, pero no puede expresar funciones arbitrarias en cadenas, por lo que agregar más funcionalidad aumentará su poder de cálculo.
reinierpost
@reinerpost - dijo que el lenguaje completo de Turing todavía puede calcular funciones arbitrarias en cadenas, solo tiene que representarlas de una manera diferente. La integridad de Turing es bastante ortogonal a la pregunta de qué tipos de datos tiene disponibles. Por ejemplo, algunos lenguajes completos no tienen tipos de datos y solo representan todo con funciones, y tienen que recurrir a cosas como la codificación de la iglesia para la aritmética.
mikera
1

Parece haber un gran desacuerdo sobre lo que constituye el poder lingüístico. ¿Es brevedad, legibilidad, adaptabilidad o simplemente la integridad de Turing? Creo que todos estos factores entran en juego, por lo que quizás la mejor manera de verlo es en términos de estadísticas. Sí, estoy hablando de RPG de lápiz y papel, aquí.

La idea es que cada idioma tenga (aproximadamente) el mismo número de "puntos", que se pueden distribuir arbitrariamente en varias categorías. Para fines de discusión, digamos que los únicos factores son brevedad, legibilidad y flexibilidad. Un lenguaje puede ser extremadamente conciso y flexible, pero en consecuencia muy difícil de leer; o muy legible y flexible, pero extremadamente detallado.

(Podría decirse que la cantidad de puntos que un idioma tiene que distribuir está definida por la habilidad del diseñador e implementador, pero supongamos que todos los diseñadores de idiomas son igualmente buenos en lo que hacen).

Cuando un diseñador de idiomas decide aumentar la fuerza de un idioma en una categoría, lógicamente le quita una fracción de esa fuerza potencial a todas las demás categorías. Es por eso que a menudo se dice que el diseño del lenguaje de programación se trata de compensaciones. Desde este punto de vista, el poder general de un idioma aún no es definible, y tenemos que volver al método probado y verdadero de categorizar idiomas en función de sus fortalezas relativas. ¿No es satisfactorio? Demasiado.

Puede argumentar de dos maneras: que un lenguaje poderoso es uno con una distribución relativamente uniforme de puntos (jack of all trades, master of none), o con tantos puntos como sea posible en un área sin dejar a otros desatendidos (especialista). No existe el lenguaje del "hombre renacentista", con dominio perfecto en numerosos campos. Y si esa es su definición del lenguaje más poderoso posible, entonces simplemente no tiene suerte.

Para leer más, este artículo (por coincidencia también de Paul Graham, que parece tener opiniones encontradas) toca la idea de que, aunque sea difícil determinar cómo , los lenguajes de programación varían en potencia. Él argumenta de manera bastante persuasiva que es muy fácil ver cómo un lenguaje es menos poderoso que el preferido (le falta la característica X), pero es muy difícil ver cómo un lenguaje realmente más poderoso es, de hecho, es básicamente equivalente al lenguaje X, pero con un montón de otras cosas arrojadas. Te dejo con una cita de ese periódico:

Por inducción, los únicos programadores en condiciones de ver todas las diferencias de poder entre los distintos idiomas son aquellos que entienden el más poderoso. (Esto es probablemente lo que Eric Raymond quiso decir con Lisp para hacerte un mejor programador). No puedes confiar en las opiniones de los demás, debido a la paradoja de Blub: están satisfechos con el lenguaje que usan, porque dicta el cómo piensan sobre los programas.
Jon Purdy
fuente
No estoy de acuerdo con su modelo de que todos los idiomas tengan necesariamente el mismo número de puntos en su distribución. Tomemos el ejemplo extremo de brainf * ck y podemos decir fácilmente que no es comparable a ningún lenguaje moderno, aunque solo sea por el número total de puntos. es decir, no es un juego de suma cero en lenguaje de programación: el lenguaje no comienza con x puntos y los distribuye, comienzan con 0 y obtienen puntos dependiendo de las características. Naturalmente, es necesario tomar un compromiso, pero todas las opciones no son iguales (mi opinión al menos).
n1ckp
No dije que todos los idiomas necesariamente tienen el mismo número de puntos. Dije que todos los idiomas en consideración (es decir, idiomas diseñados para uso real) tienen aproximadamente el mismo número. Los lenguajes esotéricos son un caso patológico porque no están diseñados para ser útiles en primer lugar. Estaba simplificando en aras de la discusión, ya que no es útil tratar de diferenciar entre idiomas en función del "número de características", si las características son contables.
Jon Purdy
lo siento, volví a leer tu publicación y tengo que estar de acuerdo en que leo un poco demasiado rápido ... pero sigo en desacuerdo con que todos los idiomas (principales) tienen aproximadamente los mismos puntos. Tomemos Java y C ++ porque son un lenguaje que conozco bastante bien. Estoy bastante seguro de que puedo afirmar que c ++ es más potente que Java solo porque c ++ desactiva básicamente todo lo que Java hace (excepto gc, pero Java tampoco ofrece administración manual de memoria) MÁS (plantillas reales FTW). Eso es lo que quería decir, creo: No, no todos los lenguajes son más o menos iguales en la programación de la tierra de las hadas, incluso
n1ckp
cuando se comparan solo los idiomas principales.
n1ckp
0

Los lenguajes de programación son herramientas, nada más y nada menos. Algunas herramientas son extremadamente especializadas y adecuadas para fines particulares; otros se generalizan y simplifican hasta el punto de casi inutilidad.

Yo diría que el lenguaje más "poderoso" es el que le permite alcanzar sus objetivos con una inversión mínima de tiempo, energía y otras investigaciones; es decir, el lenguaje que proporciona el mayor ROI. En algunas situaciones podría ser C; en otros, Java; en otros más, Haskell.

Lo mejor sería familiarizarse con una amplia variedad de idiomas y para qué son útiles. Luego, cuando llegue el momento de comenzar un nuevo proyecto, puede tomar una decisión informada sobre cuál sería el más apropiado.

Benjamin Chambers
fuente
-1

Las discusiones sobre lenguajes de programación son, en mi humilde opinión, como discusiones sobre clientes de correo en algunos grupos de noticias de Linux: tienden a ser una guerra de llamas. Puedo recordar momentos en que VB6 era popular. Incluso hubo personas que argumentaron que no es un lenguaje de programación en absoluto, mientras que otros crearon aplicaciones sorprendentes con él.

Creo que los lenguajes de programación ya difieren en el concepto ya que los creadores tenían diferentes cosas en mente cuando crearon / diseñaron el lenguaje. Entonces, un lenguaje que se ajusta a un propósito, y bajo esa circunstancia es poderoso, podría no encajar en otro. Nombrar el lenguaje poderoso o no es entonces puramente subjetivo. Dicho esto, no creo que haya una métrica que pueda aplicarse.

Sascha
fuente
+1 para contrarrestar el voto negativo inexplicable, y porque generalmente estoy de acuerdo con él. Use un idioma para la tarea para la que fue diseñado. No escriba GUI complejas en C, no escriba algoritmos complejos o sistemas operativos en VB6
Gerry
-1

Todas son herramientas en su caja de herramientas. Un martillo puede ser poderoso, pero no si necesita una llave inglesa. C / C ++ es excelente si usted es un programador de sistemas, pero Adobe Flash probablemente sea mejor para el sitio web de juegos que desea crear.

bigtang
fuente
-1

El lenguaje de programación más poderoso es el que resuelve el siguiente problema de programación lineal :

Maximizar

      Rapidez de desarrollo
    + Facilidad de lectura de código
    + Facilidad de depuración
    + Sucisión / brevedad de expresión
    + Facilidad de aprendizaje / enseñanza
    - Uso de CPU
    - Requisitos de memoria

Sujeto a

  • Debe ser Turing completo.
  • Debe ser multi-paradigmático : funcional, orientado a objetos, programación lógica, programación de restricciones, concurrencia, computación distribuida, etc.
  • Debe ser versátil , lo que permite la creación de interfaces de línea de comandos, bibliotecas de componentes, servidores, GUI y aplicaciones web.
  • Debe ser portátil , es decir, fácil de transportar y mantener en un entorno multiplataforma.
  • Debe ser adaptable , es decir, abierto al cambio y capaz de evolucionar a medida que se produzca un nuevo hardware (chips cuánticos), nuevos paradigmas y otras innovaciones tecnológicas.
  • Debe fomentar el desarrollo de bibliotecas (como CPAN, CTAN y CRAN).
  • Debe ser gratuito y de código abierto .

(Y sí, lo sé, ya publiqué una respuesta completamente contradictoria. Eso es porque soy dialectiana).

AN Otro
fuente
-2

Esto fue escrito con respecto a los lenguajes naturales, pero creo que también es apropiado para los lenguajes de programación:

La creencia de que algunos idiomas son intrínsecamente superiores a otros está muy extendida, pero no tiene base en hechos lingüísticos. Por supuesto, algunos idiomas son más útiles o prestigiosos que otros, en un período particular de la historia, pero esto se debe a la preeminencia de los hablantes en ese momento, y no a ninguna característica lingüística inherente.
--David Crystal (ed.). The Cambridge Encyclopedia of Language 2 / e (1997). p.7

El "poder" simplemente no es atribuible a un idioma sobre otro. Sería una tontería decir que "el chino es un idioma más poderoso que el coreano". Del mismo modo, es una tontería decir "APL es un lenguaje más poderoso que COBOL".

Ha habido varios intentos de equiparar el poder lingüístico con alguna medida objetiva. Creo que estos intentos fallan:

  • Puede ser más fácil conseguir un trabajo en los Estados Unidos si hablas inglés americano que decir maorí. Del mismo modo, sin duda es más fácil conseguir un trabajo programando Java o C, en lugar de LISP o J. Pero esta ventaja económica ciertamente no refleja algún tipo de poder innato del lenguaje. Se trata del poder de los hablantes del idioma.
  • "Hola" no es mejor que "ni hao" o "shalom" porque es más corto. Del mismo modo, si bien una función puede expresarse más sucintamente en APL que en COBOL, esto tampoco refleja algún tipo de poder innato del lenguaje.

Mi opinión es que las discusiones sobre "el poder de un idioma sobre otro" son expresiones veladas de los sentimientos de superioridad del hablante sobre algún otro grupo. En resumen, sus prejuicios y estereotipos. Por supuesto, las personas con prejuicios realmente, realmente creen en sus estereotipos con bastante fuerza, y es poco probable que pueda persuadirlos a cambiar de opinión.

AN Otro
fuente
Estoy en desacuerdo. Para un ejemplo fácil, creo que nadie diría otra cosa que decir que existe un lenguaje más poderoso que brainf * ck (decir), incluso si teóricamente se está completando (creo). El punto es que 'poderoso' es una cierta cualidad que no tiene nada que ver con el hecho de que todos están 'completos'. Estoy de acuerdo en que puede ser algo subjetivo, pero decir que todos los idiomas son iguales con respecto a la 'poderosa' parece bastante descabellado.
n1ckp
1
@ n1ck: ¿Estás diciendo Poder = Legibilidad? Y:. La falta de legibilidad de BF implica su falta de poder? APL y J también tienen una legibilidad muy baja, sin embargo, son extremadamente útiles y concisos (aunque ciertamente tampoco estoy equiparando la utilidad o la concisión con el poder). Yendo en la dirección opuesta, COBOL es muy legible; es francamente detallado; pero de nuevo, esto difícilmente lo hace más poderoso que APL o BF. BF es muy divertido; tiene el poder de divertir; pero eso no es Power qua Power. El problema es que nadie parece tener una buena teoría del poder detrás de la cual puedan lograr un consenso.
AN Otro
1
No, no quise decir que poder = legibilidad. Simplemente no estoy de acuerdo con su punto de vista de que todos los idiomas son iguales y que no podemos comparar el lenguaje con la "potencia", como quiera que lo defina. En mi opinión, se requiere un nivel básico de legibilidad para dar poder al lenguaje, pero no es realmente la cuestión. Si realmente queremos responder a la pregunta, por supuesto, primero tendremos que definir la potencia, pero, en mi opinión, esto no es lo mismo que "el mejor en cada situación", y su respuesta parece insinuarme que lo interpretó de esa manera (es decir, no el mejor lenguaje para todo, que estoy un poco de acuerdo).
n1ckp