Quale ruolo hanno avuto i miglioramenti dell'hardware nello sviluppo dei linguaggi moderni (ad es. Python / Java)?

5

Vorrei chiedere informazioni sulla storia dei linguaggi di programmazione, in particolare sul ruolo dell'hardware nello sviluppo del linguaggio negli ultimi 20-30 anni.

Ho letto della storia di Python e del progetto ABC . Mi sembra che ci siano state molte lezioni apprese sulla struttura del linguaggio, sull'astrazione su una sintassi più naturale ("espressiva"), sull'estensibilità ecc.

Mi piacerebbe sapere quale ruolo ha avuto l'hardware nello sviluppo delle lingue moderne. Ad esempio, più RAM significa che le lingue potrebbero essere meno efficienti con l'allocazione della memoria, ma diventare più convenienti per l'utente? I processori più veloci significavano che operazioni proibitive e costose potevano spostarsi nel mainstream?

    
posta geonaut 12.05.2017 - 11:25
fonte

2 risposte

11

No, le risorse hardware disponibili non sembrano avere un impatto significativo sulla programmazione del linguaggio di programmazione.

  • La raccolta dei dati inutili non era un'innovazione dei linguaggi degli anni '90. Invece, era disponibile dalla fine degli anni '50, uno dei tanti concetti inventati per Lisp. Da allora, GC è diventato prevedibile in linguaggi di programmazione di altissimo livello. C ++ è l'eccezione alla regola, dal momento che intende essere utilizzabile come linguaggio di programmazione di sistema come C.

  • Gli interpreti e le macchine virtuali sono allo stesso modo obsolete: Lisp introdusse l'interpretazione alla fine degli anni '50 e UCSD Pascal (anni '70) usò un runtime interpreter bytecode che per alcuni aspetti sembra stranamente simile a Java. Molti dei primi computer domestici come Commodore 64 offrivano un interprete BASIC come interfaccia principale. Tuttavia, le prestazioni ridotte degli interpreti erano molto più evidenti, limitando lo sviluppo "serio" dei sistemi interpretati principalmente agli utenti accademici o agli utenti con potenti workstation.

  • Il design sintattico umano-friendly non è nuovo neanche. Essere in grado di scrivere codice per espressioni matematiche in un modo che assomiglia alla matematica è stata la maggiore innovazione di Fortran (fine anni '50). COBOL (anche alla fine degli anni '50) è molto prolisso e cerca di leggere come un semplice inglese. Questo era anche un obiettivo della sintassi SQL (anni '70). ABC e Python non sono inusuali, specialmente perché fanno parte della famiglia di linguaggi ALGOL-Pascal che fa molto affidamento sulle parole chiave. La loro innovazione sintattica sta sposando la regola "off-side" (cioè i blocchi delimitati da indentazione) con la sintassi simile ad ALGOL.

Ci sono alcuni aspetti minori in cui l'hardware impone vincoli che sono meno rilevanti oggi, o hanno aperto nuove opportunità:

  • C e C ++ sono progettati in modo da supportare la compilazione a passaggio singolo, che riduce la quantità di memoria del compilatore. È quindi necessario pre-dichiarare tutte le funzioni che si utilizzano in un programma C o C ++. Tuttavia, le macchine moderne hanno molta più memoria e nessun compilatore mainstream esegue la compilazione a passaggio singolo.

  • Migliori risorse computazionali significano che i compilatori sono in grado di eseguire ottimizzazioni e analisi molto più complesse. Alcuni linguaggi come Scala non sarebbero fattibili senza questo tipo di potenza di elaborazione.

  • Man mano che i computer diventavano più accessibili, la barriera di accesso per iniziare con la programmazione è stata notevolmente ridotta. In particolare, i linguaggi di scripting non richiedono di compilare prima il programma e consentono di semplificare il bricolage. Questo sembra essere collegato all'esplosione di Internet negli anni '90: Perl era estremamente popolare per gli script CGI, ma era in gran parte sostituito da PHP poiché era molto più facile aggiungere un po 'di codice a una pagina HTML. Oggigiorno, tutti hanno un IDE JavaScript integrato nel browser.

risposta data 12.05.2017 - 12:25
fonte
1

Ho trovato un articolo che spiega esattamente cosa stai chiedendo.

Ecco il link all'articolo -

link

The 1980s were years of relative consolidation in imperative languages. Rather than inventing new paradigms, all of these movements elaborated upon the ideas invented in the previous decade. C++ combined object-oriented and systems programming. The United States government standardized Ada, a systems programming language intended for use by defense contractors. In Japan and elsewhere, vast sums were spent investigating so-called fifth-generation programming languages that incorporated logic programming constructs. The functional languages community moved to standardize ML and Lisp. Research in Miranda, a functional language with lazy evaluation, began to take hold in this decade. One important new trend in language design was an increased focus on programming for large-scale systems through the use of modules, or large-scale organizational units of code. Modula, Ada, and ML all developed notable module systems in the 1980s. Module systems were often wedded to generic programming constructs---generics being, in essence, parametrized modules (see also polymorphism in object-oriented programming). Although major new paradigms for imperative programming languages did not appear, many researchers expanded on the ideas of prior languages and adapted them to new contexts. For example, the languages of the Argus and Emerald systems adapted object-oriented programming to distributed systems. The 1980s also brought advances in programming language implementation. The RISC movement in computer architecture postulated that hardware should be designed for compilers rather than for human assembly programmers. Aided by processor speed improvements that enabled increasingly aggressive compilation techniques, the RISC movement sparked greater interest in compilation technology for high-level languages. Language technology continued along these lines well into the 1990s. Some notable languages that were developed in this period include:

  • 1980 – C++ (as C with classes, renamed in 1983)
  • 1983 – Ada
  • 1984 – Common Lisp
  • 1984 – MATLAB
  • 1985 – Eiffel
  • 1986 – Objective-C
  • 1986 – LabVIEW (Visual Programming Language)
  • 1986 – Erlang
  • 1987 – Perl
  • 1988 – Tcl

  • 1988 – Wolfram Language (as part of Mathematica, only got a separate name in June 2013)

  • 1989 – FL (Backus)

    
risposta data 05.06.2017 - 09:09
fonte

Leggi altre domande sui tag