2010-06-12 17 views
27

En el contexto de la discusión/comparación del lenguaje de programación, ¿qué significa el término "poder"?¿Qué significa "poderoso" cuando se habla de lenguajes de programación?

¿Tiene un significado bien definido? Incluso un significado mal definido?

Digamos que si alguien dice que "el idioma X es más poderoso que el lenguaje Y" o hace lo mismo que una pregunta, ¿qué significan o qué información intentan descubrir?

+1

Estaría en desacuerdo con la etiqueta "no contestable" que acaba de dar esto ... varias personas en este sitio han usado la palabra "poder" para describir los lenguajes de programación. Tal vez les gustaría dar un paso al frente y responder? –

+0

algunas buenas respuestas a lo incontestable ya :-) – djna

+1

"Es difícil decir lo que se pregunta aquí". Lo que es difícil es entender por qué lo cerró. Creo que es una pregunta buena, clara y directa. – lamcro

Respuesta

28

No tiene un significado bien definido. En este tipo de discusiones, "el lenguaje X es más poderoso que el lenguaje Y" generalmente significa poco más que "me gusta el lenguaje X más que el lenguaje Y". En el otro extremo del espectro, generalmente también se escuchará a alguien sobre cómo un lenguaje completo de Turing puede realizar las mismas tareas que cualquier otro lenguaje de Turing completo, de modo que ninguno de los dos sea estrictamente más poderoso que el otro.

Creo que un buen significado es la expresividad. Cuando un idioma es altamente expresivo, significa que se requiere menos código para expresar conceptos. Para mí, esto no solo significa que tienes que escribir menos código para realizar las mismas tareas, sino también que el código es fácilmente legible para los humanos. Por supuesto, generalmente (hasta cierto punto), tener menos líneas de código para leer hace que la tarea de leer y entender sea más fácil para los humanos.

Tener una biblioteca estándar "de gran alcance" entra aquí en la misma línea. Si un idioma viene equipado con bibliotecas minuciosas y completas, el código idiomático en ese idioma podrá beneficiarse del código de la biblioteca existente y no tendrá que repetir o reinventar la funcionalidad común en el código de la aplicación. El resultado final es, una vez más, tener que escribir y leer menos código para realizar las mismas tareas.

Sigo diciendo "en general" y "hasta cierto punto", porque una vez que el lenguaje se vuelve demasiado escueto, se vuelve más difícil para los humanos descifrarlo.Supongo que, en este extremo, un idioma puede considerarse "más poderoso" (o incluso "demasiado poderoso"). Así que supongo que estoy diciendo que mi interpretación personal de "poderosa" incluye algunos aspectos de "útil" y "legible" también.

+2

+1 por "Me gusta el lenguaje X más que el idioma Y." Eso es a lo que la mayoría de los debates sobre el "poder" de un lenguaje se reducen a la final. –

+3

+1 por expresividad. Y para ser claros, un lenguaje no solo obtiene poder de su capacidad para expresar instrucciones de manera sucinta a una computadora, sino también para expresar claramente/obviamente su intención a un lector casual (humano). Es por eso que más corto no siempre es mejor. –

+3

+1 para señalar que el poder de la biblioteca estándar se debe considerar como parte de la potencia del lenguaje – AlcubierreDrive

1

Veo el término como pelusa de marketing, ningún significado bien definido.

Si considera, por ejemplo, Ensamblador, C y C++. En ocasiones, uno baja de C++ "hacia abajo" a C para necesidades particulares, y luego de C a ensamblador. De modo que hacen del ensamblador el más poderoso porque es el único lenguaje que puede hacer todo. O, para decirlo de otra manera, una sola línea de código C++ puede reemplazar a varios de C (ocultando el envío polimórfico a través de punteros de función, por ejemplo) y una sola línea de C reemplaza a muchos ensambladores. Entonces C++ es más poderoso porque una línea hace "más".

Creo que el término tenía cierta vigencia cuando los productos como las primeras bases de datos y las hojas de cálculo tenían lenguajes incorporados, algunos bastante restringidos. Entonces, los vendedores decían que su idioma era "poderoso" porque era menos restringido.

4

en realidad sólo hay dos significados que las personas están preocupadas por:

"Potente" en el sentido de "toma menos recursos (tiempo, dinero, programadores, LOC, etc.) para lograr el mismo resultado mejor /" , y "poderoso" en el sentido de "es capaz de realizar una amplia gama de tareas".

Algunos lenguajes son extremadamente eficientes en recursos para una pequeña gama de tareas. Otros no son tan efectivos en cuanto a recursos, pero se pueden aplicar a una amplia gama de tareas (por ejemplo, C, que a menudo se usa en el desarrollo de sistemas operativos, creación de compiladores y bibliotecas de tiempo de ejecución, y trabajo con microcontroladores).

Cuál de estos dos significados alguien tiene en mente cuando usan el término "poderoso" depende del contexto (y aún entonces no siempre es claro). De hecho, a menudo es un poco de ambos.

21

C es potente, ya que es de bajo nivel y le da acceso al hardware. Python es poderoso porque puedes prototipar rápidamente. Lisp es poderoso porque su REPL te brinda fantásticas oportunidades de depuración. SQL es poderoso porque dices lo que quieres y el DMBS descubrirá la mejor manera de hacerlo por ti. Haskell es poderoso porque cada función se puede probar de forma aislada. C++ es poderoso porque tiene diez veces más construcciones sintácticas que cualquier persona necesita o usa. APL es poderoso ya que puede exprimir un programa de diez pantallas en diez caracteres. Demonios, COBOL es poderoso porque ... ¿por qué más lo estarían usando todos los bancos? :)

+0

Me gusta mucho esto. –

+0

El ensamblaje es potente porque puedes codificar la división más rápida sin signo por 3: 2 mov, 1 mul y 1 shr :) – Stringer

+0

¿qué hay de C# ??? – Kurru

11

"Poderoso" no tiene ningún significado técnico real, pero muchas personas han hecho propuestas.

Un par de los más interesantes:

  • Paul Graham quiere llamar a un lenguaje "más potente" si se puede escribir los mismos programas en menos líneas de código (o alguna otra, medida sensata cuerdo del tamaño del programa).

  • Matthias Felleisen ha escrito un estudio teórico muy serio llamado On the Expressive Power of Programming Language.

Como alguien que conoce y utiliza muchos lenguajes de programación, creo que hay diferencias reales entre las lenguas, y que "el poder" puede ser un atajo conveniente para describir las formas en que una lengua puede ser mejor que otro. Sin embargo, cada vez que oigo una discusión o afirmo que un idioma es más poderoso que otro, tiendo a mantener una mano firmemente en mi billetera.

+0

Hago +1 esto si dijiste "un idioma podría ser mejor que otro ** en un dominio específico **". Como es que huele demasiado a uno-verdadero-wayismo. –

+0

+1 por el enlace muy interesante a Felleisen: * la comparación del conjunto de funciones computables es inútil porque los lenguajes son universales ... más expresivo significa que la traducción al lenguaje más pequeño requiere una reorganización global del programa *, que coincide con el Sentido intuitivo de escribir, por ejemplo, corutinas, cierres, continuaciones en un idioma que no los tiene. – poolie

2

Puede tener varios significados. En el sentido básico, hay poder en cuanto a lo que es computable. En ese sentido, los lenguajes más potentes son Turing Complete, que incluye casi todos los lenguajes de programación de propósito general (a diferencia de la mayoría de los lenguajes de marcado y lenguajes específicos de dominio que a menudo no están completos).

En un sentido más pragmático, a menudo se refiere a cuán concisa (y legible) puede hacer ciertas cosas. Básicamente, qué fácil es hacer ciertas tareas en un idioma en comparación con otro.

El lenguaje que es más poderoso (además de ser algo subjetivo) depende en gran medida de lo que estás tratando de hacer. Si sus requisitos son ejecutar algo en un dispositivo pequeño con 64k de memoria, es probable que no vaya a utilizar Java. Lo más probable es que el lenguaje correcto sea C o C++ (o si es realmente un montaje de núcleo duro). Si necesita una aplicación CRUD muy simple hecha en 1 día, tal vez algo como Ruby On Rails sería el camino a seguir (sé que Rails es un framework y Ruby es el lenguaje, pero en estos días qué bibliotecas y frameworks están disponibles influyen enormemente en elegir un idioma)

2

nada absolutamente nada.

Para los programadores de alto nivel puede significar muchos tipos de datos disponibles integrados. O quizás abstracciones para crear o seguir fácilmente Patrones de diseño.

Paul Graham es un tipo muy alto nivel aquí es lo que tiene que decir: http://www.paulgraham.com/avg.html

chicos Java le puede decir algo acerca de la portabilidad, el poder llegar a cada plataforma.

Los programadores de C/UNIX pueden decirle que su velocidad y eficiencia, completo control sobre cada pulgada de memoria.

Los programadores de VHDL/Verilog le dirán que tiene control total sobre cada reloj y compuerta para no perder electricidad ni tiempo.

Pero en mi opinión, un "potente lenguaje" admite todas las características para que pueda completar su tarea. La documentación puede ser importante, o tal vez sea la portabilidad o la capacidad de hacer gráficos. Podría ser cualquier cosa, escribir una guía de usuario de Assembly es simplemente estúpido, por lo que está tratando de diseñar un procesador integrado en flash.

Elegir un idioma que se adapte perfectamente a sus necesidades siempre se sentirá como poder.

6

Potente significa "alto en potencia". "Poder" es algo que aumenta tu capacidad de hacer cosas. Las "cosas" varían en forma, tamaño y otras cosas. En términos generales, por lo tanto, "potente" cuando se aplica a un lenguaje de programación significa que le ayuda a realizar sus tareas de manera rápida y eficiente.

Esto hace que los dominios "potentes" estén bien definidos pero no constantes. Un lenguaje poderoso en un dominio podría estar paralizando en otro, por ejemplo. C es muy potente si desea realizar una programación a nivel de sistema, ya que le proporciona acceso directo a la máquina y al hardware y las estructuras que le permiten codificar mucho más rápido de lo que lo haría en el ensamblaje. Los compiladores C también producen código ajustado que se ejecuta rápidamente. Sin embargo, una vez que te mueves a aplicaciones web, C puede volverse muy "impotente" y paralizante ya que es mucho esfuerzo poner en marcha algo y tienes que preocuparte por muchos detalles extraños como memoria, etc.

A veces, los idiomas son "potentes" en múltiples dominios. Esto les da una etiqueta "poderosa" general (o insignia ya que están en SO aquí). El reclamo de PG es que con LISP, este es el caso. Eso podría ser cierto o no serlo.

Al final del día, "potente" es una palabra cargada, por lo que debe evaluar quién lo dice, por qué lo dice y qué significa para su trabajo.

8

La única manera significativa de describir "poder" en un lenguaje de programación es "puede hacer lo que requiera con la menor cantidad de recursos" donde "recursos" se define como "los costos que prefiera no pagar" y podría , por lo tanto, sea tiempo de desarrollo, tiempo de CPU, espacio de memoria, dinero, etc.

Así que, básicamente, la definición de "poder" es puramente subjetiva y no tiene sentido en ninguna discusión objetiva.

+0

No estoy de acuerdo con la última oración. Si el "poder" solo tiene significado en un contexto determinado, no necesariamente es menos útil o incluso sin sentido. El resto de la respuesta es perfecta. Poder = la capacidad de hacer que las cosas sucedan con poco esfuerzo. – iwein

0

Recuerdo que muchos instructores en la universidad llamaban a cualquier idioma que enseñaban "potente".

me lleva a pensar:

Potente = un término relativo comparación de la última manera de codificar algo frente a la forma original o anterior.

4

Normalmente hay dos significados distintos:

  • expresivo, es decir, el código tiende a ser muy breve y comprensible
  • bajo nivel, lo que significa que tiene un control muy preciso sobre el hardware .

Para la mayoría de los idiomas, estas dos definiciones se encuentran en extremos opuestos del espectro: Python es muy expresivo, pero no muy bajo nivel; C tiene un nivel muy bajo pero no es muy expresivo. Según la definición que elija, cualquiera de los dos idiomas es potente o no potente.

1

Se puede intentar alcanzar una respuesta precisa, al no asumir que los elementos que definen "potente" (en el contexto de los idiomas) provienen de tantas dimensiones.

ver cuántos podría ser, y mucho va a faltar:

  • velocidad de ejecución
  • tamaño del código
  • expresividad
  • paradigmas apoyados tiempo
  • desarrollo/depuración
  • dominio especialización
  • estándar libs
  • código base
  • ecosistema cadena de herramientas
  • portabilidad
  • comunidad
  • apoyo y/o documentación
  • popularidad
  • (añadir más información aquí)

Estos y más parámetros Aprende a dibujar X fotografía de cómo sería "programación en algún idioma" a nivel X. Esa será solo la definición, sin embargo, el único conocimiento real viene con la práctica real de usar el lenguaje, pero estoy divagando.

La pregunta se reduce a , que parámetro representará la calidad intrínseca de un idioma. Si se refiere a una lenguaen sí mismo, su propósito final, intrínseca es "expresar las cosas", y por lo tanto el parámetro más representativo es legítimamente expresividad, y es también uno que resuena con frecuencia cuando alguien habla de cómo poderoso es un lenguaje.

Por el momento intenta ampliar la pregunta/respuesta para cubrir más que la expresividad de la lengua "como lengua, como lengua", habla más sobre diferentes tipos de "ambiente", entorno social, desarrollo entorno, entorno comercial, etc.

Dependiendo de la complejidad del entorno que se definirá, tendrá que mezclar más parámetros que provienen de dimensiones múltiples, vastas, superpuestas y, a veces, contradictorias, y finalmente el objetivo de obtener la definición se perderá o la pregunta tendrá que ser reducida.

Esta aproximación aún no responderá a "qué es un lenguaje expresivo", pero, de nuevo, un entendimiento común son las definiciones que Vineet señala bien en su respuesta, y Forest comenta en los comentarios.Estoy de acuerdo, para mí "expresión" es "transmitir significado".

2

Creo que, tal vez casualmente, el physics definition of power es relevante aquí: "La velocidad a la que se realiza el trabajo".

Por supuesto, una tostadora no realiza muy rápidamente el trabajo de apagar incendios. De manera similar, el poder de un lenguaje de programación no es universal, sino específico del dominio o tarea al que se está aplicando. C es un lenguaje poderoso para escribir controladores de dispositivos o implementaciones de lenguajes de alto nivel; Python es un lenguaje poderoso para escribir aplicaciones de propósito general; XPath es un lenguaje potente para escribir consultas en conjuntos de datos estructurados.

Por lo tanto, dado un problema de dominio, la potencia de un lenguaje puede decirse que es la velocidad a la que un programador competente puede usarlo para resolver problemas en ese dominio.

-1

Creo que la potencia normalmente se refiere a la rapidez con que puede procesar los datos, por ejemplo, encontré que en Python tan pronto como una lista excede una longitud de aprox. 2000 se vuelve insoportablemente lento, mientras que en C++ una lista puede contener fácilmente 20,000 entradas sin hacerlo.

Cuestiones relacionadas