¿La sintaxis realmente importa en un lenguaje de programación? [cerrado]

41

Uno de mis profesores dice que "la sintaxis es la interfaz de usuario de un lenguaje de programación", los lenguajes como Ruby tienen una gran legibilidad y está creciendo, pero vemos muchos programadores productivos con C \ C ++, por lo que los programadores realmente importa. que la sintaxis debería ser aceptable?

Me encantaría saber tu opinión al respecto.

Descargo de responsabilidad: no estoy intentando iniciar un argumento. Pensé que este es un buen tema de discusión.

Actualización: Esto resulta ser un buen tema. Me alegra que todos estén participando en él.

    
pregunta Saif al Harthi 15.11.2011 - 22:44

18 respuestas

65

Sí lo hace. Si tiene dudas, tome APL , o J , o Brainfuck , o incluso Lisp o Forth simple y simple, y trata de entender cualquier programa que no sea completamente trivial. Luego, compara con, por ejemplo, Python.

Luego compara el mismo Python (o Ruby, o incluso C #) con cosas como Cobol o VB6.

No estoy tratando de decir que la sintaxis melenuda es mala y la sintaxis parecida a un lenguaje natural es buena en todas . Pero la sintaxis obvoius hace hace una gran diferencia. En general, todo lo que puede escribir en el lenguaje de programación más hermoso que también puede escribir como un programa de máquina de Turing, pero normalmente no quiere hacerlo, ¿verdad?

    
respondido por el 9000 15.11.2011 - 22:27
11

En la práctica creo que sí importa. La legibilidad ya ha sido discutida anteriormente. Otro problema podría ser ¿cuántas pulsaciones de teclas se necesitan para expresar una idea / algoritmo? Otro problema más es la facilidad con la que los simples errores tipográficos pueden ser difíciles de captar para el ojo humano y la cantidad de travesuras que pueden causar.

También he encontrado útil en algunos contextos analizar y / o generar fragmentos de código a través de otro programa de computadora. La dificultad de analizar el El lenguaje y / o la generación de código correcto impacta directamente cuánto esfuerzo se requiere para crear / mantener tales herramientas.

    
respondido por el Omega Centauri 26.12.2010 - 20:48
10

Creo que su profesor se refiere a azúcar sintáctica .

  

El azúcar sintáctica es un término informático que se refiere a la sintaxis dentro de un lenguaje de programación diseñado para facilitar la lectura o la expresión, mientras que existen formas alternativas de expresarlas .

Entonces, lo que su profesor implica, es que cualquier código / sintaxis escrito en un lenguaje de programación, puede expresarse en otros lenguajes de la misma forma, o incluso en el mismo idioma.

Robert Martin, extrayendo de Teorema de programación estructurada , resumió lo que los programadores hacen fundamentalmente con los lenguajes de programación en su nota principal en RailsConf 2010: Robert Martin (video de youTube, ver después de la marca de 14 minutos, aunque lo recomiendo todo):

  • secuencia (asignación)
  • Selección (si hay declaraciones)
  • Iteración (hacer bucles)

Eso es todo lo que hacen los programadores, de un lenguaje de programación a otro, solo en una sintaxis o interfaz de usuario (UI) diferente. Esto es a lo que supongo que se refería su profesor, si él / ella está hablando de manera abstracta sobre los lenguajes de programación.

Entonces, en essence , la sintaxis no importa . Pero si desea ser específico, obviamente, ciertos lenguajes y sintaxis son más adecuados para ciertas tareas que otros, por lo que podría argumentar que la sintaxis es importante.

    
respondido por el sunpech 27.12.2010 - 04:23
7

Sí y no.

La sintaxis tiene un par de aspectos diferentes.

  • legibilidad
  • expresividad
  • posibilidad de análisis

La legibilidad ya se ha mencionado.

La expresividad es un caso interesante. Voy a usar el paso de funciones como ejemplo, porque es una especie de punto de inflexión del dolor semántico / sintáctico.

Tomemos C ++ por ejemplo. Puedo crear una función de primer orden de esta manera:

class funcClass
{
  int operator()(int);
}
funcClass fun;

void run_func(funcClass fun)
{
   fun();
}

Este idioma en particular se usa comúnmente en los Elementos de programación de Stepanov.

Por otro lado, puedo imitarlo en Common Lisp con algo como this :

(defun myfunc() )

(defun run_func(fun)
  (fun))

O, en Perl -

   sub myfunc
   {
   }

   sub run_func
   {
      my $func = shift;
      $func->();          #syntax may be a little off.
   }

O, en Python -

def myfunc():
    pass

def run_func(f):
    f()

Todos ellos tienen, esencialmente, el mismo contenido semántico, aunque el ejemplo de C ++ incluye algunos metadatos de tipo. ¿Qué lenguaje expresa la idea de pasar mejor una función de orden superior? Common Lisp apenas hace una variación sintáctica. C ++ requiere que se cree una clase solo para "llevar" la función. Perl es bastante sencillo al hacer algún nivel de diferenciación. Así es Python.

¿Qué enfoque se adapta mejor al dominio del problema? ¿Qué enfoque puede expresar mejor los pensamientos en tu cabeza con la menor "falta de coincidencia de impedancia"?

La parsabilidad es, en mi opinión, un gran problema. En particular, me refiero a la capacidad del IDE para analizar y cortar el idioma sin cometer errores. El cambio de formato es útil. Los lenguajes delimitados por token tienden a analizarse bien - ruby / c / pascal, etc.

Considere, sin embargo, que se han creado importantes sistemas de todo tipo con cada lenguaje serio para resolver problemas del mundo real. Si bien la sintaxis es una barrera para expresar algunas cosas, es una barrera de trabajo. Equivalencia de Turing y todo eso.

    
respondido por el Paul Nathan 26.12.2010 - 22:11
5

La sintaxis definitivamente importa, aunque tiendes a notarlo más cuando no es intuitivo y fomenta los errores. Por ejemplo, la infame broma del "último error del mundo":

if (AlertCode = RED)
   {LaunchNukes();}
    
respondido por el Mason Wheeler 27.12.2010 - 20:44
5

La sintaxis sí importa, y puedo darte dos ejemplos de apoyo: Dylan, que es un Lisp con una sintaxis más convencional, y Liskell, que es Haskell con una sintaxis similar a la de Lisp. En cada caso, se propuso una variante del lenguaje que tenía exactamente la misma semántica, pero una sintaxis radicalmente diferente.

En el caso de Dylan, se pensó que eliminar las expresiones S en favor de algo más convencional ayudaría a atraer a una gama más amplia de programadores. Resultó que la sintaxis no era lo único que impedía a los programadores usar Lisp.

En el caso de Liskell, se pensó que el uso de expresiones-s permitiría un uso más sencillo de las macros. Resultó que las macros realmente no son necesarias en Haskell, por lo que el experimento tampoco funcionó.

Aquí está la cosa: si la sintaxis no le importara a nadie, ningún experimento se hubiera intentado.

    
respondido por el Larry Coleman 01.02.2011 - 02:11
3

La respuesta podría estar en separar lo que "importa" en factores informáticos y factores humanos . Hay muchos factores humanos en la sintaxis:

  • legibilidad
  • sucintidad
  • mantenibilidad
  • Pedagogía
  • prevención de errores
  • Idoneidad para el propósito: ¿es un lenguaje REPL, un lenguaje de script o un lenguaje de sistemas grandes?

En lo que respecta a la computadora, el único problema de la sintaxis es si hay ambigüedades que deben resolverse, y cuánto tiempo se tarda en tokenizar / analizar el código al compilarlo / interpretarlo, y es solo en el caso de este último, donde la sobrecarga de análisis es un problema importante.

Esa podría ser la razón por la que siempre obtendrás una respuesta de "sí y no" a esta pregunta, porque tiene dos aspectos.

    
respondido por el Rei Miyasaka 27.12.2010 - 02:20
1

Sin la sintaxis, no tendríamos una "plantilla" común desde la cual comunicar, a nivel humano, la intención de un bloque de código. La sintaxis proporciona un framework común a partir del cual se pueden estandarizar los compiladores; Los métodos pueden ser compartidos; El mantenimiento puede ser simplificado.

    
respondido por el IAbstract 26.12.2010 - 20:28
1

Creo que lo realmente importante es el acceso a la API , y la disponibilidad de funcionalidad de bajo nivel (como control de memoria y bloqueo) cuando sea necesario. La mayoría de los otros idiomas vienen con estas características incluidas. El problema es que cuando necesitas funcionalidad adicional a menudo tienes que usar un lenguaje como C para implementarlo. Y es engorroso interconectar C con el idioma que estás usando.

Para todo excepto desarrollo web (y matemáticas) he encontrado que C / C ++ sigue siendo EL lenguaje de un sistema operativo y una aplicación. Es lo que se admite la mayor parte del tiempo para el desarrollo de aplicaciones multiplataforma, multiplataforma y multiproceso. Y la sintaxis de C está bien. Simplemente muy simple y relativamente detallado. La sintaxis asombrosa realmente no importa mucho. La disponibilidad de poder y API lo hace Todos debemos interactuar con el código de otras personas (que es la mayor parte del tiempo escrito en C o sus derivados).

    
respondido por el unixman83 26.12.2010 - 23:19
1

La sintaxis definitivamente importa. Es de gran valor si la sintaxis del idioma es lo suficientemente flexible como para permitirle crear un lenguaje específico de dominio conveniente y legible para su aplicación. Si tiene dudas, imagínese haciendo problemas de álgebra en el latín prosaico, como se hizo antes del siglo XVIII, o imagine hacer cálculos sin la notación Leibniz, que ahora es familiar. Claro, un texto de cálculo es ilegible para un principiante, pero con la práctica podemos usar el cálculo y la notación Leibniz para resolver rápidamente una clase de problemas que requieren páginas de matemáticas con métodos clásicos. La programación es solo un poco más de las matemáticas. Una notación conveniente, cercana al dominio del problema, puede hacer una enorme diferencia en la productividad.

    
respondido por el kevin cline 16.11.2011 - 09:07
1

Aquí hay un programa que calcula la facultad de 6:

S(K(S(S(SI(KK))(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(KI)(S(S(KS)(S(KK)
(S(KS)(S(K(SI))K))))(KK)KK))))))(S(K(S(S(K(SI))(SII)(S(K(SI))(SII))
(S(K(S(S(KS)(S(KK)(S(SI(KK))(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)KK)))))))
(S(K(S(S(KS)(S(K(SI(KK)))(SI(K(KI)))))))(S(K(S(K(S(S(K(SI))(SII)(S(K(SI))
(SII))(S(K(S(S(KS)(SI(KK)))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)
(K(SI(K(KI))))))))(K(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(KI)))))))))))
(S(S(KS)K)(K(SI(K(KI)))))))))))(S(S(KS)K)(K(SI(K(KI))))))(S(S(KS)(S(KK)(S(KS)
(S(K(SI))K))))(KK)(KI)(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(KI)(S(S(KS)(S(KK)
(S(KS)(S(K(SI))K))))(KK)(KI)(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(KI)(S(S(KS)
(S(KK)(S(KS)(S(K(SI))K))))(KK)(KI)(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(KI)
(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)KK)))))))

La sintaxis es mínima:

expression: expression term | term
term: ‘(‘ expression ‘)‘ | combinator
combinator: 'S' | 'K' | 'I' 

Parece haber una creencia común de que la sintaxis es lo que hace que un lenguaje sea difícil. Como muy a menudo se cree, lo contrario es cierto.

Tenga en cuenta que la sintaxis de LISP solo se puede leer (si es que existe) porque tiene una mucha más sintaxis que la anterior. Entonces, si los fanáticos de LISP te dicen que "la sintaxis no importa", pídeles que sean consecuentes y prueba el cálculo de SKI. Tendrán que admitir que una pequeña sintaxis no es tan mala después de todo.

    
respondido por el Ingo 18.05.2015 - 22:26
0

No creo que importe más allá de las preferencias personales. Si todas las cosas (rendimiento, capacidades, etc.) son iguales, entonces puedo ver por qué se puede poner más peso en la sintaxis de un idioma, pero elegir pasar por alto el rendimiento de lenguajes como c / c ++ o cualquier otro lenguaje más adecuado para el trabajo, simplemente debido a La sintaxis parecería ser una mala idea.

    
respondido por el Kurtis 26.12.2010 - 20:36
0

Sí, la sintaxis importa, aunque en realidad solo para facilitar la lectura. Comparar:

for i in range(10):
   print(i)

(Sí, eso es Python) con

FOR(i<-RNG-<10){PRN<-i}

(Sí, ese es un lenguaje que me inventé) Ambos harían exactamente lo mismo, de la misma manera, pero la sintaxis es diferente, y Python es más fácil de leer. Así que sí, la sintaxis definitivamente importa. Incluso el "azúcar sintáctica" importa.

 @property
 def year(self):
     return self._date.year

Es más fácil de leer que

 def year(self):
     return self._date.year
 year = property(year)
    
respondido por el Lennart Regebro 26.12.2010 - 21:30
0

Sí, claro.

Si quieres iniciar una gran llama, pregúntale a la gente, dónde colocan el brazalete de apertura en lenguajes tipo C. Me refiero a

void foo() {
  // blah
}

VS

void foo()
{
  // blah
}

o incluso VS

void foo() 
{ // blah
}

¡Y este es el mismo idioma! Además, pregúnteles sobre los espacios, dónde los colocan (nombre de la función y bracet, operadores, etc.).

¡1000 respuestas están garantizadas!

    
respondido por el ern0 27.12.2010 - 11:30
0

La sintaxis sí importa. Sin embargo, en esta época, diría que importa casi en su totalidad debido a la legibilidad y no en términos de la cantidad de pulsaciones necesarias. ¿Por qué?

  • A menos que realmente estés escribiendo algo así de simple, si el número de teclas que presionas es el factor limitante para escribir un programa, entonces eres muy, muy malo al escribir o piensas mucho, demasiado rápido.
  • Todos los IDE decentes en estos días tienen una gran cantidad de accesos directos, lo que significa que no necesitas escribir todos los caracteres que usas la mayor parte del tiempo.

Dicho esto, si es demasiado detallado, puede llegar al punto en que afecta la legibilidad. Prefiero ver algo como:

  

foreach (String en stringList)

Para:

  

para cada String que está en la lista según lo referenciado por la variable de lista de cadenas

... cualquier día!

    
respondido por el berry120 01.02.2011 - 02:21
0

La sintaxis es importante para quienes la están aprendiendo, cuanto más baja sea la barrera de entrada, más popular será el idioma inicialmente. Pero si el lenguaje es difícil o imposible de expresar rico y sucintamente, comenzará a marchitarse en popularidad.

Muy terso y opaco (Perl) es tan malo como demasiado detallado y prolijo (AppleScript).

Tiene que haber un equilibrio, una barrera de entrada más baja, una alta productividad y un fácil mantenimiento.

    
respondido por el Jarrod Roberson 15.11.2011 - 22:39
-2

Otra cosa a considerar es que los lenguajes de programación con una sintaxis más agradable son más fáciles de analizar, lo que hace que el compilador sea más fácil de escribir, más rápido y menos propenso a los errores.

    
respondido por el asmeurer 26.12.2010 - 23:59
-2

En pocas palabras: la sintaxis como tal no importa. La semántica que puedes expresar a través de ella es importante.

    
respondido por el back2dos 15.11.2011 - 23:19

Lea otras preguntas en las etiquetas