Può un linguaggio di programmazione progettato forzare "codice pulito"? [chiuso]

18

Quindi sto codificando i miei primi progetti in C ++ e sembra che ci voglia uno sforzo maggiore per rendere il codice "pulito", piuttosto che funzionare semplicemente. Cioè sembra che il C ++ "permetta" di scrivere un codice brutto, ma funzionante.

Che mi ha fatto pensare,

Un linguaggio di programmazione può imporre un codice pulito in base alla progettazione? Esistono già tali lingue?

    
posta mavavilj 04.04.2016 - 17:48
fonte

5 risposte

20

L'effetto principale che il design del linguaggio ha sul "codice pulito" è a livello sintattico. Le lingue con molti stenografi e operatori oscuri (Perl / APL) si prestano al codice "sporco", mentre le lingue con un insieme più piccolo di elementi (per esempio, Python) si prestano a un codice più pulito.

La semantica, tuttavia, è un animale molto diverso. Non vi è alcun modo per far sì che la semantica di un linguaggio sia usata in modo pulito, in particolare perché non si può, come il compilatore, sapere che cosa l'utente della lingua sta cercando di realizzare. Uno strumento potente è semplicemente questo: uno strumento potente, nel bene e nel male.

Alla fine della giornata, la semantica è più importante della sintassi. È anche la parte più difficile da capire come sviluppatore di manutenzione (ad esempio "cosa significa in realtà questo codice? Vedo che cosa fa ...").

Di conseguenza, direi che non esiste un design per far rispettare il codice pulito, ma è possibile scrivere una sintassi semplice con una semantica pulita che renda più semplice. Nel bene o nel male, il codice pulito è principalmente una questione di conoscenza degli sviluppatori, motivazione, disciplina e abilità.

    
risposta data 04.04.2016 - 18:17
fonte
7

Le lingue possono forzare o incoraggiare i programmatori ad affrontare determinate classi di bug, che fa parte della definizione di codice pulito. Ad esempio, varie lingue svolgono un lavoro relativamente soddisfacente di indirizzamento:

  • Eccezioni puntatore nullo.
  • Errori di stato condivisi.
  • Problemi di concorrenza.
  • Eccezioni non selezionate.

Questo ti porta solo in parte, comunque, perché il codice pulito riguarda principalmente la comunicazione da umano a umano . I linguaggi di programmazione hanno solo una leva per aiutarti, e questa è la loro potenza espressiva . È un termine davvero difficile da definire, ma in fondo è più facile per i bravi programmatori scrivere un codice più pulito in linguaggi più espressivi. Hanno più strumenti disponibili per esprimere facilmente un algoritmo in termini che comunicano bene con altri umani. Non fraintendermi, puoi scrivere codice pulito in ( quasi ) qualsiasi linguaggio di programmazione. Sono solo alcune lingue che rendono più semplice e hanno un risultato relativo migliore.

Tuttavia, non puoi semplicemente chiamare l'espressività e magicamente le persone inizieranno a scrivere codice migliore. Con la maggior parte dei programmatori, dai loro più manopole per girare nella loro lingua, e non sapranno come usarli correttamente, quindi il loro codice finisce in realtà peggio. Ci vuole disciplina e buon mentoring per migliorare la qualità del tuo codice. Non ci sono proiettili d'argento.

    
risposta data 04.04.2016 - 20:32
fonte
6

In una certa misura. Molte lingue sono deliberatamente progettate per incoraggiare alcune forme di codice pulito secondo gli ideali dei progettisti di linguaggi. È certamente possibile scrivere un codice brutto e incomprensibile in qualsiasi lingua, ma alcune lingue fanno più di uno sforzo per scoraggiarlo.

Come esempio, Python ti costringe a far rientrare i blocchi in base alla struttura semantica della lingua, mentre molti altri linguaggi ti permettono di indentarli totalmente a caso o per niente. Questo è un esempio di una lingua che incoraggia attivamente un certo ideale di pulizia.

    
risposta data 04.04.2016 - 19:43
fonte
3

Se puoi quantificarlo, puoi creare una lingua in grado di ottimizzarlo.

Anche se non conosco alcun linguaggio particolare che imponga effettivamente una politica di "codice pulito", i poliziotti di stile che girano su build sono abbastanza comuni.

La ragione principale per cui questo è un passaggio separato dall'essere cotti nella lingua è in gran parte una funzione di priorità. È nell'interesse di un linguaggio di programmazione per consentire la massima flessibilità ai programmatori per ottenere il più ampio livello di adozione. Ci sono così tanti diversi linguaggi di programmazione e DSL che limitano artificialmente la base di utenti essendo pignoli e supponenti riguardo a quale input è permesso potrebbero intralciare l'adozione più ampia.

Ad esempio, non è nell'interesse di C # forzare le persone a scrivere

if (condition)
{

invece di

if (condition) {

Ma i controllori di stile possono essere giudicati pignoli perché è ciò che sono progettati per fare.

Quindi, per rispondere alla domanda

Can a programming language enforce clean code by design?

emphasis mine

Assolutamente, purché tu fornisca una definizione strong per ciò che significa "codice pulito".

Ad esempio, potrei definire "codice pulito" per significare:

  • lunghezza della riga non superiore a 80 caratteri
  • funzioni composte da non più di 100 righe
  • il rientro deve essere di due spazi
  • le parentesi graffe aperte devono essere seguite alla fine della riga preceduta esattamente da uno spazio
  • non più di due operatori per linea

e potresti non essere d'accordo con alcune o tutte queste convenzioni, ma alla fine della giornata queste sono quantificabili e possono essere applicate a livello di codice.

    
risposta data 04.04.2016 - 22:03
fonte
1

No, non nel senso che descrivi. Rilevare "bruttezza" non può essere fatto automaticamente!

Tuttavia, i progettisti di linguaggi possono fare cose per incoraggiare un buon codice (non voglio dire "pulito" perché a volte il codice buono e sicuro è anche lungo e "brutto"). Ad esempio, i progettisti del linguaggio Rust hanno osservato le cose che i programmatori C ++ disciplinati tendono a fare (come assegnare ai singoli valori allocati nell'heap un singolo "proprietario") e hanno reso più facile fare alcune di quelle cose. Ciò include la fornitura di un typechecker che puoi utilizzare per verificare di non aver commesso alcuni errori comuni.

Direi che un buon linguaggio di progettazione è spesso reattivo: i designer guardano cosa fanno i bravi programmatori e cercano di renderlo più facile e "più carino".

    
risposta data 04.04.2016 - 18:52
fonte