A sintaxe realmente importa em uma linguagem de programação? [fechadas]

41

Um de meus professores diz que "a sintaxe é a interface de programação de uma linguagem de programação", linguagens como Ruby possuem grande legibilidade e estão crescendo, mas vemos muitos programadores produtivos com C \ C ++, então como programadores isso realmente importa que a sintaxe deve ser aceitável?

Eu adoraria saber sua opinião sobre isso.

Aviso: não estou tentando iniciar uma discussão. Eu pensei que este é um bom tópico de discussão.

Atualização: este é um bom tópico. Fico feliz que todos vocês estejam participando.

    
por Saif al Harthi 15.11.2011 / 22:44
fonte

18 respostas

65

Sim, sim. Em caso de dúvida, use o APL ou J , ou Brainfuck ou mesmo simples e simples Lisp ou Forth, e tente entender qualquer programa não totalmente trivial nele. Em seguida, compare a por ex. Python.

Em seguida, compare o mesmo Python (ou Ruby, ou mesmo C #) com coisas como Cobol ou VB6.

Não estou tentando dizer que a sintaxe peluda é ruim e a sintaxe semelhante a linguagem natural é boa em todas circunstâncias. Mas a sintaxe obvoiusly faz fazer uma enorme diferença. Em suma, tudo o que você pode escrever na mais bela linguagem de programação que você também pode escrever como um programa de máquina de Turing - mas você geralmente não quer, não é?

    
por 15.11.2011 / 22:27
fonte
11

Na prática, acho que isso importa. A legibilidade já foi discutida acima. Outro problema pode ser quantas teclas são digitadas para expressar uma idéia / algoritmo? Ainda outra questão é como é fácil para erros simples ser difícil para o olho humano pegar, e quanto dano eles podem causar.

Também achei útil em alguns contextos analisar e / ou gerar fragmentos de código por meio de outro programa de computador. A dificuldade de analisar o linguagem, e / ou gerar o código correto, em seguida, impacta diretamente quanto esforço é necessário para criar / manter tais ferramentas.

    
por 26.12.2010 / 20:48
fonte
10

Acredito que seu professor esteja se referindo ao Açúcar sintático .

Syntactic sugar is a computer science term that refers to syntax within a programming language that is designed to make things easier to read or to express, while alternative ways of expressing them exist.

Portanto, o que seu professor está sugerindo é que qualquer código / sintaxe escrito em uma linguagem de programação pode ser expresso em outras linguagens da mesma forma - ou mesmo na mesma linguagem.

Robert Martin, tirando o Teorema da Programação Estruturada , abstraiu o que os programadores fazem fundamentalmente com linguagens de programação em seu discurso em RailsConf 2010: Robert Martin (vídeo do youTube, veja depois de 14 minutos, embora eu recomende a coisa toda):

  • Sequência (atribuição)
  • Seleção (se instruções)
  • Iteração (do-loops)

Isso é tudo o que os programadores fazem, de uma linguagem de programação para outra, apenas em uma sintaxe ou interface de usuário (UI) diferente. Isto é o que eu estou supondo que seu professor estava chegando, se ele está falando abstratamente sobre linguagens de programação.

Então, em essência , a sintaxe não importa . Mas se você quer ser específico, então obviamente certas linguagens e sintaxes são mais adequadas para certas tarefas do que outras, onde você poderia argumentar que a sintaxe é importante.

    
por 27.12.2010 / 04:23
fonte
7

Sim e não.

Existem alguns aspectos diferentes da sintaxe.

  • legibilidade
  • expressividade
  • capacidade de análise

A legibilidade já foi mencionada.

Expressividade é um caso interessante. Eu vou usar a função de passagem como um exemplo, porque é uma espécie de ponto de inflexão da dor semântica / sintática.

Vamos pegar o C ++ por exemplo. Eu posso criar uma função de primeira ordem depois desta forma:

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

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

Esse idioma em particular é comumente usado nos Elementos de programação de Stepanov .

Por outro lado, eu posso imitá-lo no Common Lisp com algo como este :

(defun myfunc() )

(defun run_func(fun)
  (fun))

Ou, em Perl -

   sub myfunc
   {
   }

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

Ou, em Python -

def myfunc():
    pass

def run_func(f):
    f()

Todos eles têm - essencialmente - o mesmo conteúdo semântico, embora o exemplo de C ++ possua alguns metadados de tipo. Qual idioma expressa melhor a idéia de passar uma função de ordem superior? Common Lisp mal faz uma variação sintática. C ++ requer que uma classe seja criada apenas para "transportar" a função. Perl é bastante simples sobre como fazer algum nível de diferenciação. Então é o Python.

Qual abordagem é mais adequada ao domínio do problema? Qual abordagem melhor pode expressar os pensamentos em sua cabeça com o mínimo de "incompatibilidade de impedância"?

A capacidade de compreensão é - na minha opinião - um grande negócio. Em particular, refiro-me à capacidade do IDE de analisar e cortar a linguagem sem cometer erros. Reformatar é útil. Línguas delimitadas por tokens tendem a analisar bem - ruby / c / pascal, etc.

Considere, porém, que grandes sistemas de todos os tipos foram criados com cada linguagem séria para resolver problemas do mundo real. Embora a sintaxe seja uma barreira para expressar algumas coisas, é uma barreira capaz de contornar o trabalho. Equivalência de Turing e tudo isso.

    
por 26.12.2010 / 22:11
fonte
5

A sintaxe definitivamente importa, embora você tenda a notar mais quando não é intuitivo e estimula os erros. Por exemplo, a infame piada do "último erro do mundo":

if (AlertCode = RED)
   {LaunchNukes();}
    
por 27.12.2010 / 20:44
fonte
5

A sintaxe importa, e posso dar dois exemplos de apoio: Dylan, que é um Lisp com uma sintaxe mais convencional, e Liskell, que é o Haskell com a sintaxe parecida com Lisp. Em cada caso, foi proposta uma variante da linguagem que tinha exatamente a mesma semântica, mas uma sintaxe radicalmente diferente.

No caso de Dylan, pensava-se que abandonar as expressões-s em favor de algo mais convencional ajudaria a atrair uma gama mais ampla de programadores. Descobriu-se que a sintaxe não era a única coisa que impedia os programadores de usar o Lisp.

No caso de Liskell, pensava-se que o uso de expressões-s permitiria o uso mais fácil de macros. Descobriu-se que as macros não são realmente necessárias em Haskell, de modo que o experimento também não funcionou.

Aqui está a coisa: se a sintaxe não importasse para ninguém, nenhuma experiência teria sido tentada.

    
por 01.02.2011 / 02:11
fonte
3

A resposta pode estar em separar o que "importa" em fatores do computador e fatores humanos . Existem muitos fatores humanos na sintaxe:

  • Legibilidade
  • Sucinta
  • Manutenção
  • Pedagogia
  • Prevenção de erros
  • Adequação para o propósito - é uma linguagem REPL, uma linguagem de script ou uma linguagem de sistemas grande?

No que diz respeito ao computador, o único problema da sintaxe é se existem ou não ambigüidades que precisam ser resolvidas, e quanto tempo leva para tokenizar / analisar o código na compilação / interpretação - e é apenas no caso deste último, onde a sobrecarga de análise é uma questão significativa.

Pode ser por isso que você sempre terá uma resposta "sim e não" a essa pergunta - porque há dois aspectos.

    
por 27.12.2010 / 02:20
fonte
1

Sem sintaxe, não teríamos um "modelo" comum a partir do qual comunicar, em um nível humano, a intenção de um bloco de código. A sintaxe fornece uma estrutura comum a partir da qual os compiladores podem ser padronizados; métodos podem ser compartilhados; a manutenção pode ser simplificada.

    
por 26.12.2010 / 20:28
fonte
1

Acho que o que realmente importa é o acesso à API e a disponibilidade de funcionalidades de baixo nível (como controle de memória e bloqueio) quando necessário. A maioria das outras linguagens vem com esses recursos incluídos. O problema é que, quando você precisa de funcionalidade adicional , muitas vezes é necessário usar uma linguagem como C para implementá-la. E é uma interface complicada C com a linguagem que você está usando.

Para tudo exceto desenvolvimento web (e matemática), descobri que C / C ++ ainda é a linguagem de um sistema operacional e de uma aplicação. É o que é suportado a maior parte do tempo para um verdadeiro desenvolvimento de aplicativos multiplataformas, pré-formados e multiplataforma. E a sintaxe de C está bem. Apenas muito simples e relativamente detalhado. Sintaxe incrível não importa muito. A disponibilidade de energia e API faz Todos precisamos interagir com o código de outras pessoas (que é na maioria das vezes escrito em C ou seus derivados).

    
por 26.12.2010 / 23:19
fonte
1

A sintaxe definitivamente é importante. É extremamente valioso se a sintaxe da linguagem for flexível o suficiente para permitir que você crie uma Linguagem Específica do Domínio conveniente e legível para sua aplicação. Se você duvida disso, apenas imagine fazer problemas de álgebra em latim prosaico, como era feito antes do século XVIII, ou imagine fazer cálculos sem a já conhecida notação de Leibniz. Claro, um texto de cálculo é ilegível para um iniciante, mas com a prática podemos usar o cálculo e a notação de Leibniz para resolver rapidamente uma classe de problemas que exigiam páginas de matemática com métodos clássicos. A programação é apenas mais um pouco de matemática. Uma notação conveniente, próxima ao domínio do problema, pode fazer uma enorme diferença na produtividade.

    
por 16.11.2011 / 09:07
fonte
1

Aqui está um programa que calcula a faculdade 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)))))))

A sintaxe é mínima:

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

Parece haver uma crença comum de que a sintaxe é o que dificulta uma linguagem. Como tantas vezes com crenças comuns, exatamente o oposto é verdadeiro.

Observe que a sintaxe LISP só é legível (se for usada) porque tem uma muito mais sintaxe do que a acima. Portanto, se os fãs do LISP lhe disserem que "a sintaxe não importa", peça que sejam consequentes e experimente o cálculo do SKI. Eles terão que admitir que um pouco de sintaxe não é tão ruim assim.

    
por 18.05.2015 / 22:26
fonte
0

Eu não acho que isso importe além da preferência pessoal. Todas as coisas (desempenho, capacidades, etc) sendo iguais, então eu posso ver porque alguém iria colocar um peso maior em uma sintaxe de linguagem, mas escolhendo passar o desempenho de linguagens como c / c ++ ou qualquer outra linguagem mais adequada para o trabalho simplesmente por causa de a sintaxe pareceria uma má ideia em todo o lado.

    
por 26.12.2010 / 20:36
fonte
0

Sim, a sintaxe é importante, embora realmente apenas para legibilidade. Comparar:

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

(Sim, isso é Python) com

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

(Sim, essa é uma linguagem que acabei de inventar) Ambos fariam exatamente a mesma coisa, da mesma forma, mas a sintaxe é diferente e o Python é mais fácil de ler. Então, sim, a sintaxe definitivamente é importante. Até mesmo "açúcar sintático" importa.

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

É mais fácil de ler do que

 def year(self):
     return self._date.year
 year = property(year)
    
por 26.12.2010 / 21:30
fonte
0

Sim, claro.

Se você quer iniciar uma grande chama, pergunte ao pessoal, onde eles colocam o bracet de abertura em idiomas semelhantes ao C. Quero dizer

void foo() {
  // blah
}

VS

void foo()
{
  // blah
}

ou mesmo VS

void foo() 
{ // blah
}

E esta é apenas a mesma linguagem! Além disso, pergunte a eles sobre espaços, onde eles os colocam (nome da função e bracet, operadores, etc.).

1000 respostas são garantidas!

    
por 27.12.2010 / 11:30
fonte
0

A sintaxe é importante. No entanto, neste dia e idade eu diria que é quase totalmente por causa da legibilidade e não realmente em termos da quantidade de pressionamentos de tecla necessários. Por quê?

  • A menos que você esteja realmente escrevendo algo tão simples, se o número de teclas que você pressiona é o fator limitante na escrita de um programa, então você é realmente muito cético em digitar ou pensar muito, muito rapidamente.
  • Todos os IDEs decentes nos dias de hoje têm um grande número de atalhos, o que significa que você não precisa digitar todos os caracteres que está usando na maior parte do tempo.

Dito isto, se for demasiado detalhado, pode chegar ao ponto em que isso afecta a legibilidade. Eu prefiro ver algo como:

foreach(String in stringList)

Para:

for every String that's in the list as referenced by the stringlist variable

... qualquer dia!

    
por 01.02.2011 / 02:21
fonte
0

A sintaxe é importante para aqueles que estão aprendendo, quanto menor a barreira à entrada, mais popular a linguagem pode ser inicialmente. Mas se a linguagem é difícil ou impossível de se expressar ricamente e sucintamente, ela começará a enfraquecer em popularidade.

Muito conciso e opaco (Perl) é tão ruim quanto verboso e prolixo (AppleScript).

É necessário haver equilíbrio, menor barreira à entrada, alta produtividade e fácil manutenção.

    
por 15.11.2011 / 22:39
fonte
-2

Outra coisa a considerar é que as linguagens de programação com sintaxe mais agradável são mais fáceis de analisar, tornando o compilador mais fácil de escrever, mais rápido e menos propenso a erros.

    
por 26.12.2010 / 23:59
fonte
-2

Para simplificar: a sintaxe não importa. A semântica que você pode expressar através disso importa.

    
por 15.11.2011 / 23:19
fonte