Esistono linguaggi di programmazione che seguono un approccio di sviluppo minimalista?

24

Trovo che quando le lingue sono considerate come software commerciali, è sempre necessario aggiungere nuove funzionalità per giustificare le nuove versioni.

Possono esserci o ci sono lingue in cui la versione 1.0 è la versione finale? Ovviamente le correzioni di bug sono esenti da questo, ma il set di funzionalità rimane sempre lo stesso?

In questo modo, tutte le funzionalità del linguaggio si adattano bene e non sembrano essere chiuse dopo il fatto con funzionalità obsolete ancora in circolazione a causa della retrocompatibilità.

Suppongo che alcune lingue accademiche siano così? Ma ci sono linguaggi di successo commerciale che seguono questa idea? Anche la libreria di accompagnamento è libera di ottenere nuove funzionalità, ma la lingua rimane sempre costante.

Un esempio che posso dare è, una delle mie lingue preferite C #, che uso molto spesso, sempre più funzionalità vengono aggiunte ogni versione. Per trarne vantaggio, devo abbandonare i compiti attuali e dedicare molto tempo all'apprendimento di questi invece di essere in grado di raccogliere concetti banali e combinarli per risolvere problemi più complessi con facilità.

Quindi immagino di cercare un approccio minimalista in cui tutto è coerente, ha senso ed è il più ortogonale possibile.

    
posta Joan Venge 26.12.2012 - 14:54
fonte

9 risposte

31

Lisp, Smalltalk. Per coincidenza, sono anche le migliori lingue dell'intero gruppo.

Sia Lisp che Smalltalk sono lingue costruite attorno a una strong metafora unificante. La metafora di Lisp è "tutto è una lista, questa lista rappresenta sia i dati che il codice (come funzioni)". La metafora di Smalltalk è "tutto è un oggetto, l'unico modo per invocare un comportamento è passare un messaggio a un oggetto". Queste metafore consentono alle lingue di essere stabili, minime e potenti. Il resto è nella libreria.

Le cose che sono chiamate "strutture di controllo" in tutte le lingue non minimali (volevo scrivere "gonfie"), sono parti della libreria qui (ad esempio: cond funzione in lisp; ifTrue: /% la famiglia di messaggi diifFalse: in Smalltalk implementa entrambi un condizionale, in cui le altre lingue hanno la parola chiave if ).

Si può vedere che Lisp / Smalltalk sono incarnazioni quasi minimali del loro paradigma e niente di più (Lisp: programmazione funzionale, Smalltalk: programmazione orientata agli oggetti).

    
risposta data 26.12.2012 - 14:56
fonte
6

TeX , il sistema di composizione tipografica, è stato molto stabile dalla versione 3.

Since version 3, TeX has used an idiosyncratic version numbering system, where updates have been indicated by adding an extra digit at the end of the decimal, so that the version number asymptotically approaches π. This is a reflection of the fact that TeX is now very stable, and only minor updates are anticipated. The current version of TeX is 3.1415926; it was last updated in March 2008. The design was frozen after version 3.0, and no new feature or fundamental change will be added, so all newer versions will contain only bug fixes. Even though Donald Knuth himself has suggested a few areas in which TeX could have been improved, he indicated that he firmly believes that having an unchanged system that will produce the same output now and in the future is more important than introducing new features. For this reason, he has stated that the "absolutely final change (to be made after my death)" will be to change the version number to π, at which point all remaining bugs will become features.

Non pretenderò che soddisfi il tuo "Quindi immagino di cercare un approccio minimalista in cui tutto è coerente, ha senso ed è il più ortogonale possibile". affermazione, ma soddisfa la maggior parte dei tuoi altri criteri.

    
risposta data 26.12.2012 - 19:36
fonte
6

C e Fortran sono le lingue che mi vengono in mente. Sono molto stabili e la loro sintassi è facilmente contenuta nella propria mente. Oltre a scrivere codice cattivo, ci sono pochissime sorprese nell'uso di queste lingue. Ma non vorrei trattenerli come grandi linguaggi per lo sviluppo rapido di applicazioni.

Preferisco il rapido avanzamento delle lingue con funzionalità che, una volta trascorse un po 'di tempo su di esse, rendono il mio lavoro considerevolmente più semplice e il codice meno complesso pur mantenendo l'espressività.

    
risposta data 26.12.2012 - 19:36
fonte
6

Altri hanno già detto Lisp, quindi devo richiamare Forth . È molto facile da implementare e le regole della lingua sono semplici da seguire.

È una lingua basata sullo stack con un dizionario di "parole". Puoi facilmente estendere la lingua utilizzando alcune funzioni ereditarie.

Un esempio MOLTO conciso di grafica tartaruga:

\ 8.8 fixed point sine table lookup
-2 var n F9F2 , E9DD , CEBD , AA95 , 7F67 , 4E34 , 1A c,
: s abs 3C mod dup 1D > if 3C swap - then dup E > if
  -1 1E rot - else 1 swap then n + c@ 1+ * ;

0 var x 0 var y 0 var a
0 var q 0 var w 
: c 9380 C80 0 fill ; \ clear screen
: k >r 50 + 8 << r> ! ;
: m dup q @ * x +! w @ * y +! ; \ move n-pixels (without drawing)
: g y k x k ; \ go to x,y coord
: h dup a ! dup s w ! 2D + s q ! ; \ heading
: f >r q @ x @ y @ w @ r 0 do >r r + >r over + \ forward n-pixels
  dup 8 >> r 8 >> plot r> r> loop o y ! x ! o r> o ;
: e key 0 vmode cls ; \ end
: b 1 vmode 1 pen c 0 0 g 0 h ; \ begin
: t a @ + h ; \ turn n-degrees

Quindi eseguirlo con : squiral -50 50 g 20 0 do 100 f 21 t loop ; ti dà:

Creditoaquesto blog .

    
risposta data 27.12.2012 - 02:25
fonte
4

Sebbene sia stato menzionato il Lisp, il linguaggio più minimalista che conosco è schema . Ho avuto difficoltà a capirlo nei corsi universitari dove dovevo. Ma ha cambiato il mio modo di pensare alla programmazione, ed è molto minimale. Come minimo come tutta la sua sintassi sono Parentesi () e spazi.

L'unico cambiamento nella lingua è stata la decisione di convertire i primitivi come + , define (e alcuni altri) in built-in. Significato sono disponibili al momento del lancio, ma possono essere ridefiniti durante l'esecuzione.

    
risposta data 30.12.2012 - 23:50
fonte
2

Tcl, che era design per essere minimalista in primo luogo

Da lì sulla pagina link , una delle caratteristiche è che è molto facile da imparare e dove casuale programmatori o persino non programmatori possono usarlo.

    
risposta data 26.12.2012 - 15:12
fonte
2

Ci sono poche lingue che sono rimaste relativamente immutate dal loro inizio al di fuori della esoterica una delle lingue straniere che è improbabile che essere ciò che si desidera (non mi piacerebbe provare a scrivere qualcosa di significativo in Befunge (anche se è stato modificato dal suo originale Versione 1.0)).

Le lingue che più probabilmente riempiono il desiderio di non dover imparare nulla di nuovo sono linguaggi specializzati in "incollare" tra altri programmi. Lingue come jcl , bash, e simili. Anche i linguaggi di scripting semplici possono rientrare in questo: awk è uno dei leader.

Una volta che si lascia questo regno, lo sviluppo accade. O la lingua o le strutture. In alcune situazioni è 'difficile' codificare per la lingua senza ottenere alcune delle strutture che sono in rapida evoluzione.

Molte lingue hanno una certa retrocompatibilità. Si può ancora scrivere Java 1.4 oggi, anche se probabilmente non è raccomandato - i framework che le persone scrivono per questo stanno cambiando più velocemente della lingua. Si possono ancora trovare compilatori f77 e f90 là fuori per una specifica della lingua che non è cambiata in 20 o 40 anni. C, Objective C, C ++ può ancora essere codificato in specifiche più vecchie della lingua: non è necessario aggiornare il proprio codice perché è stata rilasciata una nuova specifica o è disponibile un nuovo framework.

Alcune lingue hanno una storia invariata piuttosto lunga perché il linguaggio stesso è sufficientemente potente da fare qualsiasi cosa lo desideri. Lisp è il candidato principale in questo settore. Forth cade anche nel regno di "non ha cambiato molto".

Passando a linguaggi di scripting più tradizionali guarda TCL, Perl e Python. Evita le cose che sono attualmente nel regno della "moda" che stanno vivendo un impeto di popolarità per una ragione o per l'altra (ruby e javascript, ti sto guardando). TCL è cambiato nel corso degli anni , anche se uno dei suoi obiettivi è cercare di mantenere una coerenza del design. Modern Perl e Python hanno entrambi una certa consistenza di design, anche se le nuove funzionalità possono sembrare imbullonate (anche se non è necessario per usarle).

    
risposta data 26.12.2012 - 19:47
fonte
2

Penso che Python sia un candidato ragionevole per un linguaggio con il minimalismo come uno dei suoi obiettivi di progettazione. Si basa su un numero relativamente piccolo di concetti chiave e la versione 3 ha cercato, tra le altre cose, di semplificare un po 'la lingua di rimozione di alcune funzioni.

(Certo, non è lo stesso di un set di funzionalità che è rimasto uguale alla versione 1, ma penso che sia un modo abbastanza arbitrario per valutare le lingue, dato che gli autori di lingua possono chiamarlo versione 1 ogni volta che vogliono.)

    
risposta data 27.12.2012 - 17:45
fonte
-1

Penso che l'approccio progettuale "minimalista" sarebbe esemplificato da Tcl. Ad esempio, puoi usare il comando {catch} con i valori {return -code n} per implementare qualsiasi struttura di controllo che la tua immaginazione possa concepire, Perl ha dovuto attendere un decennio per ottenere (ufficialmente) {switch} - (non quello Perl mai avuto bisogno di esso). Inoltre vedrai che Dodekalogue link copre completamente la grammatica di Tcl - il resto, qualunque sia il paradigma di programmazione con cui vuoi lavorare, può essere espresso in questa grammatica.

    
risposta data 21.05.2014 - 11:07
fonte