confrontare il codice digitato staticamente con il codice digitato in modo dinamico - costi e benefici

StackOverflow https://stackoverflow.com/questions/419072

Domanda

Qualunque siano i suoi meriti, Adobe Actionscript 3 presenta quella che potrebbe essere un'opportunità unica per esplorare le conseguenze di linguaggi tipizzati rispetto a non tipizzati, perché è praticamente un superset rigoroso di javascript, con tutti i vantaggi sintattici / generali delle dichiarazioni di tipo rigoroso, casting dichiarativo, ecc.

Ciò che rende possibile è il confronto dello stesso codice scritto in entrambi i modi, tenendo conto della sintassi del linguaggio essenziale.

Questo mi fa domandare se ci siano prove quantitative sul reale vantaggio della tipizzazione forte, in particolare per il controllo degli errori durante la compilazione, rispetto ai tassi di errore, alla produttività della programmazione e al volume del codice; o le nostre prospettive sono interamente basate su speculazioni e congetture? Ci sono altre lingue che possono essere utilizzate in entrambi i modi (senza contare il VB vecchio stile - non essendo una lingua altamente rispettata in entrambi i modi.)

Ho trascorso molto tempo con entrambe le lingue, ma non ho deciso definitivamente in che modo preferisco, e preferirei non aggiungere l'evidenza aneddotica: sto cercando informazioni oggettive.

È stato utile?

Soluzione

Questa è una delle grandi guerre di religione nella programmazione, superata forse solo dal conflitto tra il vero Redattore EMACS e il malefico spawn di Satana vi.

Fondamentalmente, se un programma scritto in un linguaggio dinamico è corretto, allora può essere convertito in un linguaggio tipicamente statico e comunque essere corretto, e viceversa. Il vantaggio di un linguaggio veramente tipicamente statico è che i bug che si presentano in fase di esecuzione in un linguaggio dinamico possono essere identificati in fase di compilazione in un linguaggio tipicamente statico.

Ciò che spesso viene trascurato in queste situazioni, tuttavia, è che i linguaggi tipizzati staticamente generalmente hanno tratteggi di escape (come i typecasts), e i linguaggi apparentemente dinamici possono usare l'inferenza del tipo per inferire e trattare come tipicamente statici i tipi di espressione apparentemente dinamica .

Ciò che è veramente importante, sotto le coperte, è il programmatore. Se il programmatore pensa che il programma sia giusto, allora sarà giusto in un linguaggio statico o dinamico. Non sono a conoscenza di alcuna buona prova sperimentale che uno dei due sia più produttivo o più soggetto a errori nella pratica.

Altri suggerimenti

A mio avviso, linguaggi fortemente tipizzati come C # possono identificare durante il tempo di compilazione molti errori trascurati che non verrebbero rilevati in un linguaggio tipizzato libero e, quindi, causerebbero un errore di runtime in seguito. Non penso che questa sia solo una speculazione, poiché una compilazione rigorosa può anticipare problemi che potrebbero causare errori in fase di esecuzione. Questo può potenzialmente eliminare la maggior parte del tipo di errori di codifica che trascuri durante l'implementazione, ma che può essere facilmente trovato e corretto dal compilatore.

Il valore della digitazione statica mi sembra piuttosto limitato se credi, come faccio, che non puoi dire qualcosa di vero su un pezzo di software a meno che tu non abbia un test che lo dimostra. Se lo accetti e lo pratichi, è in gran parte irrilevante se i bug sono identificati in fase di compilazione o in fase di test.

A questo punto, preferirei avere il più succinto dei due tipi di lingue, che nella mia esperienza sono state lingue dinamiche.

Il rovescio della medaglia, è che la tipizzazione statica ti aiuta davvero solo se non stai scrivendo test. In tal caso, la digitazione statica probabilmente non è sufficiente per garantire il corretto funzionamento del software.

L'OP e felipecsl sono confusi sulla terminologia utilizzata quando si parla di discipline tipografiche.

Digitazione statica significa che i tipi vengono controllati durante il tempo di compilazione (qualunque sia il tempo di compilazione che significa nella lingua). Digitazione dinamica significa che i tipi vengono controllati mentre vengono eseguite espressioni / istruzioni. La tipizzazione forte significa che non è possibile sovvertire (cast) un puntatore in un numero intero, ad esempio. La tipizzazione debole è l'opposto della tipizzazione forte.

Non esiste una "tipizzazione rigorosa", per quanto ne so.

Ora qualcun altro può rispondere alla vera domanda ;-)

La digitazione debole richiede più tempo per la manutenzione. Man mano che i programmi diventano più complessi, sorgono più problemi a causa della mancanza di un compilatore per raccogliere ovvi problemi. Non raccomandato per grandi progetti complessi. Parlo per esperienza.

Lingua statisticamente tipizzata. Hanno le loro variabili e xpressioni come tipi fissi che sono esplicitamente dichiarati dal programmatore o inferiti da. Il compilatore. Usando questo. Informazioni, il controllo del tipo qui verrà eseguito in fase di compilazione. Mentre i lang tipicamente dinamici hanno i loro valori fissi, ma le variabili e le xxpressioni non sono fisse..a causa del fatto che ogni volta che viene calcolato un operando, è probabile che restituisca valori diversi, il controllo del tipo viene quindi eseguito dopo che l'operando è stato calcolato. dopo il calcolo ma prima di eseguire l'operazione in fase di esecuzione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top