{"id":6267,"date":"2011-03-18T15:40:52","date_gmt":"2011-03-18T14:40:52","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=6267"},"modified":"2011-10-05T12:20:06","modified_gmt":"2011-10-05T10:20:06","slug":"3-panoramica-sui-linguaggi-di-programmazione","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/3-panoramica-sui-linguaggi-di-programmazione\/","title":{"rendered":"3. Panoramica sui linguaggi di programmazione"},"content":{"rendered":"<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-introduzione-ai-linguaggi-di-programmazione-00.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-introduzione-ai-linguaggi-di-programmazione-00.jpg\" alt=\"corso-completo-c-introduzione-ai-linguaggi-di-programmazione-00\" title=\"corso-completo-c-introduzione-ai-linguaggi-di-programmazione-00\" width=\"200\" height=\"100\" class=\"alignleft size-full wp-image-6273\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-introduzione-ai-linguaggi-di-programmazione-00.jpg 200w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-introduzione-ai-linguaggi-di-programmazione-00-150x75.jpg 150w\" sizes=\"auto, (max-width: 200px) 100vw, 200px\" \/><\/a> Ad oggi esistono pi\u00f9 di 2500 linguaggi di programmazione diversi, alcuni sono uno standard consolidato, altri, invece, hanno avuto vita breve. Sicuramente qualcuno avr\u00e0 sentito parlare del linguaggio C, del JAVA, del PHP, ma difficilmente conoscer\u00e0 il COWSEL o il MUMPS. Alcuni linguaggi hanno una sintassi molto simile all&#8217;inglese scritto (<a href=\"http:\/\/en.wikipedia.org\/wiki\/Natural_language_programming\" target=\"_blank\">link<\/a>, <a href=\"http:\/\/www.mathsnet.net\/logo\/turtlelogo\/index.html\" target=\"_blank\">link<\/a>), altri invece nascono solo con l&#8217;intento di essere assurdamente complessi (<a href=\"http:\/\/it.wikipedia.org\/wiki\/Linguaggio_di_programmazione_esoterico\" target=\"_blank\">link<\/a>) come il linguaggio composto solo da spazi e segni di tabulazione ( <a href=\"http:\/\/compsoc.dur.ac.uk\/whitespace\/examples.php\" target=\"_blank\">link<\/a> ).<br \/>\nIn questo corso parleremo in maniera approfondita del linguaggio C, a mio avviso IL linguaggio che ogni buon programmatore, per dirsi tale, deve conoscere, ma per meglio collocare questo linguaggio nell&#8217;universo dei linguaggi esistenti \u00e8 bene chiarire quali sono le caratteristiche dei  vari linguaggi e capire come il C si pone in questo variopinto universo.<br \/>\nCercher\u00f2 quindi di elencare alcune caratteristiche che rendono un linguaggio differente da un altro. Purtroppo alcuni aspetti forse non saranno chiari fin da subito, perch\u00e8 richiedono un minimo di familiarit\u00e0 con qualche linguaggio di programmazione, ma ho deciso ugualmente di parlarne qui, perch\u00e8 cos\u00ec riuscirete, nel corso delle lezioni, a notare tali aspetti avendone gi\u00e0 acquisito il significato.<!--more--><\/p>\n<h4>Linguaggi di alto e basso livello<\/h4>\n<p>Questa distinzione l&#8217;abbiamo gi\u00e0 incontrata nella <a href=\"http:\/\/www.devapp.it\/wordpress\/1-storia-della-programmazione.html\" target=\"_blank\">prima lezione<\/a>, per chi non l&#8217;avesse ancora letta ricordo che &#8220;basso&#8221; o &#8220;alto&#8221; livello non sono aggettivi riferiti alla qualit\u00e0 del linguaggio, ma si riferiscono al livello di astrazione del linguaggio. I linguaggi a &#8220;basso livello&#8221; di solito sono meno comprensibili, hanno un minore livello di astrazione, e sono pi\u00f9 legati all&#8217;architettura della macchina, mentre i linguaggio di &#8220;alto livello&#8221; hanno una sintassi pi\u00f9 intuitiva e forniscono strumenti per scrivere del codice pi\u00f9 vicino al modo di pensare dell&#8217;uomo rispetto a quello della macchina.<br \/>\nI linguaggi  a basso livello sono poco utilizzati, ma in alcuni casi sono utili per scrivere programmi ad altissime prestazioni o programmi per interagire a basso livello con le periferiche, come nel caso dei drivers.<br \/>\nPer avere un&#8217;idea della differenza tra i due tipi di linguaggio confrontiamo questi due programmi, entrami fanno la stessa cosa: sommano due numeri. Secondo voi quale dei due \u00e8 il linguaggio di alto livello?<\/p>\n<p><center><\/p>\n<table>\n<tr>\n<td><strong>Linguaggio Assembly<\/strong><\/td>\n<td><strong>Linguaggio C<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\nMOV [1000h],3<br \/>\nMOV [1001h],4<br \/>\nMOV AX,[1000h]<br \/>\nADD AX,[1001h]<br \/>\nMOV [1002h],AX\n<\/td>\n<td>x = 3 + 4;<\/td>\n<\/tr>\n<\/table>\n<p><\/center><\/p>\n<h4>A ciascuno il suo paradigma<\/h4>\n<p>Un&#8217;altra grande differenza tra i linguaggi di programmazione \u00e8 il paradigma su cui si basano.<br \/>\nComprendere cosa sia un paradigma di programmazione senza aver mai scritto una riga di codice non \u00e8 certo semplice, ma possiamo dire che il paradigma di programmazione \u00e8 uno stile fondamentale del linguaggio, uno stile per cui il linguaggio mette a disposizione delle funzionalit\u00e0.<br \/>\nIl C fa parte dei cosiddetti linguaggi imperativi, chiamati cos\u00ec perch\u00e8 la soluzione di un problema la si ottiene eseguendo una serie di istruzioni, scritte da noi, in un preciso ordine.<br \/>\nIn altri paradigmi di programmazione, come la &#8220;programmazione dichiarativa&#8221; e la &#8220;programmazione ad oggetti&#8221; (OOP Object Oriented Programming) questo concetto viene in parte modificato, prediligendo una descrizione pi\u00f9 generica del problema e degli enti che ne fanno parte.<br \/>\nBench\u00e8 io sia  sicuro che questa spiegazione in questo momento non vi abbia chiarito fino in fondo le idee (nel corso faremo altri accenni a questo argomento, soprattutto in riferimento alla OOP),  insisto nell&#8217;affermare che l&#8217;approccio nel risolvere un problema deve essere diverso a seconda del paradigma utilizzato. Questo dovrebbe essere un comandamento per il  buon programmatore, perch\u00e8 \u00e8 un grosso errore, ad esempio, utilizzare un linguaggio che per sua natura segue il paradigma ad oggetti, come se fosse imperativo e viceversa.<\/p>\n<p>Possiamo fare un piccolissimo esempio: Il nostro problema \u00e8 quello di estrarre il numero pi\u00f9 alto da un insieme di 10 numeri. Vediamo come bisognerebbe scrivere questo programma in ciascun paradigma:<\/p>\n<p><center><\/p>\n<table>\n<tr>\n<td><strong>Programmazione imperativa<\/strong><\/td>\n<td><strong>Programmazione dichiarativa<\/strong><\/td>\n<td><strong>Programmazione ad oggetti<\/strong><\/td>\n<\/tr>\n<tr>\n<td>numero pi\u00f9 alto = 0<br \/>\nprendi il primo numero.<br \/>\n\u00c8 pi\u00f9 grande di &#8220;numero pi\u00f9 alto&#8221;?<br \/>\nse si allora:<br \/>\nil numero pi\u00f9 alto \u00e8 il primo numero.<br \/>\nprendi il secondo numero&#8230;..etc etc etc<\/td>\n<td>SELEZIONA numero pi\u00f9 alto DA mio insieme<\/td>\n<td>[mioinsieme  prendivalorepi\u00f9alto]<\/td>\n<\/tr>\n<\/table>\n<p><\/center><\/p>\n<p>Non saltiamo a facili conclusioni giudicando dalla lunghezza del codice, ciascun paradigma si presta bene ad una determinato set di operazioni. Inoltre non \u00e8 sempre vero che la programmazione imperativa richiede un maggior numero di righe di codice, anzi \u00e8 pi\u00f9 probabile l&#8217;inverso, che la OOP, a causa della sua intrinseca generalit\u00e0 obblighi a scrivere pi\u00f9 codice.<\/p>\n<h4>Compilato o interpretato?<\/h4>\n<p>Il codice sorgente dei nostri programmi non pu\u00f2 essere eseguito cos\u00ec com&#8217;\u00e8 dalla cpu ma, come abbiamo detto nella prima lezione, le nostre istruzioni devono essere convertite in linguaggio macchina (codice binario). Per far questo esistono dei software che si chiamano compilatori il cui compito \u00e8 quello di analizzare il codice sorgente, verificare che non ci siano errori formali e convertire tutte le istruzioni in linguaggio macchina, generando quindi un file eseguibile come i famosi .exe del sistema operativo windows.<br \/>\nI linguaggi, come il C, che seguono questa prassi prendono il nome di linguaggi compilati. Esistono per\u00f2 altri tipi di linguaggi che funzionano in modo leggermente diverso: sono i linguaggi interpretati e i linguaggi di scripting. Per queste categorie di linguaggi non \u00e8 previsto il compilatore, ma un programma che si chiama interprete, che analizzando il file sorgente produce &#8220;al volo&#8221; il codice binario adatto per la cpu.<br \/>\nIn linea generale i linguaggi interpretati dovrebbero essere pi\u00f9 lenti rispetto ai linguaggi compilati, proprio per questo lavoro di &#8220;traduzione&#8221; che deve essere fatto ogni volta e &#8220;in tempo reale&#8221;, ma considerate le attuali velocit\u00e0 delle cpu questo aspetto non \u00e8 pi\u00f9 limitante.<br \/>\nPer complicare le gerarchie esistono anche linguaggi che non appartengono n\u00e8 ad una n\u00e8 all&#8217;altra categoria, come il JAVA, in cui il sorgente viene compilato non in linguaggio macchina ma in byte-code, una sorta di via intermedia tra JAVA e linguaggio macchina, e poi interpretato al volo dalla JAVA Virtual Machine.<\/p>\n<p><strong>Nota sugli errori formali:<\/strong> Quali sono gli errori che un compilatore pu\u00f2 segnalare? Ogni linguaggio di programmazione ha le sue regole sintattiche, che definiscono come il programma deve essere scritto. Le regole sintattiche includono l&#8217;uso delle parentesi, delle lettere maiuscole\/minuscole, dei segni di punteggiatura, in alcuni casi anche gli spazi.<br \/>\nPurtroppo per loro natura queste regole evidenziano solo errori sintattici e non quelli semantici, quindi gli errori segnalati dal compilatore sono solo quelli del primo tipo, mentre per scoprire gli errori del secondo tipo bisogna analizzare il codice con molta, molta pazienza.<\/p>\n<h4>Programmazione ad eventi<\/h4>\n<p>La programmazione event-driven a rigor di termini \u00e8 un paradigma di programmazione come la programmazione dichiarativa o la OOP, ma a mio avviso questa definizione non le rende giustizia. In un programma non event-driven c&#8217;\u00e8 un punto di inizio, poi il programma esegue il suo compito ed infine giunge al termine, come nell&#8217;algoritmo per fare il t\u00e8 della <a href=\"http:\/\/www.devapp.it\/wordpress\/2-introduzione-alla-programmazione-algoritmi-e-diagrammi-di-flusso.html\" target=\"_blank\">precedente lezione<\/a>, mentre in un programma event-driven il programma si avvia e resta in un loop molto stretto (in gergo si chiama loop stretto un loop in cui vengono effettuate pochissime operazioni), in ascolto di eventuali eventi scatenati dall&#8217;utente, come un click su un pulsante, su un men\u00f9 etc.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-introduzione-ai-linguaggi-di-programmazione-01.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-introduzione-ai-linguaggi-di-programmazione-01.jpg\" alt=\"corso-completo-c-introduzione-ai-linguaggi-di-programmazione-01\" title=\"corso-completo-c-introduzione-ai-linguaggi-di-programmazione-01\" width=\"314\" height=\"361\" class=\"aligncenter size-full wp-image-6272\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-introduzione-ai-linguaggi-di-programmazione-01.jpg 314w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-introduzione-ai-linguaggi-di-programmazione-01-260x300.jpg 260w\" sizes=\"auto, (max-width: 314px) 100vw, 314px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>La programmazione event-driven infatti da il suo massimo nella realizzazione delle interfacce grafiche, ma esistono ambiti in cui si pu\u00f2 sfruttare con successo la programmazione event-driven anche per altri scopi.  C nella sua concezione pi\u00f9 classica non \u00e8 event-driven.<\/p>\n<h4>Tipizzato o non tipizzato?<\/h4>\n<p>La tipizzazione di un linguaggio di programmazione \u00e8 una delle caratteristiche che si nota appena si inizia a scrivere qualche riga di codice inoltre \u00e8 anche una delle prime (non chiedetemi perch\u00e8) che viene citata nella descrizione di un linguaggio. Ma cosa vuol dire che un linguaggio \u00e8 o non \u00e8 tipizzato? Purtroppo ancora non abbiamo citato il concetto di variabile all&#8217;interno dei nostri programmi, ma intuitivamente possiamo dire che una variabile \u00e8 qualcosa che durante l&#8217;esecuzione del nostro programma \u00e8 destinata a cambiare valore. Ad esempio una variabile potrebbe contenere il totale di una fattura in un programma di contabilit\u00e0, un titolo di film in un programma per videoteche e via discorrendo. Nella stesura dei programmi con i linguaggi tipizzati \u00e8 necessario dichiarare esplicitamente se quella variabile conterr\u00e0 un numero, se conterr\u00e0 del testo, una data e cos\u00ec via, mentre nei linguaggi non tipizzati questi vincoli non vi sono o sono meno restrittivi.<br \/>\nI programmi non tipizzati sono di norma programmi interpretati, perch\u00e9 i programmi compilati riservano durante la compilazione uno spazio predefinito nella memoria del computer per contenere quel valore, quindi \u00e8 strettamente necessario sapere che tipo \u00e8 e quanto spazio occupa.<\/p>\n<h4>Perch\u00e8 proprio il C?<\/h4>\n<p>Il linguaggio C \u00e8 stato ideato nel (lontano) 1972 nei laboratori Bell, una vera fucina di innovazioni (<a href=\"http:\/\/it.wikipedia.org\/wiki\/Bell_Laboratories\" target=\"_blank\">link<\/a>), da Dennis Ritchie, un programmatore statunitense che lo cre\u00f2 apportando alcune modifiche al linguaggio B. \u00c8 stato uno dei primi linguaggi di programmazione ad alto livello, anche se in alcuni casi viene definito come il linguaggio &#8220;pi\u00f9 a basso livello tra quelli di alto livello&#8221; proprio a voler evidenziare la sua natura alle volte un po&#8217; scarna e priva di fronzoli.<br \/>\nIl linguaggio C \u00e8 stato standardizzato dall&#8217;American National Standard Institute e dall&#8217;International Standardization Organization, infatti la versione &#8220;standard&#8221; del C viene chiamata ANSI C. L&#8217;ultima revisione ufficiale risale al 1990, e ci si riferisce a quella revisione con il nome di C99.<br \/>\nCi si potrebbe chiedere come mai, dopo quasi quaranta anni si studi ancora il linguaggio C, ci saranno sicuramente dei linguaggi pi\u00f9 moderni e innovativi, no?<br \/>\nLa risposta \u00e8 che il C, a differenza di quanto si possa credere, \u00e8 un linguaggio semplice da imparare, e questa sua semplicit\u00e0 non va a scapito delle potenzialit\u00e0 o della rigorosit\u00e0 del linguaggio. Inoltre linguaggi apparentemente pi\u00f9 evoluti come il C++ e il JAVA sotto sotto utilizzano parte dei concetti del C, tanto che una buona conoscenza del C vi permetter\u00e0 di muovervi meglio anche in questi linguaggi. (A fine corso ponetevi questa domanda: &#8220;c&#8217;\u00e8 molta differenza tra un riferimento ad un oggetto java ed un puntatore ad una struttura C?&#8221; vi anticipo che la risposta \u00e8 no \ud83d\ude42 )<br \/>\nInsomma, conoscere il C \u00e8 utile quanto il solfeggio per un pianista ma pi\u00f9 divertente. Utile come saper far di conto prima di studiare l&#8217;analisi matematica.<br \/>\nSe poi il vostro obbiettivo \u00e8 quello di imparare l&#8217;objective-C, che deriva totalmente dal C, direi che lo studio di questo linguaggio \u00e8 quasi un passo obbligato.<br \/>\nUna delle caratteristiche che a mio avviso fanno del C un ottimo linguaggio anche dal punto di vista didattico \u00e8 che \u00e8 molto facile commettere errori nella stesura del codice.<br \/>\nQuesta caratteristica, che pu\u00f2 sembrare negativa, si rivela invece estremamente formativa, perch\u00e8 costringe a scrivere codice pulito, ordinato e, soprattutto, corretto.<\/p>\n<p>Il C possiede molte altre caratteristiche che gli hanno permesso di vivere questi 40 anni senza perdere lo smalto iniziale, alcune le vedremo durante questo corso le altre, quelle che non trovano posto nei manuali, quelle meno scientifiche e pi\u00f9 emozionali vi toccher\u00e0 scoprirle da soli, mentre scriverete i vostri primi programmi in C.<\/p>\n<h4>Prossimamente:<\/h4>\n<p>Nella prossima lezione faremo qualcosa di pratico, vedremo quali sono gli strumenti necessari per programmare in C sia con windows che con linux e mac, vedremo come compilare un programma da riga di comando oppure utilizzando un software pi\u00f9 completo per svolgere il nostro lavoro.<\/p>\n<h4>Letture consigliate:<\/h4>\n<p><a href=\"http:\/\/www.amazon.it\/gp\/search\/ref=as_li_qf_sp_sr_il_tl?ie=UTF8&#038;keywords=887192200X&#038;tag=de0d-21&#038;index=aps&#038;linkCode=as2&#038;camp=3370&#038;creative=23322\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/C-Corso-Completo-di-Programmazione-kernighan-ritchie-devAPP.jpg\" alt=\"C-Corso-Completo-di-Programmazione-kernighan-ritchie-devAPP\" title=\"C-Corso-Completo-di-Programmazione-kernighan-ritchie-devAPP\" width=\"54\" height=\"75\" class=\"alignleft size-full wp-image-7803\" \/><\/a> <a href=\"http:\/\/www.amazon.it\/gp\/search\/ref=as_li_qf_sp_sr_il_tl?ie=UTF8&#038;keywords=887192200X&#038;tag=de0d-21&#038;index=aps&#038;linkCode=as2&#038;camp=3370&#038;creative=23322\" target=\"_blank\"><strong>Il linguaggio C. Principi di programmazione e manuale di riferimento (Accademica) <\/strong><\/a><br \/>\n<em>Brian W. Kernighan &#8211; Dennis M. Ritchie<\/em><br \/>\n<strong>Editore:<\/strong> Pearson | <strong>Lingua:<\/strong> Italiano | <strong>Brossura:<\/strong> 313 pagine<br \/>\n<strong>Prezzo Listino:<\/strong> <del datetime=\"2011-09-03T10:00:08+00:00\">EUR 27,00<\/del><br \/>\n<strong>Prezzo Promozione:<\/strong> EUR 22,95 con Spedizione gratuita<\/p>\n<p><a href=\"http:\/\/www.amazon.it\/gp\/product\/8850329547\/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&#038;tag=de0d-21&#038;linkCode=as2&#038;camp=3370&#038;creative=23322&#038;creativeASIN=8850329547\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/C-Corso-Completo-di-Programmazione-Deitel-Deitel-devAPP.jpg\" alt=\"C-Corso-Completo-di-Programmazione-Deitel-Deitel-devAPP\" title=\"C-Corso-Completo-di-Programmazione-Deitel-Deitel-devAPP\" width=\"54\" height=\"75\" class=\"alignleft size-full wp-image-7550\" \/><\/a> <a href=\"http:\/\/www.amazon.it\/gp\/product\/8850329547\/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&#038;tag=de0d-21&#038;linkCode=as2&#038;camp=3370&#038;creative=23322&#038;creativeASIN=8850329547\" target=\"_blank\"><strong>C. Corso completo di programmazione<\/strong><\/a><br \/>\n<em>Paul J. Deitel &#8211; Harvey M. Deitel<\/em><br \/>\n<strong>Editore:<\/strong> Apogeo | <strong>Lingua:<\/strong> Italiano | <strong>Brossura:<\/strong> 640 pagine<br \/>\n<strong>Prezzo Listino:<\/strong> <del datetime=\"2011-09-03T10:00:08+00:00\">EUR 39,00<\/del><br \/>\n<strong>Prezzo Promozione:<\/strong> EUR 33,15 con Spedizione gratuita<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/supporto-applicazioni\/le-applicazioni-dei-nostri-autori\/parole-vietate-di-ignazio-calo\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/02\/bannerIgnazioc.png\" alt=\"\" width=\"480\" height=\"100\" \/><\/a><br \/>\n<\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ad oggi esistono pi\u00f9 di 2500 linguaggi di programmazione diversi, alcuni sono uno standard consolidato, altri, invece,&#8230;<\/p>\n","protected":false},"author":53,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[569],"tags":[129,593,588,241,624,623],"class_list":["post-6267","post","type-post","status-publish","format-standard","hentry","category-corso-completo-di-c","tag-compilatori","tag-corso-completo-di-c-2","tag-corso-di-c","tag-ignazio-calo","tag-interpreti","tag-linguaggi-di-programmazione"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/6267","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/53"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=6267"}],"version-history":[{"count":11,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/6267\/revisions"}],"predecessor-version":[{"id":7807,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/6267\/revisions\/7807"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=6267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=6267"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=6267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}