REPL - Lo trovi utile? [chiuso]

1

Recentemente ho iniziato a studiare Clojure e ho scaricato Clojure-Box per Windows che è arrivato con SLIME e ho giocato con Clojure usando REPL modalità. Ora, ho iniziato a imparare molte lingue che sono disponibili in REPL (F #, Python, Haskell) ma non l'ho mai usato fino a quando non ho iniziato con Clojure e ho capito quanto sia di aiuto.

Mi stavo chiedendo quante persone usano REPL per le lingue che le hanno disponibili. Se non li usi, qual è il tuo ragionamento per non farlo? Se li usi, li usi per testare il codice o solo per imparare le lingue?

    
posta Jetti 08.12.2010 - 17:04
fonte

6 risposte

2

Trovo che il REPL sia molto utile, specialmente se integrato con l'editor di testo come in Clojure-Box o Lisp-Box. La grande vittoria è scoprire subito se ciò che stai cercando di fare funzionerà correttamente. È possibile eseguire e testare ciascuna funzione mentre la si digita, invece di attendere la compilazione dell'intera applicazione.

    
risposta data 08.12.2010 - 17:10
fonte
2

Oh sì, li trovo molto utili. Sono carini per testare alcune righe di codice, per vedere se qualcosa funziona davvero nel modo in cui te lo aspetti. Molte lingue con REPL fanno anche uso della documentazione in codice, quindi può essere davvero facile cercare un'API per una classe o un modulo tramite REPL.

    
risposta data 08.12.2010 - 17:10
fonte
2

Assolutamente. Ho usato spesso il GHCi (il REPL del compilatore Glasgow Haskell). Anche se penso che il modo migliore per imparare a progettare programmi sostanziali sia digitandoli in un editor di testo (dove puoi scrivere più di una riga facilmente), un REPL offre alcuni importanti vantaggi:

  • Consente di testare le one-liner in modo semplice, in modo da poter imparare rapidamente le funzionalità della lingua:

    > (\xs -> zip xs (tail xs)) [1..10]
    [(1,2),(2,3),(3,4),(4,5),(5,6),(6,7),(7,8),(8,9),(9,10)]
    > (zip <*> tail) [1..10]
    [(1,2),(2,3),(3,4),(4,5),(5,6),(6,7),(7,8),(8,9),(9,10)]
    >
    > sortBy (\a b -> compare (length a) (length b)) ["ab", "abc", "a"]
    ["a","ab","abc"]
    > sortBy (compare 'on' length) ["ab", "abc", "a"]
    ["a","ab","abc"]
    
  • Fornisce documentazione in-console:

    > :i <*>
    class (Functor f) => Applicative f where
      ...
      (<*>) :: f (a -> b) -> f a -> f b
      ...
        -- Defined in Control.Applicative
    infixl 4 <*>
    >
    > :i on
    on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
          -- Defined in Data.Function
    infixl 0 on
    
  • Ottimo per svolgere compiti semplici (e anche non così semplici) quando preferisci non scrivere un intero programma:

    > -- Find longest words that don't have repeated characters.
    >
    > readFile "/home/joey/twl06" >>= mapM_ putStrLn . take 10 . reverse . sortBy (compare 'on' length) . filter ((==) <*> nub) . lines
    UNCOPYRIGHTABLE
    DERMATOGLYPHICS
    TROUBLEMAKINGS
    DERMATOGLYPHIC
    AMBIDEXTROUSLY
    UNPROBLEMATIC
    UNPREDICTABLY
    TROUBLEMAKING
    SUBORDINATELY
    MULTIBRANCHED
    
risposta data 08.12.2010 - 18:30
fonte
2

Una volta scoperto LINQPad , il mio utilizzo dell'IDE per i progetti e l'apprendimento zero è andato giù. Sebbene non sia un REPL tradizionale, è un'interfaccia di tipo scratch-pad per i linguaggi .NET ed è eccellente per l'apprendimento e il testing. Ci sono così tante volte che voglio solo provare qualcosa in fretta senza l'ambiente di sviluppo heavyweight in piena regola e REPL è perfetto per questo.

    
risposta data 08.12.2010 - 18:43
fonte
1

Per Java con macchine virtuali basate su Hotspot, è possibile aggiornare (con determinate regole per obbedire) le classi mentre si esegue semplicemente salvando il codice sorgente rivisto nel proprio IDE.

Se il tuo ciclo principale richiama ripetutamente le suddette classi, hai effettivamente un semplice REPL che è molto utile.

    
risposta data 08.12.2010 - 19:38
fonte
1

Spesso faccio una programmazione esplorativa (ad esempio per scoprire come progettare un'API). Ciò spesso avviene in due modi: o effettivamente utilizzo solo REPL, o utilizzo REPL per testare manualmente tutto ciò che ho scritto in un editor. In entrambi i casi REPL mi consente di risparmiare enormi quantità di tempo.

Inoltre, REPL è il migliore per la programmazione throw-away: quando hai un'attività che sai probabilmente non la eseguirai di nuovo: f.e. per il data mining (Sage + R e Python sono geniali per questo) ci sono casi in cui non si hanno mai dati nello stesso esatto formato, quindi è necessario scrivere routine per importare file specifici.

    
risposta data 09.12.2010 - 00:20
fonte

Leggi altre domande sui tag