La sintassi ha davvero importanza in un linguaggio di programmazione? [chiuso]

41

Uno dei miei professori dice "la sintassi è l'interfaccia utente di un linguaggio di programmazione", linguaggi come Ruby hanno una buona leggibilità ed è in crescita, ma vediamo che molti programmatori sono produttivi con C \ C ++, quindi come programmatori è davvero importante che la sintassi dovrebbe essere accettabile?

Mi piacerebbe sapere la tua opinione su questo.

Dichiarazione di non responsabilità: non sto tentando di iniziare un argomento. Ho pensato che questo fosse un buon argomento di discussione.

Aggiornamento: questo risulta essere un buon argomento. Sono contento che ci stiate tutti partecipando.

    
posta Saif al Harthi 15.11.2011 - 22:44
fonte

18 risposte

65

Sì, lo fa. In caso di dubbi, prendi APL o J , o Brainfuck , o anche semplice e semplice Lisp o Forth, e cerca di capire qualsiasi programma non del tutto banale su di esso. Quindi confronta con ad es. Python.

Quindi confronta lo stesso Python (o Ruby, o anche C #) con cose come Cobol o VB6.

Non sto cercando di dire che la sintassi pelosa è cattiva e la sintassi simile alla lingua naturale è buona nelle circostanze tutte . Ma la sintassi invariabilmente fa una grande differenza. Tutto sommato, tutto ciò che puoi scrivere nel più bel linguaggio di programmazione puoi anche scrivere come un programma di macchina di Turing - ma di solito non lo vuoi, vero?

    
risposta data 15.11.2011 - 22:27
fonte
11

In pratica penso che sia importante. La leggibilità è già stata discussa sopra. Un altro problema potrebbe essere il numero di sequenze di tasti per esprimere un'idea / algotithm? Ancora un altro problema è quanto sia facile che i refusi semplici siano difficili da catturare per l'occhio umano e quanta cattiveria possono causare.

Ho anche trovato utile in alcuni contesti analizzare e / o generare frammenti di codice tramite un altro programma per computer. La difficoltà di analizzare il lingua e / o generazione di codice corretto impatta direttamente quanto sforzo è necessario per creare / mantenere tali strumenti.

    
risposta data 26.12.2010 - 20:48
fonte
10

Credo che il tuo professore si riferisca a zucchero sintattico .

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.

Quindi quello che il tuo professore sta insinuando è che qualunque codice / sintassi scritta in un linguaggio di programmazione, può essere espresso in altre lingue allo stesso modo - o anche nella stessa lingua.

Robert Martin, attingendo dal teorema della Programmazione strutturata , ha astratto ciò che i programmatori fanno fondamentalmente con i linguaggi di programmazione nel suo keynote di RailsConf 2010: Robert Martin (video youTube, guarda dopo 14 minuti, anche se consiglio tutto):

  • Sequenza (assegnazione)
  • Selezione (se dichiarazioni)
  • Iterazione (loop di do)

Questo vale per tutti i programmatori, da un linguaggio di programmazione a un altro, solo in una sintassi o in un'interfaccia utente (UI) diversa. Questo è quello che indovinerà il tuo professore, se lui / lei sta parlando in modo astratto sui linguaggi di programmazione.

Quindi in essence , la sintassi non ha importanza . Ma se vuoi essere specifico, ovviamente certe lingue e sintassi sono più adatte per certe attività di altre, per cui potresti argomentare che la sintassi è importante.

    
risposta data 27.12.2010 - 04:23
fonte
7

Sì e no.

Ci sono un paio di aspetti diversi nella sintassi.

  • leggibilità
  • espressività
  • parsability

La leggibilità è già stata menzionata.

L'espressività è un caso interessante. Userò il passaggio di funzione come esempio, perché è una sorta di punto di flesso di dolore semantico / sintattico.

Prendiamo il C ++ per esempio. Posso creare una funzione di primo ordine in questo modo:

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

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

Questo particolare idioma è comunemente usato negli Elementi di programmazione di Stepanov.

D'altra parte, posso simularlo in Common Lisp con qualcosa come questo :

(defun myfunc() )

(defun run_func(fun)
  (fun))

Oppure, in Perl -

   sub myfunc
   {
   }

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

Oppure, in Python -

def myfunc():
    pass

def run_func(f):
    f()

Tutti hanno - essenzialmente - lo stesso contenuto semantico, sebbene l'esempio C ++ porti alcuni metadati di tipo. Quale lingua esprime l'idea di passare meglio una funzione di ordine superiore? Common Lisp rende a malapena una variazione sintattica. C ++ richiede che venga creata una classe solo per "trasportare" la funzione. Perl è piuttosto semplice nel fare qualche livello di differenziazione. Quindi è Python.

Quale approccio si adatta meglio al dominio del problema? Quale approccio può esprimere meglio i pensieri nella tua testa con il minimo 'disadattamento di impedenza'?

L'analisi è, a mio avviso, un grosso problema. In particolare, mi riferisco alla capacità dell'IDE di analizzare e tagliare la lingua senza fare errori. La riformattazione è utile. Le lingue delimitate da token tendono ad analizzare bene: ruby / c / pascal, ecc.

Considera comunque - i principali sistemi di tutti i tipi sono stati creati con ogni linguaggio serio per risolvere i problemi del mondo reale. Sebbene la sintassi sia una barriera per esprimere alcune cose, è una barriera che può aggirare il problema. Equivalenza di Turing e tutto il resto.

    
risposta data 26.12.2010 - 22:11
fonte
5

La sintassi è sicuramente importante, anche se tendi a notarlo di più quando non è intuitivo e incoraggia gli errori. Ad esempio, l'infame "ultima battuta del mondo":

if (AlertCode = RED)
   {LaunchNukes();}
    
risposta data 27.12.2010 - 20:44
fonte
5

La sintassi conta, e posso darti due esempi di supporto: Dylan, che è un Lisp con una sintassi più convenzionale, e Liskell, che è Haskell con sintassi simile a Lisp. In ogni caso, è stata proposta una variante del linguaggio che aveva esattamente la stessa semantica, ma una sintassi radicalmente diversa.

Nel caso di Dylan, si pensava che abbandonare le espressioni S a favore di qualcosa di più convenzionale avrebbe aiutato ad attrarre una gamma più ampia di programmatori. Si è scoperto che la sintassi non era l'unica cosa che impediva ai programmatori di usare il Lisp.

Nel caso di Liskell, si pensava che l'uso delle espressioni s permettesse un uso più facile delle macro. È risultato che le macro non sono realmente necessarie in Haskell, quindi anche l'esperimento non ha funzionato.

Ecco la cosa: se la sintassi non fosse importante per nessuno, nessun esperimento sarebbe stato provato.

    
risposta data 01.02.2011 - 02:11
fonte
3

La risposta potrebbe essere nel separare ciò che "importa" in fattori informatici e fattori umani . Ci sono molti fattori umani nella sintassi:

  • La leggibilità
  • concisione
  • Maintainability
  • Pedagogia
  • Prevenzione degli errori
  • Appropriatezza allo scopo - è un linguaggio REPL, un linguaggio di script o un linguaggio di grandi sistemi?

Per quanto riguarda il computer, l'unico problema della sintassi è se ci sono o meno ambiguità che devono essere risolte e quanto tempo occorre per tokenizzare / analizzare il codice su compilazione / interpretazione - ed è solo nel caso di quest'ultimo in cui il sovraccarico di analisi è un problema significativo.

Questo potrebbe essere il motivo per cui riceverai sempre una risposta "sì e no" a questa domanda - perché ci sono due aspetti.

    
risposta data 27.12.2010 - 02:20
fonte
1

Senza sintassi, non avremmo un "template" comune da cui comunicare, a livello umano, l'intento di un blocco di codice. La sintassi fornisce un framework comune da cui i compilatori possono essere standardizzati; i metodi possono essere condivisi; la manutenzione può essere semplificata.

    
risposta data 26.12.2010 - 20:28
fonte
1

Penso che l'aspetto veramente sia accesso API e la disponibilità di funzionalità di basso livello (come il controllo e il blocco della memoria) quando necessario. La maggior parte delle altre lingue include queste funzionalità. Il problema è che quando hai bisogno di funzionalità aggiuntive devi spesso usare un linguaggio come C per implementarlo. Ed è complicato l'interfacciamento C con la lingua che stai usando.

Per tutto tranne sviluppo web (e matematica) ho trovato che C / C ++ è ancora LA lingua di un sistema operativo e di un'applicazione. È ciò che viene supportato la maggior parte delle volte per lo sviluppo di applicazioni multi-thread, preforming, multipiattaforma. E la sintassi di C è ok. Semplicemente molto semplice e relativamente dettagliato. La sintassi fantastica non ha molta importanza. Disponibilità di alimentazione e API Abbiamo tutti bisogno di interfacciarsi con il codice di altre persone (che è la maggior parte delle volte scritto in C o nei suoi derivati).

    
risposta data 26.12.2010 - 23:19
fonte
1

La sintassi ha sicuramente importanza. È straordinariamente utile se la sintassi del linguaggio è abbastanza flessibile da permetterti di creare un linguaggio specifico del dominio comodo e leggibile per la tua applicazione. Se ne dubiti, immagina di fare problemi di algebra nel prosaico latino, come è stato fatto prima del XVIII secolo, o immagina di fare il calcolo senza la notoria nota Leibniz. Certo, un testo di calcolo è illeggibile per un principiante, ma con la pratica possiamo usare il calcolo e la notazione Leibniz per risolvere rapidamente una classe di problemi che richiedevano pagine di matematica con metodi classici. La programmazione è solo un altro po 'di matematica. Una notazione conveniente, vicina al dominio del problema, può fare un'enorme differenza di produttività.

    
risposta data 16.11.2011 - 09:07
fonte
1

Ecco un programma che calcola la facoltà di 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 sintassi è minima:

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

Sembra esserci una credenza comune che la sintassi sia ciò che rende difficile una lingua. Come spesso accade con le credenze comuni, è vero esattamente il contrario.

Tieni presente che la sintassi LISP è leggibile solo se esiste una sintassi molto più di quella precedente. Quindi, se i fan di LISP ti dicono che "la sintassi non ha importanza", chiedi loro di essere coerenti e prova il calcolo dello SKI. Dovranno ammettere che un po 'di sintassi non è poi così male.

    
risposta data 18.05.2015 - 22:26
fonte
0

Non penso che importi al di là delle preferenze personali. Tutte le cose (prestazioni, capacità, ecc.) Sono uguali, quindi capisco perché si attribuisca maggiore importanza a una sintassi del linguaggio, ma si scelga di passare le prestazioni di linguaggi come c / c ++ o qualsiasi altro linguaggio più adatto per il lavoro semplicemente per la sintassi sembrerebbe una cattiva idea tutt'intorno.

    
risposta data 26.12.2010 - 20:36
fonte
0

Sì, la sintassi è importante, anche se in realtà solo per la leggibilità. Confronto:

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

(Sì, questo è Python) con

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

(Sì, è un linguaggio che ho appena inventato) Entrambi farebbero esattamente la stessa cosa, allo stesso modo, ma la sintassi è diversa e Python è più facile da leggere. Quindi sì, la sintassi è sicuramente importante. Anche lo "zucchero sintattico" è importante.

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

È più facile da leggere di

 def year(self):
     return self._date.year
 year = property(year)
    
risposta data 26.12.2010 - 21:30
fonte
0

Sì, certo.

Se vuoi iniziare una grande fiamma, chiedi alla gente, dove hanno messo il braccialetto d'apertura in lingue simili a C. Intendo

void foo() {
  // blah
}

VS

void foo()
{
  // blah
}

o anche VS

void foo() 
{ // blah
}

E questa è solo la stessa lingua! Inoltre, chiedi loro degli spazi, dove li collocano (nome della funzione e bracet, operatori ecc.).

1000 risposte sono garantite!

    
risposta data 27.12.2010 - 11:30
fonte
0

La sintassi conta. Tuttavia in questo giorno e l'età direi che conta quasi interamente a causa della leggibilità e non proprio in termini di quantità di tasti necessari. Perché?

  • A meno che tu non stia davvero scrivendo qualcosa di così semplice, se il numero di tasti che premi è il fattore limitante nella scrittura di un programma, allora sei davvero, davvero schifoso quando digiti o pensi molto, troppo velocemente.
  • Tutti gli IDE decenti in questi giorni hanno un gran numero di scorciatoie che significano che non è necessario digitare effettivamente tutti i caratteri che usi la maggior parte del tempo.

Detto questo, se è too verboso allora può arrivare al punto in cui influisce sulla leggibilità. Preferirei vedere qualcosa come:

foreach(String in stringList)

A:

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

... ogni giorno!

    
risposta data 01.02.2011 - 02:21
fonte
0

La sintassi è importante per coloro che lo stanno imparando, più bassa è la barriera di accesso, più popolare potrebbe essere la lingua inizialmente. Ma se la lingua è difficile o impossibile da esprimere in modo esaustivo e succintamente, inizierà ad appassire in popolarità.

Molto terso e opaco (Perl) è tanto male quanto eccessivamente prolisso e verboso (AppleScript).

Ci deve essere un equilibrio, una barriera inferiore all'ingresso, un'elevata produttività e una facile manutenzione.

    
risposta data 15.11.2011 - 22:39
fonte
-2

Un'altra cosa da considerare è che i linguaggi di programmazione con una sintassi più gradevole sono più facili da analizzare, rendendo così il compilatore più facile da scrivere, più veloce e meno incline ai bug.

    
risposta data 26.12.2010 - 23:59
fonte
-2

Per dirla semplicemente: la sintassi come tale non ha importanza. La semantica che puoi esprimere attraverso la materia.

    
risposta data 15.11.2011 - 23:19
fonte

Leggi altre domande sui tag