{"id":6203,"date":"2018-01-31T07:30:33","date_gmt":"2018-01-31T06:30:33","guid":{"rendered":"http:\/\/www.unilab.eu\/?p=6203"},"modified":"2021-04-15T00:24:09","modified_gmt":"2021-04-14T22:24:09","slug":"linguaggi-programmazione","status":"publish","type":"post","link":"https:\/\/www.unilab.eu\/it\/articoli\/coffee-break-it\/linguaggi-programmazione\/","title":{"rendered":"Linguaggi di programmazione e differenze: breve panoramica"},"content":{"rendered":"<p>I programmi scritti con i <strong>linguaggi di programmazione<\/strong> sono di solito contenuti all\u2019interno di un file sorgente tradotto in automatico per trasformare le informazioni in operazioni o elementi manipolabili dal computer. Tali linguaggi generano sistemi operativi, driver, oggetti eseguibili, applicazioni, ma anche grafici che, come nel caso di TeX o postscript, permettono tra le varie cose di controllare l\u2019automazione.<\/p>\n<p>In linea generica diciamo che la <strong>programmazione pu\u00f2 suddividersi<\/strong> in linguaggi:<\/p>\n<ul>\n<li><strong>imperativi<\/strong> (propongono comandi per la manipolazione del contenuto della memoria e le operazioni da eseguire in modo arbitrario. Ogni elemento presente lascia traccia nella memoria centrale);<\/li>\n<li><strong>funzionali<\/strong> (danno dei comandi che calcolano risultati partendo dai dati di ingresso e non consentono che le funzioni modifichino la memoria del computer);<\/li>\n<li><strong>dichiarativi<\/strong> (descrivono oggetti informatici come la struttura di un database e la sequenza delle loro dichiarazioni non \u00e8 relazionata al tempo);<\/li>\n<li><strong>procedurali<\/strong> (permettono di generare operazioni di alto livello scomponendole in procedure o funzioni);<\/li>\n<li><strong>logici<\/strong> (consentono di ideare sistemi matematici logici);<\/li>\n<li><strong>e orientati agli oggetti<\/strong> (semplificano le realizzazione di schemi predefiniti tramite i quali le problematiche standard della programmazione trovano soluzioni standardizzate).<\/li>\n<\/ul>\n<p>Un\u2019<strong>ulteriore suddivisione<\/strong> va fatta tra linguaggio interpretato, compilato o JIT. Nel primo caso il sorgente viene direttamente interpretato da un software. Nel secondo caso un software compilatore legge il sorgente e lo rende un oggetto eseguibile. Nel terzo caso, invece, il linguaggio \u00e8 compilato in modo tale da poter essere eseguito da una macchina virtuale. Naturalmente tale suddivisione \u00e8 mutevole anche a seconda del paradigma supportato.<\/p>\n<p>I linguaggi di programmazione differiscono poi a seconda del criterio analizzato. Il general purpose, per esempio, \u00e8 pensato per creare software in molteplici contesti applicativi, mentre lo special purpose \u00e8 ideato per creare software in contesti specifici. Al contrario dei linguaggi applicativi, quelli di sistema servono per sviluppare software di sistema. I linguaggi imperativi si danno delle istruzioni da seguire, mentre quelli dichiarativi forniscono obiettivi da far raggiungere al sistema.<\/p>\n<p>Se nei linguaggi basati su testo il programma \u00e8 espresso in modo puramente testuale, in quelli visuali \u00e8 espresso in modo grafico. E se nei linguaggi strongly-typed a ogni valore corrisponde un tipo specifico, in quelli loosely typed questa cosa non succede. Un altro esempio di differenza \u00e8 quello dei linguaggi con gestione automatica delle risorse e di quelli con gestione manuale: in tal caso cambia la presenza o meno di un garbage collector per la gestione della memoria.<\/p>\n<p>Un\u2019ulteriore precisazione da fare, consiste nel fatto che i linguaggi di programmazione basati su testo cambiano in base alla sintassi adoperata. Ci\u00f2 significa che quelli con <strong>sintassi<\/strong> simil-C utilizzano parentesi graffe, quelli simil-LISP utilizzano parentesi tonde e quelli simil-Pascal utilizzano keywords.<\/p>\n<p>Molte volte si parla poi di <strong>linguaggi interpretati e compilati<\/strong>, riferendosi semplicemente a una qualit\u00e0 dell\u2019implementazione dei linguaggi stessi piuttosto che dei linguaggi effettivi. Lo stesso discorso va fatto anche per i linguaggi da cui derivano eseguibili nativi per una determinata architettura e per i linguaggi da cui derivano eseguibili per una macchina virtuale: ci si riferisce sempre a peculiarit\u00e0 dell\u2019implementazione.<\/p>\n<p>Come \u00e8 evidente da quanto appena detto, la <strong>programmazione varia moltissimo<\/strong> a seconda del linguaggio scelto: variazione che va a incidere in primis sulle funzionalit\u00e0 effettivamente eseguibili e sugli obiettivi da raggiungere. I casi riportati rappresentano solo alcuni degli esempi concretamente disponibili e citarli tutti sarebbe pressoch\u00e9 impossibile. Ma la panoramica offerta da un\u2019idea piuttosto precisa sulle differenze esistenti.<\/p>\n<!--themify_builder_content-->\n<div id=\"themify_builder_content-6203\" data-postid=\"6203\" class=\"themify_builder_content themify_builder_content-6203 themify_builder tf_clear\">\n    <\/div>\n<!--\/themify_builder_content-->\n","protected":false},"excerpt":{"rendered":"<p>I programmi scritti con i linguaggi di programmazione sono di solito contenuti all\u2019interno di un file sorgente tradotto in automatico per trasformare le informazioni in operazioni o elementi manipolabili dal computer. <\/p>\n","protected":false},"author":10,"featured_media":6205,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"I programmi scritti con i linguaggi di programmazione sono di solito contenuti all\u2019interno di un file sorgente tradotto in automatico per trasformare le informazioni in operazioni o elementi manipolabili dal computer.","_seopress_robots_index":"","footnotes":""},"categories":[46],"tags":[],"class_list":["post-6203","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-coffee-break-it","has-post-title","has-post-date","has-post-category","has-post-tag","has-post-comment","has-post-author",""],"builder_content":"","_links":{"self":[{"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/posts\/6203","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/comments?post=6203"}],"version-history":[{"count":0,"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/posts\/6203\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/media\/6205"}],"wp:attachment":[{"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/media?parent=6203"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/categories?post=6203"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/tags?post=6203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}