Dinamico vs lingue tipizzate staticamente per siti web [chiuso]

13

Questa affermazione suggerisce che le lingue tipizzate staticamente non sono l'ideale per i siti web:

I’ll contrast that with building a website. When rendering web pages, often you have very many components interacting on a web page. You have buttons over here and little widgets over there and there are dozens of them on a webpage, as well as possibly dozens or hundreds of web pages on your website that are all dynamic. With a system with a really large surface area like that, using a statically typed language is actually quite inflexible. I would find it painful probably to program in Scala and render a web page with it, when I want to interactively push around buttons and what-not. If the whole system has to be coherent, like the whole system has to type check just to be able to move a button around, I think that can be really inflexible.

Fonte: link

È corretto? Perché o perché no?

    
posta Bradford 02.03.2011 - 15:20
fonte

9 risposte

39

Sono totalmente in disaccordo. Man mano che i sistemi diventano più grandi, i linguaggi tipizzati staticamente assicurano robustezza a livello di componenti e quindi flessibilità a livello di sistema.

Inoltre, l'esempio fornito dall'autore non ha alcun senso. Sembra piuttosto che questo tizio non sappia che il polimorfismo può essere ottenuto con altri mezzi rispetto alla digitazione anatra.

Ci sono un certo numero di persone che sostengono che i linguaggi dinamici siano superiori, ma di solito si basano sulla loro mancanza di esperienza con sistemi di tipo espressivo che supportano, ad esempio, sottotipi strutturali, tipi di dati algebrici e funzioni di primo ordine.

    
risposta data 02.03.2011 - 17:01
fonte
8

Prima di tutto, tieni presente che l'autore della suddetta affermazione sta parlando dello sviluppo del sito web. Quindi è preoccupato per lo sviluppo di presentazione , ed è lì che pensa che Scala non sarebbe una buona scelta ...

Detto questo, ho una buona esperienza con lo sviluppo web. Ho lavorato per almeno 8 anni esclusivamente con esso, 5 di quello nelle agenzie digitali.

E, sì, nella mia esperienza una lingua staticamente digitata, compilata al livello della presentazione può essere un grosso ostacolo. Il contenuto deve essere modificato costantemente, molto più spesso dei requisiti aziendali. E di solito questo deve essere fatto da una squadra distinta (gli sviluppatori "front-end"). Normalmente sanno molto su HTML, JavaScript, standard web, CSS, ma non molto sui linguaggi lato server come Java e C #. Assumono anche che qualsiasi tipo di modifica in un modello sia immediatamente disponibile; non sono usati per compilare e digitare errori. E hanno ragione: i linguaggi tipizzati staticamente sono molto validi per requisiti complessi e complessi, come l'accesso ai dati e le regole aziendali, ma non lo sono altrettanto per lo sviluppo dell'interfaccia.

Questo è, infatti, uno dei principali vantaggi dell'uso di un linguaggio template specializzato e interpretato come Velocity . La sua facilità d'uso, potenza e flessibilità sono adeguate agli sviluppatori del livello di presentazione. E poi i ragazzi sul lato server sono liberi di usare un linguaggio serio, tipizzato staticamente ovunque ...

Tuttavia, sono anche d'accordo sul fatto che Scala sia un po 'diverso. Essendo allo stesso tempo molto meno prolisso e molto più espressivo di Java, credo che potrebbe essere usato per lo sviluppo della presentazione - quindi forse potrebbe essere usato con successo come linguaggio template. E se anche potesse essere combinato con un framework come Play (che compila automagicamente il sito Web dopo ogni modifica), potrebbe essere un vincitore A PARER MIO. Tuttavia, anche Play ha optato per un linguaggio modello dinamico (simile a Groovy), che non è un buon segno.

Per riassumere: il problema con Scala è molto più legato al fatto che è compilato. In effetti il suo meccanismo di inferenza di tipo ti fa quasi dimenticarlo è anche digitato staticamente.

(E mi dispiace per il mio inglese. Fammi sapere se qualcosa non è chiaro, proverò a sistemarlo.)

    
risposta data 02.03.2011 - 17:41
fonte
8

Penso che il testo (e la maggior parte delle risposte) stiano mescolando linguaggi tipizzati staticamente e linguaggi eccessivamente prolissi . Ovviamente l'intersezione è molto grande (specialmente considerando solo le lingue più diffuse); ma ci sono alcuni esempi interessanti di linguaggi non verbosi, tipizzati staticamente: Go, Haskell, Scala, Rust ...

    
risposta data 02.03.2011 - 19:49
fonte
5

Ti invito a leggere Strong Typing vs. Strong Test di Bruce Eckel. L'argomento principale è che la qualità del software si riduce a test. Puoi provare in molti modi diversi. I compilatori testano alcune cose in fase di compilazione: prova a memorizzare una stringa in una variabile int e probabilmente ti abbaia. Nei linguaggi dinamici, molti test avvengono in fase di esecuzione. In definitiva, non importa quando si verifica il test. Deve solo succedere. A che ora non si compila in linguaggi dinamici si perde il test in fase di runtime. Testate tutto in modo affidabile, vero?

Dato che, una preferenza per linguaggi compilati con sistemi di tipi rigidi contro linguaggi dinamici è proprio questo: una preferenza. Un po 'come pugili contro slip o infradito contro mutande francesi. Non c'è una risposta giusta o sbagliata. Indossali con l'atteggiamento giusto e non c'è che fantastico.

    
risposta data 03.03.2011 - 06:12
fonte
2

Sono d'accordo con questo, nella maggior parte dei casi, perché, se affrontato, quando si tratta di clienti su una piattaforma web, la flessibilità è un must.

I linguaggi tipizzati staticamente sono più robusti e sicuri di quelli dinamicamente tipizzati, ma quando inizi ad adattare il codice per comportarti in un modo che non era destinato a essere e ne hai bisogno velocemente, le soluzioni sembrano piuttosto complesse e rigide.

Quindi, se hai la modifica per unire le tecnologie, ti consiglio di creare un nucleo in un linguaggio tipizzato staticamente (il core non cambia molto) e utilizzare dinamicamente l'interazione dell'utente.

    
risposta data 02.03.2011 - 15:42
fonte
2

Penso che l'autore di questo post non abbia guardato lo stesso Scala. Mentre sono d'accordo sul fatto che Java e C # hanno limitazioni e sono un po 'inflessibili per lo sviluppo web, Scala è un linguaggio tipizzato staticamente molto diverso da quello che si pensa normalmente quando lo si sente. Scala consente la digitazione anatra e anche una versione sicura di patch di scimmia (attraverso conversioni implicite). Questo rende le librerie di programmazione un po 'più complesse perché dovrai pensare ai tipi, ma se usi solo una libreria come Lift, sembra molto simile a un linguaggio dinamico, tranne che il compilatore ti informerà sui bug ovvi in cui non lo usi destra. Personalmente ritengo che la struttura del sollevatore non debba nascondersi dal rubino su rotaie o simili. Dai un'occhiata agli esempi di codice qui o qui e decidi tu stesso. Mi sono sviluppato in ascensore per un po 'di tempo e non ho mai avuto una situazione in cui avessi un errore di tipo e anche se "Ah uomo, se questo fosse dinamico funzionerebbe" ... perché se fosse dinamico, non mi avrebbe detto che c'è stato un bug fino a quando non si è schiantato durante il runtime.

    
risposta data 02.03.2011 - 16:33
fonte
1

Personalmente penso che quello che dicono sia vero per qualsiasi sistema, non solo per i siti web. Avrai bisogno di una digitazione statica quando parli con l'hardware, perché tutto il resto la digitazione dinamica ha gli stessi svantaggi e vantaggi, non importa quello che fai, davvero, e ciò che è meglio dipende dal gusto e dai problemi specifici per ogni progetto.

    
risposta data 02.03.2011 - 17:35
fonte
1

Risposta pratica rapida: Dipende dalle dimensioni e dalla complessità delle dimensioni del web. Piccolo sito web, progr dinamico lang., Complesso Grande sito web, progr statico. lang.

Risposta noiosa estesa: Molti sviluppatori insistono sul fatto che un sito web dovrebbe essere fatto con un programma dinamico. Langr. ma la verità è che, alla fine, gli strumenti di sviluppo web tendono a utilizzare o emulare lingue tipizzate statiche.

Ho lavorato con PHP diverse volte e, prima o poi, abbiamo dovuto aggiungere un sacco di codice che verifica i tipi dei dati dati, che è implicito in un progr tipizzato statico. lang.

Lagn digitato. aiuta anche l'uso di I.D.E. (s), che richiede molto tipo di verifica.

(portato dal progettista del tuo vicino di casa e del compilatore ;-))

    
risposta data 02.03.2011 - 19:02
fonte
0

Sono d'accordo. Quando guardo il codice C # della maggior parte del web front-end, c'è un sacco di casting da stringhe e serializzazione di dati in stringhe. Fondamentalmente, HTTP come protocollo è adatto per i linguaggi dinamici.

    
risposta data 02.03.2011 - 15:25
fonte

Leggi altre domande sui tag