Linguaggio di programmazione

Un linguaggio di programmazione è una notazione convenzionale per formulare algoritmi e produrre programmi per computer che li applicano. In modo simile a un linguaggio naturale, un linguaggio di programmazione è composto da un alfabeto , un vocabolario , regole grammaticali , significati , ma anche un ambiente di traduzione che dovrebbe rendere comprensibile alla macchina la sua sintassi .

I linguaggi di programmazione consentono di descrivere, da un lato, le strutture dei dati che verranno manipolate dall'apparato informatico, e dall'altro di indicare come vengono eseguite le manipolazioni, secondo quali algoritmi. Servono come mezzo di comunicazione attraverso il quale il programmatore comunica con il computer, ma anche con altri programmatori; i programmi di solito vengono scritti, letti, compresi e modificati da un team di programmatori.

Un linguaggio di programmazione è implementato da un traduttore automatico: compilatore o interprete . Un compilatore è un programma per computer che prima trasforma un codice sorgente scritto in un determinato linguaggio di programmazione in un codice di destinazione che può essere eseguito direttamente da un computer, ovvero un programma in linguaggio macchina o in codice intermedio , mentre l'interprete esegue questa traduzione " al volo".

I linguaggi di programmazione offrono diverse possibilità di astrazione e una notazione vicina all'algebra , consentendo di descrivere in modo conciso e di facile comprensione le operazioni di manipolazione dei dati e l'evoluzione del flusso del programma a seconda delle situazioni. La possibilità della scrittura astratta libera la mente del programmatore dal lavoro non necessario, compreso il prendere in considerazione le specifiche dell'hardware del computer, e quindi gli consente di concentrarsi su problemi più avanzati.

Ciascun linguaggio di programmazione supporta uno o più approcci di programmazione- paradigma . I concetti che inducono il paradigma fanno parte del linguaggio di programmazione e consentono al programmatore di esprimere nel linguaggio una soluzione che è stata immaginata secondo questo paradigma.

I primi linguaggi di programmazione sono stati creati negli anni '50 in concomitanza con l'avvento dei computer . Tuttavia, molti concetti di programmazione sono stati avviati da un linguaggio o talvolta da più linguaggi, prima di essere migliorati e quindi estesi nei linguaggi successivi. Il più delle volte la progettazione di un linguaggio di programmazione è stata fortemente influenzata dall'esperienza maturata con i linguaggi precedenti.

Definizione

Un linguaggio di programmazione è costruito da una grammatica formale , che include simboli e regole sintattiche, a cui sono associate regole semantiche. Questi elementi sono più o meno complessi a seconda delle capacità della lingua. Le modalità di funzionamento e la definizione della complessità di un linguaggio di programmazione sono generalmente determinate dalla loro appartenenza ad uno dei gradi della gerarchia di Chomsky .

Da un punto di vista teorico, qualsiasi linguaggio informatico può essere qualificato come linguaggio di programmazione se è Turing-completo, vale a dire che consente di rappresentare tutte le funzioni computabili nel senso di Turing e Church (pur ammettendo per eccezione alla teoria che la memoria dei computer non è uno spazio infinito).

Le regole della sintassi Definite da una grammatica formale , disciplinano i diversi modi in cui gli elementi del linguaggio possono essere combinati per ottenere programmi. La punteggiatura (ad esempio l'apposizione di un simbolo ; alla fine di una riga di istruzione del programma) è una questione di sintassi. il vocabolario Tra gli elementi del linguaggio, il vocabolario rappresenta l'insieme delle istruzioni costruite a partire da simboli . L'istruzione può essere mnemonica o solo simbolica come quando è rappresentata da simboli operativi come operatori aritmetici ("+" e "-") o booleani (&& per la logica e per esempio). Si parla talvolta anche di parola chiave per designare un'istruzione (per abuso di linguaggio perché il concetto di parola chiave non copre quello di simboli che però fanno anche parte del vocabolario ). la semantica Le regole della semantica definiscono il significato di ciascuna delle frasi che possono essere costruite nel linguaggio, in particolare quali saranno gli effetti della frase quando il programma viene eseguito. La scienza per lo studente è la semantica dei linguaggi di programmazione . L' alfabeto L'alfabeto per i linguaggi di programmazione si basa sugli standard attuali come ASCII , che consiste in lettere dalla A alla Z senza accenti, numeri e simboli, o Unicode per la maggior parte dei linguaggi moderni (in cui l'uso è limitato alle stringhe generali o letterali e commenti, con alcune eccezioni degne di nota come C♯ che consentono anche identificatori unicode).

La maggior parte dei linguaggi di programmazione può fornire elementi strutturali aggiuntivi, metodi procedurali e definizioni e identificatori temporanei e variabili:

i commenti I commenti sono testi che non verranno tradotti. Possono essere aggiunti nei programmi per lasciare spiegazioni. I commenti sono delimitati da segni che differiscono da linguaggio di programmazione a linguaggio di programmazione come "-" , "/ *" o "//" . gli ID Gli elementi costitutivi del programma, come variabili , procedure o tipi, vengono utilizzati per organizzare il programma e il suo funzionamento. Possiamo così, ad esempio, dividere un programma in funzioni o dargli una struttura per oggetti  : questi elementi della struttura sono definiti da identificatori o procedure di parole chiave a seconda del linguaggio.

uso

Un linguaggio di programmazione fornisce un framework per costruire algoritmi ed esprimere diagrammi di flusso. Consente in particolare di descrivere le strutture dei dati che verranno trattati dall'apparato informatico e quali saranno le manipolazioni. Un linguaggio di programmazione viene utilizzato come mezzo di comunicazione con il computer ma anche tra programmatori: i programmi vengono solitamente scritti, letti e modificati da un team di programmatori.

Un linguaggio di programmazione offre un insieme di concetti che possono essere usati come primitivi per sviluppare algoritmi. I programmatori apprezzano che il linguaggio sia chiaro, semplice e unificato, che ci sia un minimo di nozioni che possono essere combinate secondo regole semplici e regolari. Le qualità di un linguaggio di programmazione influiscono sulla facilità con cui i programmi possono essere scritti, testati e successivamente compresi e modificati.

Facilità d'uso, portabilità e chiarezza sono qualità popolari dei linguaggi di programmazione. La facilità d'uso, che dipende dalla sintassi, dal vocabolario e dai simboli, influenza la leggibilità dei programmi scritti in questa lingua e la durata dell'apprendimento. La portabilità consente di trasferire un programma scritto per essere eseguito da una determinata piattaforma informatica (un sistema operativo) per l'esecuzione su un'altra piattaforma.

Ai programmatori piace la sintassi per esprimere la struttura logica inerente al programma. Una delle preoccupazioni nella programmazione è evitare guasti, che sia possibile rilevarli, evitarli e correggerli; ciò è reso possibile dai meccanismi interni dei linguaggi di programmazione. A volte vengono eseguiti controlli impliciti per individuare i problemi.

I programmatori apprezzano che un linguaggio di programmazione è in linea con le buone pratiche di programmazione e ingegneria, incoraggia la strutturazione del programma, facilita la manutenzione del programma e scoraggia o addirittura vieta le cattive pratiche. L'utilizzo dell'istruzione goto, ad esempio, che esiste dai primi linguaggi di programmazione, è considerata una cattiva pratica. Il suo utilizzo è sconsigliato, o addirittura impossibile, nei recenti linguaggi di programmazione.

L'allineamento con gli standard del settore, la capacità di utilizzare funzionalità scritte in un altro linguaggio di programmazione e l'esecuzione simultanea di più thread sono possibilità popolari per i linguaggi di programmazione.

Concetti comuni

Un linguaggio di programmazione si basa su un insieme di nozioni come istruzioni, variabili, tipi e procedure o funzioni, che possono essere utilizzate come primitive per sviluppare algoritmi.

un'istruzione

Un ordine dato a un computer.

Una variabile

Un nome utilizzato in un programma per fare riferimento a dati manipolati dal programma.

Una costante

Un nome utilizzato per fare riferimento a un valore permanente.

Un'espressione letterale

Un valore citato per intero nel programma.

un tipo

Ogni dato ha una classificazione, che influenza l'intervallo dei valori possibili, le operazioni eseguibili e la rappresentazione dei dati sotto forma di bit. Ogni linguaggio di programmazione offre una gamma di tipi primitivi , incorporati nel linguaggio. Alcune lingue offrono la possibilità di creare nuovi tipi.

I tipi di dati primitivi comuni sono interi , numeri reali , booleani , stringhe e puntatori .

In particolare, il tipo booleano è un tipo che ha solo due valori, true e false , mentre il tipo puntatore si riferisce a dati che si trovano da qualche parte nella memoria.

Ad esempio, il linguaggio C ha una varietà di tipi che consentono di scegliere con precisione la quantità di memoria allocata ai dati.

Una struttura dati

Un modo caratteristico di organizzare un insieme di dati in memoria, che influenza gli algoritmi utilizzati per manipolarli. Le strutture comuni sono array , record , elenchi , pile , code e alberi .

Una dichiarazione

Una frase di programma che viene utilizzata per informare il traduttore (compilatore, interprete, ecc.) dei nomi e delle caratteristiche degli elementi del programma come variabili, procedure, tipi, ecc.

I controlli vengono eseguiti in fase di compilazione o durante l'esecuzione del programma, per garantire che le operazioni del programma siano possibili con i tipi di dati utilizzati. In un linguaggio fortemente tipizzato , ogni elemento del programma ha un tipo univoco, conosciuto e verificato in fase di compilazione, che rende possibile intercettare gli errori prima dell'esecuzione del programma.

Procedure, funzioni, metodi

Diversi linguaggi di programmazione offrono la possibilità di isolare un frammento di un programma e renderlo un'operazione generale, configurabile e riutilizzabile. Questi frammenti sono chiamati procedure , funzioni o metodi , a seconda del paradigma.

Moduli

I linguaggi di programmazione possono anche offrire la possibilità di suddividere un programma in più parti chiamate moduli , ognuna con un determinato ruolo, quindi di unire le parti.

I concetti di procedura e modulo hanno lo scopo di facilitare la creazione di programmi complessi e voluminosi, aiutando ad affrontare questa complessità. Queste funzioni consentono in particolare la modularità e l' astrazione .

Paradigmi

Un paradigma è un modo di affrontare la programmazione. Ogni paradigma porta la sua filosofia di programmazione; una volta che una soluzione è stata immaginata da un programmatore secondo un certo paradigma, un linguaggio di programmazione che segue quel paradigma permetterà di esprimerla. I paradigmi di programmazione sono imperativi, dichiarativi, funzionali, logici, orientati agli oggetti, concorrenti, visivi, guidati dagli eventi e basati sul web. Ciascun linguaggio di programmazione riflette uno o più paradigmi, fornendo un insieme di concetti che possono essere utilizzati per esprimere una soluzione a un problema di programmazione. Nel corso della storia, scienziati e programmatori hanno identificato i vantaggi ei limiti di uno stile di programmazione e introdotto nuovi stili. La maggior parte dei linguaggi di programmazione contemporanei consente l'adozione di diversi paradigmi di programmazione purché compatibili.

Imperativo (o procedurale)

Il paradigma imperativo o procedurale si basa sul principio di eseguire le istruzioni passo dopo passo proprio come fare una ricetta di cucina. Si basa sul principio della macchina di Von Neumann . Un insieme di istruzioni di controllo del flusso di esecuzione controlla l'ordine in cui vengono eseguite le istruzioni che descrivono i passaggi. Il C , il Pascal , il Fortran e il COBOL sono esempi di linguaggio di programmazione che implementa il paradigma imperativo.

Dichiarativo

Ci sono essenzialmente due paradigmi dichiarativi; questi sono il paradigma funzionale e il paradigma logico. Nel paradigma funzionale, il programma descrive le funzioni matematiche. In paradigma logico, descrive i predicati  : cioè le affermazioni che, una volta istanziate, possono essere vere o false o non ricevere un valore di verità (quando la valutazione del predicato non termina). In un modello di implementazione, una macchina astratta esegue le operazioni necessarie per calcolare il risultato di ciascuna funzione o di ciascun predicato. In questi paradigmi, una variabile non viene modificata dall'assegnazione . Una delle caratteristiche principali è la trasparenza referenziale , il che significa che un'espressione può essere sostituita dal suo risultato senza modificare il comportamento del programma.

Funzionale

Il paradigma funzionale si basa sulla valutazione di formule, al fine di utilizzare il risultato per altri calcoli; si basa sulla ricorsione e il suo modello è il lambda-calcolo , più precisamente la riduzione in forma normale della testa . Tutti i calcoli valutano espressioni o chiamano funzioni. In parole povere, il risultato di un calcolo viene utilizzato per il calcolo oi calcoli che richiedono il suo risultato fino a quando non viene valutata la funzione che produce il risultato del programma. Il paradigma funzionale è stato introdotto dai linguaggi Lisp e ISWIM nonché per quanto riguarda le funzioni ricorsive da Algol 60 , negli anni 60. Linguaggi come Ruby e Scala supportano diversi paradigmi compreso il paradigma funzionale, mentre Haskell supporta solo il paradigma funzionale e OCaml favorisce il paradigma funzionale che condivide con il paradigma oggetto e una piccola dose di imperativo.

Logica

Il paradigma logico mira a rispondere a una domanda ricercando un insieme, utilizzando assiomi, interrogativi e regole di deduzione. L'esecuzione di un programma è una cascata di ricerche di fatti in un insieme, invocando regole di deduzione. I dati ottenuti possono essere associati ad un altro insieme di regole e possono quindi essere utilizzati nel contesto di un'altra ricerca. Il programma viene eseguito per valutazione: il sistema ricerca tutti gli enunciati che, per deduzione, corrispondono ad almeno un elemento dell'insieme. Il programmatore esprime le regole e il sistema guida il processo. Il paradigma logico è stato introdotto dal linguaggio Prolog nel 1970.

Orientato agli oggetti

Il paradigma orientato agli oggetti ha lo scopo di facilitare la divisione di un grande programma in diversi moduli isolati l'uno dall'altro. Introduce le nozioni di oggetto e di ereditarietà. Un oggetto contiene le variabili e le funzioni relative a un soggetto. Le variabili possono essere private , ovvero possono essere gestite solo dall'oggetto che le contiene. Un oggetto contiene implicitamente le variabili e le funzioni dei suoi predecessori e questa ereditarietà aiuta il riutilizzo del codice. Il paradigma orientato agli oggetti consente di associare fortemente i dati alle procedure. È stato introdotto dal linguaggio Simula negli anni '60 ed è diventato popolare negli anni '80, quando l'aumento della potenza di calcolo dei computer ha reso possibile l'esecuzione di programmi di grandi dimensioni. Diversi linguaggi di programmazione sono stati arricchiti al fine di consentire la programmazione orientata agli oggetti; questo è il caso di C++ (derivato dal linguaggio C ), Simula , Smalltalk , Swift e Java sono linguaggi di programmazione in paradigma orientato agli oggetti.

Concorrente

In un paradigma simultaneo un programma può eseguire più attività contemporaneamente. Questo paradigma introduce le nozioni di thread , active wait e remote function call. Questi concetti sono stati introdotti negli anni '80 quando, a seguito dello sviluppo tecnologico, un computer è diventato una macchina con più processori e in grado di svolgere più compiti contemporaneamente. I linguaggi di programmazione contemporanei del 2013 come C++ e Java sono adatti per microprocessori multi-core e consentono la creazione e la manipolazione di thread. Più recentemente, abbiamo assistito all'emergere di linguaggi completamente orientati alla gestione della concorrenza, come il linguaggio Go .

Visivo

Nella stragrande maggioranza dei linguaggi di programmazione, il codice sorgente è il testo, il che rende difficile esprimere oggetti bidimensionali. Un linguaggio di programmazione come Delphi o C# consente di manipolare gli oggetti trascinandoli e rilasciandoli e il disegno risultante viene quindi tradotto in una rappresentazione testuale orientata agli oggetti e guidata dagli eventi. Il paradigma visuale è stato introdotto alla fine degli anni '80 da Alan Kay nel linguaggio Smalltalk , con l'obiettivo di facilitare la programmazione delle interfacce grafiche .

Evento

Mentre un programma interattivo pone una domanda ed esegue azioni in base alla risposta, in stile evento il programma non aspetta nulla e viene eseguito quando è successo qualcosa. Ad esempio, l'utente sposta il mouse o preme un pulsante. In questo paradigma, la programmazione riguarda la descrizione delle azioni da intraprendere in risposta agli eventi. E un'azione a cascata può innescare un'altra azione corrispondente a un altro evento. Il paradigma degli eventi è stato introdotto dal linguaggio Simula negli anni '70 ed è diventato popolare con l'avvento delle interfacce grafiche e delle applicazioni web.

Basato sul Web

Con l'avvento di Internet negli anni '90, i dati, le immagini e il codice vengono scambiati tra computer. Se viene richiesto un risultato da un computer, può eseguire il programma necessario e inviare il risultato. Può anche inviare il codice necessario al computer client per calcolare il risultato stesso. Il programma è raramente tradotto in linguaggio macchina , ma piuttosto interpretato o tradotto in una forma intermedia, il bytecode , che verrà eseguito da una macchina virtuale , o tradotto in linguaggio macchina a runtime ( just-in-time ). Java, PHP e Javascript sono linguaggi di programmazione web based.

Messa in opera

L'uso di una lingua è reso possibile da un traduttore automatico. Un programma che prende un testo scritto in quella lingua per fare qualcosa con esso, di solito:

Un compilatore

Un programma che traduce il testo in un linguaggio che ne consentirà l'esecuzione, come linguaggio macchina , bytecode o linguaggio assembly .

Un interprete

Un programma che esegue le istruzioni richieste. Svolge lo stesso ruolo di una macchina che riconosce questa lingua.

Linguaggio macchina

Ogni dispositivo informatico ha una serie di istruzioni che possono essere utilizzate per eseguire operazioni. Le istruzioni consentono di eseguire calcoli aritmetici o logici, spostare o copiare dati o passare all'esecuzione di altre istruzioni. Tali istruzioni vengono registrate sotto forma di sequenze di bit, dove ciascuna sequenza corrisponde al codice dell'operazione da eseguire e agli operandi, cioè ai dati interessati; è un linguaggio macchina.

La traduzione avviene in più fasi. Innanzitutto, il traduttore esegue un'analisi lessicale in cui identifica gli elementi linguistici utilizzati nel programma. Nella fase successiva, il parsing , il traduttore costruisce un diagramma ad albero che riflette come gli elementi del linguaggio sono stati combinati nel programma, per formare le istruzioni. Quindi, durante l' analisi semantica , il traduttore determina se è possibile eseguire l'operazione e le istruzioni che verranno richieste nella lingua di destinazione.

Nel linguaggio di programmazione assembly, le parole cheat (mnemonico) vengono utilizzate per fare riferimento alle istruzioni della macchina. Le istruzioni differiscono a seconda del costruttore e lo stesso vale per i mnemonici. Un programma di assemblaggio traduce ogni mnemonico nella sequenza di bit corrispondente.

I linguaggi di programmazione spesso funzionano utilizzando un runtime .

Un tempo di esecuzione

Un runtime (traduzione: executor ) è un insieme di librerie software che implementano il linguaggio di programmazione, consentendo di eseguire operazioni semplici, come la copia di dati, ma anche operazioni molto più complesse.

Quando si traduce un programma in linguaggio macchina, le operazioni semplici vengono tradotte nelle corrispondenti istruzioni in linguaggio macchina mentre le operazioni complesse vengono tradotte in usi di funzioni di runtime . In alcuni linguaggi di programmazione, tutte le istruzioni vengono tradotte in utilizzi del runtime che funge quindi da intermediario tra le possibilità offerte dalla piattaforma informatica e le costruzioni specifiche del linguaggio di programmazione.

Ogni linguaggio di programmazione ha un modo convenzionale di tradurre l'esecuzione di procedure o funzioni, di inserire variabili in memoria e di passare parametri. Queste convenzioni vengono applicate dal runtime . Il runtime è stato utilizzato anche per implementare alcune funzionalità avanzate dei linguaggi di programmazione come la garbage collection o la reflection.

I linguaggi di programmazione sono comunemente auto-implementati, ovvero il compilatore per quel linguaggio di programmazione è implementato nel linguaggio stesso. Esempio: un compilatore per il linguaggio Pascal può essere scritto in linguaggio Pascal.

Funzionalità avanzate

Funzionalità avanzate come Garbage Collector , gestione di eccezioni, eventi o thread, nonché late binding e Reflection sono implementate dai linguaggi di programmazione runtime .

Un netturbino

Un meccanismo che rimuove le variabili inutilizzate e libera lo spazio di memoria che era stato loro riservato.

un'eccezione

Un fatto imprevisto, spesso accidentale, provoca il fallimento del normale svolgimento del programma, e questo fatto eccezionale deve essere curato dal programma prima che possa continuare. Alcuni linguaggi di programmazione consentono di interrompere deliberatamente il normale flusso del programma.

Evento

Una procedura che verrà eseguita quando viene soddisfatta una particolare condizione. Gli eventi vengono utilizzati in particolare per implementare interfacce grafiche .

Un filo

Una sequenza di istruzioni in esecuzione. I linguaggi di programmazione che manipolano i thread consentono di eseguire più attività contemporaneamente. Questa possibilità di esecuzione simultanea, offerta dai sistemi operativi, è offerta in forma leggera anche dal runtime dei linguaggi di programmazione.

La rilegatura tardiva

Il processo di binding (inglese late binding o dynamic binding ) consiste nell'associare ogni identificatore di un programma alla locazione di memoria interessata. Questa operazione può essere eseguita durante la traduzione del programma, durante l'esecuzione del programma o poco prima, si dice in ritardo quando l'operazione di collegamento viene eseguita molto tardi, appena prima che venga utilizzata la locazione interessata.

il riflesso

La possibilità per un programma di ottenere informazioni sulle proprie caratteristiche. Le istruzioni del linguaggio di programmazione consentono a un programma di ottenere informazioni su se stesso e di manipolarle come dati.

una monade

Una struttura che permette di manipolare tratti imperativi in ​​linguaggi funzionali puri.

Storico

Anche se la nozione di programma appare gradualmente durante la seconda metà del XIX E  secolo, i primi linguaggi di programmazione non appaiono fino a quando intorno al 1950. Ogni essere in grado di creare un proprio linguaggio, è impossibile determinare il numero totale di lingue. esistente allo stato attuale.

Usi

Possiamo anche classificare i linguaggi di programmazione in base al loro utilizzo perché molti linguaggi sono specializzati in una particolare applicazione o dominio.

Lingue per pagine web dinamiche

Questo tipo di linguaggio viene utilizzato per una maggiore interazione tra un client e un server .

Lato Web server , ciò consente di produrre pagine il cui contenuto viene generato su ciascun display. Questi linguaggi sono spesso abbinati anche ad un linguaggio per comunicare con i database (esempi: PHP , LiveCode ).

Lato client (generalmente il browser web ), questi linguaggi offrono la possibilità di reagire a determinate azioni dell'utente senza dover interrogare il server. Ad esempio, JavaScript su una pagina Web può reagire all'input dell'utente in un modulo (e controllare il formato dei dati ).

Alcuni linguaggi consentono di sviluppare aspetti sia client che server. Questo è il caso di Ocsigen , Hop , Dart o anche JavaScript lato server .

Linguaggi di programmazione teorici

Il linguaggio di programmazione teorico è talvolta indicato come sistemi formali utilizzati per descrivere teoricamente il funzionamento dei computer. Non vengono utilizzati per sviluppare applicazioni ma per rappresentare modelli e dimostrare alcune delle loro proprietà.

Possiamo citare la macchina di Turing e della Chiesa λ-calcolo, sia di che data dal 1930, e quindi antecedenti l'invenzione del computer. Il λ-calcolo è stato successivamente utilizzato come base teorica per la famiglia dei linguaggi di programmazione funzionale . Negli anni '80, Robin Milner ha sviluppato il -calcolo per modellare i sistemi concorrenti.

Lingue esotiche

I linguaggi esotici mirano a creare grammatiche complete e funzionali ma in un paradigma lontano dalle convenzioni. Molti sono anche considerati scherzi.

Queste lingue sono generalmente difficili da mettere in pratica e quindi usate raramente.

Lingue specializzate

  • ABEL , linguaggio per la programmazione elettronica dei PLD
  • CDuce , linguaggio funzionale di ordine superiore per la manipolazione di documenti in formato XML.
  • Forma di Backus-Naur (BNF), formalizzazione dei linguaggi di programmazione
  • PROMELA , linguaggio di specifica per sistemi asincroni
  • VRML , descrizione di scene tridimensionali
Lingue sincrone

Linguaggi di programmazione sincrona per sistemi reattivi: Esterel , Lustre .

Lingue educative

Lo pseudo-codice di solito ha solo uno scopo pedagogico.

  • Il logo è un linguaggio funzionale facile da imparare.
  • Negli anni '90, è stato spesso consigliato di iniziare il linguaggio BASIC . Tuttavia, aveva la reputazione di favorire cattive abitudini di programmazione.
  • Il Processing è un linguaggio semplificato che si basa su Java. Consente lo sviluppo di applicazioni in finestra su qualsiasi tipo di computer dotato di Java.
  • L' Arduino è un linguaggio semplificato basato su C/C++. Consente un facile sviluppo di progetti elettronici dalla scheda Arduino (AVR).
  • ArduinoEDU è un linguaggio ancora più semplice, in francese, per grandi principianti che utilizzano il linguaggio C/C++/Arduino. Consente lo sviluppo molto semplice di progetti elettronici da schede Arduino (AVR).
  • Flowgorithm è uno strumento per creare e modificare graficamente programmi per computer sotto forma di Algorigram.
Lingue per l'elettronica digitale
  • Verilog , VHDL  : linguaggi di descrizione hardware, che consentono di sintetizzare l'elettronica digitale (descrizioni delle porte logiche) e di simularne il funzionamento
  • SystemC , un linguaggio di descrizione hardware di livello superiore rispetto ai precedenti e che consente una simulazione più veloce
Lingue per le statistiche

R , SAS e xLispStat sono entrambi linguaggi e software di statistica.

Linguaggi di programmazione a controllo numerico (NC)

Una macchina utensile automatizzata, o Controllo Numerico (NC), necessita di un linguaggio di programmazione per eseguire operazioni di tornitura o fresatura ...

Linguaggi di programmazione di controllori logici programmabili industriali (PLC) Linguaggi di programmazione audio

Nyquist è un linguaggio di sintesi e analisi del suono. Pure Data è un software di creazione musicale grafica basato su un linguaggio di programmazione procedurale.

spettacoli

Studio comparativo di 27 lingue

Sei ricercatori di tre università portoghesi hanno condotto uno studio comparativo su 27 linguaggi di programmazione, intitolato “Energy Efficiency Across Programming Languages”. Hanno esaminato il consumo energetico, il tempo di esecuzione e l'utilizzo della memoria. Per ottenere una serie di programmi comparabili, i ricercatori hanno esplorato il Computer Language Benchmarks Game (CLBG).

La tabella risultante presenta i risultati complessivi (in media) per il consumo di energia (Energy), il tempo di esecuzione (Time) e il consumo massimo di memoria (Mb) normalizzati rispetto al linguaggio più efficiente per il criterio misurato.

Le cinque migliori lingue sono:

Per il consumo di energia

  • C: 1.00
  • Ruggine: 1.03
  • C++: 1.34
  • Ada: 1.70
  • Java: 1.98

Per l'esecuzione

  • C: 1.00
  • Ruggine: 1.04
  • C++: 1.56
  • Ada: 1.85
  • Giava: 1.89

Per il massimo consumo di memoria


Popolarità

La popolarità di ogni lingua è difficile da quantificare; esiste invece l' indice TIOBE , calcolato mensilmente, che si basa sul numero di training/corsi destinati agli ingegneri e sul numero di rivenditori/freelance specializzati in un linguaggio di programmazione. Si tratta di informazioni frammentarie, ma possono dare un'idea delle tendenze in termini di preferenze dei programmatori.

Note e riferimenti

  1. (in) Maurizio Gabbrielli e Simone Martini , Linguaggi di programmazione: principi e paradigmi , Springer ,2010[ dettaglio delle edizioni ] ( ISBN  9781848829138 )
  2. (en) Kenneth C. Louden e Kenneth A. Lambert , Linguaggi di programmazione: principi e pratiche , Cengage Learning,2011[ dettaglio delle edizioni ] ( ISBN  9781111529413 )
  3. (en) William Sims Bainbridge , Berkshire Encyclopedia of Human-computer Interaction , vol.  2, Berkshire Publishing Group LLC,1994[ dettaglio edizioni ] ( leggi online )
  4. (in) David Anthony Watt e William Findlay , Concetti di progettazione del linguaggio di programmazione , John Wiley & Sons,2004( ISBN  9780470853207 )
  5. Marcel Cori e Jean-Marie Marandin , "  Linguistica a contatto con l'informatica: dalla costruzione delle grammatiche alle grammatiche delle costruzioni  ", Histoire Épistémologie Langage , vol.  23, n °  1,2001, pag.  49–79 ( DOI  10.3406/hel.2001.2817 , letto online , consultato il 13 ottobre 2020 )
  6. Primi passi verso un'ontologia generale dei programmi per computer, Pascal Lando, Frédéric Fürst, Gilles Kassel e Anne Lapujade, "18th Francophone Days of Knowledge Engineering, Grenoble: France (2007)", vedi sezione 3.2 La prima categoria di linguaggi per computer è quella dei linguaggi informatici di uso generale ( inglese  : linguaggi informatici di uso generale ), vale a dire linguaggi completi di Turing ... I linguaggi di programmazione ( inglese  : linguaggi di programmazione ), o linguaggi di alto livello, sono tutti linguaggi generali
  7. (en) Seema Kedar , Paradigmi e metodologia di programmazione , Pubblicazioni tecniche,2002[ dettaglio delle edizioni ] ( ISBN  9788184312966 )
  8. (en) ITL Education Solutions Limited, Introduzione alla tecnologia dell'informazione , Pearson Education India, 2005 ( ISBN  9788177581188 )
  9. (in) RJ Barlow e AR Barnett Computing for Scientists: Principles of Programming with Fortran 90 e C++ , John Wiley and Sons, 1998 ( ISBN  9.780.471955962 )
  10. (en) Seema Kedar e Sanjay Thakare , Principi dei linguaggi di programmazione , Pubblicazioni tecniche,2009[ dettaglio delle edizioni ] ( ISBN  9788184315776 )
  11. (in) Programmazione ADA , Tyrarex Press ( ISBN  9781449991999 )
  12. (in) Krishnamurthy, Strutture di dati che utilizzano C , Tata McGraw-Hill Education, 2008 ( ISBN  9780070669192 )
  13. , Arvind Kumar Bansal, Introduzione ai linguaggi di programmazione , CRC Press - 2013 ( ISBN  9781466565142 )
  14. (en) Jana , Java e paradigma di programmazione orientata agli oggetti , PHI Learning Pvt. srl,2008[ dettaglio delle edizioni ] ( ISBN  9788120327757 )
  15. "  Il modello architettonico di von Neumann  " , su interstices.info (consultato il 13 ottobre 2020 )
  16. Una macchina astratta per il paradigma funzionale può essere la macchina di Krivine .
  17. Che siamo nel puro funzionale o nella pura logica.
  18. Nell'ambito del ricorso per necessità, la seguente spiegazione è sommaria.
  19. (in) DA Godse e AP Godse , Computer Architecture & Organization , Technical Publications,2007( ISBN  8184317719 )
  20. Dhamdhere , Sistemi di programmazione e operativi , Tata McGraw-Hill Education,2011( ISBN  9780074635797 )
  21. (in) Tmh, Computer Science Vii (Tn) , Tata McGraw-Hill Education, 2007 ( ISBN  9780070668034 )
  22. (en) Michael L. Scott, Pragmatica del linguaggio di programmazione , Morgan Kaufmann, 2009 ( ISBN  9780123745149 )
  23. (in) Ian Griffiths, Matthew Adams, .Net Windows Forms in a Nutshell , O'Reilly Media, Inc., 2003 ( ISBN  9780596003388 )
  24. (in) Raghavan, Prin Of Compiler Design , Tata McGraw-Hill Education, 2010 ( ISBN  9780070144712 )
  25. (in) Diomidis Spinellis e Georgios Gousios, Beautiful Architecture: Leading Thinkers rivelano la bellezza nascosta nella progettazione del software , O'Reilly Media, Inc., 2009 ( ISBN  9.780.59,65,179844 )
  26. (in) Chris Smith, Programmazione F # , O'Reilly Media, Inc., 2009 ( ISBN  9780596153649 )
  27. (in) Jeff Friesen, Geoff Friesen Java per esempio 2 , se Publishing 2002 ( ISBN  9780789725936 )
  28. (in) Harold Davis, Visual Basic 6 Secrets Harold Davis 1998 ( ISBN  9.780.76453238 )
  29. (in) Brent B. Welch, Ken Jones, Jeffrey Hobbs, Programmazione pratica in Tcl e Tk , Prentice Hall Professional, 2003 ( ISBN  9780130385604 )
  30. (in) Sibsankar Haldar, Alex A. Aravind, Sistemi operativi , Pearson Education India - 2010 ( ISBN  9788131730225 )
  31. (in) Amit Singh, Mac OS X Internals: A Systems Approach , Addison-Wesley Professional, 2007 ( ISBN  9.780321278548 )
  32. (in) Kishori Sharan, Sfruttare Java 7: un approccio completo all'apprendimento di Java 7 , Kishori Sharan, 2011 ( ISBN  9781466244641 )
  33. Programmazione: lo studio rivela i linguaggi più affamati di energia

Vedi anche

Articoli Correlati

link esterno