Quanto permissivo dovrebbe essere una lingua per gli identificatori?

6

This is a sister question to: Is it bad to use Unicode characters in variable names?

Come è mio, sto lavorando a un progetto linguistico. Mi è venuto in mente che consentire l'identificazione di più token potrebbe migliorare sia la leggibilità che la scrittura:

primary controller = new Data Interaction Controller();

# vs.

primary_controller = new DataInteractionController();

E anche se pensi che sia una buona idea *, mi sono fatto riflettere su quanto dovrebbe essere permissivo un linguaggio sugli identificatori e su quanto valore ci sia nell'essere così.

È ovvio che l'autorizzazione di caratteri al di fuori del solito [0-9A-Za-z_] presenta alcuni vantaggi in termini di scrittura, leggibilità e prossimità al dominio, ma anche che può creare incubo di manutenzione. Sembra esserci un consenso (o almeno una tendenza) che L'inglese è la lingua di programmazione . Un programmatore cinese ha davvero bisogno di scrivere 电子邮件地址 quando email_address è la preferenza internazionale?

Odio essere anglocentrico quando si tratta di Unicode, o un stickler quando si tratta di altre restrizioni identificative, ma vale davvero la pena di consentire nomi di variabili pazzi?

tl; dr: il costo del lassismo è superiore al potenziale beneficio?

Perché o perché no? Quali esperienze e prove puoi condividere a favore o contrario alle restrizioni rilassate? Dove pensi sia l'ideale nel continuum?

* Il mio argomento a favore dell'abilitazione di identificatori multi-token è che introduce punti più sensati per spezzare lunghe code di codice, pur consentendo ai nomi di essere descrittivi, e evitando ExcessiveCamelCase e a_whole_lot_of_underscores , entrambi a detrimento della leggibilità.

    
posta Jon Purdy 01.05.2011 - 02:18
fonte

6 risposte

2

È piuttosto difficile da dire. Le grammatiche più permissive sono più difficili da analizzare. Le parentesi opzionali di Ruby ne sono un buon esempio. La mancanza di lingue esistenti con questa funzione potrebbe non dimostrare che sia una cattiva idea, ma non aiuta nemmeno a convalidarlo. Non c'è molto altro da fare.

Se pensi che sia una buona idea ed è relativamente facile da eseguire, perché non andare avanti e farlo? Questo è l'unico vero modo per ottenere una risposta definitiva a domande come questa.

    
risposta data 01.05.2011 - 03:34
fonte
9

Una volta ho lavorato con USL che consentiva uno spazio come parte di un nome. Le possibilità combinatorie divennero un incubo. "LAST LEFT TURN" è un identificativo? O due ("LAST LEFT" e "TURN") o due identificatori ("LAST" e "LEFT TURN") o tre? Ed è "TURNO GIUSTO" (uno spazio) uguale a "GIRO A DESTRA" (due spazi vuoti) anche se un editor di testo non li abbinerà? No, non accettare mai spazi nei nomi.

Per ragioni simili non accetto mai caratteri speciali che significano qualcosa nella lingua. "ALPHA-BETA" è un nome di variabile o una sottrazione?

Normalmente gli identificatori devono iniziare con una lettera. Hai intenzione di estenderlo ad altre lingue Unicode? Come farai a sapere che lettera è in arabo?

Temo che tu stia aprendo un gigantesco barattolo di vermi.

    
risposta data 01.05.2011 - 02:39
fonte
4

Alcuni linguaggi di programmazione iniziali consentivano spazi negli identificatori; per esempio. FORTRAN precoce (pre F77), alcuni dialetti / implementazioni di Algol, AppleScript, ecc.

Dal punto di vista del linguaggio di programmazione è una cattiva idea perché introduce molte ambiguità. Risolvere quell'ambiguità è un duro lavoro per il compilatore, e alla fine rende il linguaggio più complicato e più difficile da leggere. Ad esempio:

String str = "";

È quella che dichiara una variabile chiamata str , o che assegna un valore a una variabile dichiarata in precedenza chiamata "String str"?

Eliminando questo tipo di ambiguità (pur consentendo spazi nei nomi) alcune altre modifiche alla sintassi del linguaggio; per esempio. richiedendo parole chiave da citare, richiedendo che le parole chiave siano tutte maiuscole, eliminando tutte le parole chiave dalla lingua (!).

Vedi anche: link

    
risposta data 01.05.2011 - 02:54
fonte
3

Da un punto di vista del parsing, sembra che potrebbe facilmente diventare un inferno da implementare e mantenere. Anche se sarebbe diventato abbastanza ragionevole introdurre alcune notazioni per far sapere al parser che si tratta di multi-token idents, e l'analisi è quindi un non-problema.

Ad esempio, F # consente di utilizzare quasi qualsiasi cosa in un identificatore, ma devi circondare l'intera cosa con coppie di accenti gravi, quindi è valido scrivere

let ''primary controller'' = new ''Data Interaction Controller''();

Sebbene la funzione sia presente, è usata raramente dal programmatore manualmente. Esistono vari strumenti che generano dinamicamente il codice in cui questi identificatori sono utili, e che sarà più evidente in F # 3.0, che può letteralmente prendere dati dal web o altrove e permetterne l'uso come identificatori strongmente tipizzati, senza prima normalizzare il dati da inserire in ASCII.

    
risposta data 01.05.2011 - 03:18
fonte
3

Non sono sicuro degli spazi ma deve essere possibile. Penso che significhi che devi rinunciare agli spazi in altri posti, e questa è una decisione che dovresti pesare. Negli spazi in stile riccio, gli spazi sono solitamente necessari solo per separare le parole chiave dall'identificatore e separare i tipi dagli identificatori (int x, new Y).

Hmm. Quando ci penso, potrebbe non essere nemmeno così irrealizzabile come pensavo.

Per i caratteri UTF8 mi sento lo stesso tipo di ambivalenza. Chiaramente gli orrori di provare a digitare caratteri localizzati su un layout di tastiera non localizzato o avere due caratteri uguali ma non uguali sono un incubo.

Allo stesso tempo, il programma "adagio" in inglese "semplicemente non può essere applicato ovunque. È fantastico per concetti astratti, libs e simili, ma quando si programma la logica di business potrebbe essere necessario rappresentare concetti locali (potrei pensare a termini legali), ed è solo confuso tradurli in un'approssimazione inglese e poi di nuovo indietro. Se si dispone di una lingua basata su script latini, si potrebbe farla franca con i non-ascii-chars, ma più ci si allontana, più difficile diventa. E più i concetti di cui hai bisogno potrebbero non avere una buona traduzione inglese.

Quindi penso di dover lasciare questo indeciso. Per il momento non ho bisogno né di spazi né di utf8-chars.

    
risposta data 01.05.2011 - 21:27
fonte
1

Mi sono chiesto questo da solo.

Abbiamo visto l'atteggiamento "rilassato" nella progettazione di HTML e, dovendo lavorare quotidianamente, posso solo dire che ha portato a un pasticcio. Di conseguenza, sostengo con entusiasmo un approccio ben specificato ... e uno che rifiuta completamente qualsiasi cosa al di fuori delle specifiche.

Una volta detto e fatto, preferisco essere pragmatico. Vuoi che legga / lavori su / usi i tuoi programmi? Poi:

  • non usare caratteri che non sono immediatamente accessibili sulla mia tastiera (in pratica, attenersi a ciò che C usa se stesso), per il record, alterno tra Azerty (home) e Qwerty (lavoro)
  • programma in inglese

Suppongo che se lo usi solo per te stesso o lo condivida solo con compagni dalla mentalità simile, allora tutto va bene. Ma lavorando in un ambiente multiculturale (un po 'di tutto, dall'Europa, così come dal Nord Africa, dall'India e dalla Cina), è richiesta uniformità e l'inglese è adatto. E prima che tu pensi che io sia pigro per voler imporre la mia lingua madre, io sono francese, quindi ho dovuto imparare l'inglese, e lo sono ancora.

Poi arriva il problema degli spazi vuoti. Non lo so. Riesco a vedere alcuni problemi con l'uso di Turn e Turn Left che renderebbero difficile il grep / sed se necessario, ma nulla di eccezionale.

    
risposta data 01.05.2011 - 13:08
fonte

Leggi altre domande sui tag