Interpreti, introduzione alla programmazione e una segnalazione

cover

Questo post fa parte di una classe per adesso vuota –o quasi- su cose che avrei voluto fare e spesso manco lo sapevo e adesso è tardi. Perché bisognerebbe essere giovani e possibilmente ‘mericani o tanto bravi che ci finisci là perché ti mandano o ti chiamano o –OK, sogni a occhi aperti ma semen in anno licet dirne kwalcuna 😜
Inoltre ci sono gli interpreti, devo ammettere che quello che dicevo negli anni ’80-90 non era vero. Nella classe di post di cui sopra ci sarà anche la mia apologizzazione 😡

Non so se conoscete il prof David Evans dell’UVa. Io no ma vorrei. Per tanti motivi, quelli detti precedentemente e poi dalle foto si vede che l’ambiente è accogliente. Magari bisogna studiare secco forte. Ma si può fare, si deve fare 😄

Il testo che ha usato in anni recenti —Introduction to Computing— disponibile nel Web l’ho letto tutto d’un fiato approfittando dell’influenza 😙

Mi viene voglia di citarne un po’.
A pagina 39 David dice che linguaggio useranno per la prima parte del corso (che ricordo è un corso introduttivo): The programming system we use for the first part of this book is  in a programming language named Scheme. A Scheme interpreter interprets a Scheme program and executes it on the machine processor. Uh! Scheme 😄
E continua: Scheme was developed at MIT in the 1970s by Guy Steele and Gerald Sussman, based on the LISP programming language that was developed by John McCarthy in the 1950s. Although many large systems have been built using Scheme, it is not widely used in industry. It is, however, a great language for learning about computing and programming. The primary advantage of using Scheme to learn about computing is its simplicity and elegance. The language is simple enough that this chapter covers nearly the entire language. […] By contrast, some programming languages that are widely used in industrial programming such as C++ and Java require thousands of pages to describe, and even the world’s experts in those languages do not agree on exactly what all programs mean. Ah! ma allora anticamente quando facevo paragoni tra Fortran (compilato) e Basic (interpretato) era colpa –anche– dell’ambiente industriale (e forse anche del NWO 👽).
Ci sono diversi interpreti Scheme e indovinate? Although almost everything we describe should work in all Scheme interpreters, for the examples in this book we assume the DrRacket programming environment which is freely available from http://racket-lang.org/. Uh! quello che uso io 😄

Nelle pagine 40-52 descrive tutto il linguaggio; e ci sono anche gli esercizi –da fare!
At this point, we have covered enough of Scheme to write useful programs (even if the programs we have seen so far seem rather dull). In fact […] we have covered enough to express every possible computation! We just need to combine these constructs in more complex ways to perform more interesting computations.

Poi il corso— il libro diventa più normale, a parte il fatto di usare Scheme al posto di Python o Java o C++ 😄

A pagina 78 Davide precopia il mio nuovo logo:
cons
A dire il vero il mio logo l’aveva precopiato LMI e Rainer Joswig me l’aveva fatto notare.

Salto, mica posso copiare tutto.  A p.123 si trova: The power of computers comes from their programmability. Universal computers can be programmed to execute any algorithm. The Turing Machine model provides a simple, abstract, model of a computing machine. Every algorithm can be implemented as a Turing Machine, and a Turing Machine can simulate any other reasonable computer. Cosa non nuova ma è un corso introduttivo.

Perdono il prof che non conosce il latino e interpreta male il nome di Leonardo Pisano, p.127.
In compenso c’è la visualizzazione di un ad albero non bilanciato che non dimenticherò più:

umba-tree
Non ho dimenticato che volevo parlare degli interpreti che guarda caso sono introdotti nel capitolo 11, con citazioni di Lewis Carroll e Edsger W. Dijkstra.
Languages are powerful tools for thinking. Different languages encourage different ways of thinking and lead to different thoughts. Hence, inventing new languages is a powerful way for solving problems. We can solve a problem by designing a language in which it is easy to express a solution and implementing an interpreter for that language.

An interpreter is just a program. As input, it takes a specification of a program in some language. As output, it produces the output of the input program. Implementing an interpreter further blurs the line between data and programs, […] by passing procedures as parameters and returning new procedures as results. Programs are just data input for the interpreter program. The interpreter determines the meaning of the program.

To implement an interpreter for a given target language we need to:

  • Implement a parser that takes as input a string representation of a program in the target language and produces a structural parse of the input program. The parser should break the input string into its language components, and form a parse tree data structure that represents the input text in a structural way.
  • Implement an evaluator that takes as input a structural parse of an input program, and evaluates that program. The evaluator should implement the target language’s evaluation rules. Our target language is a simple subset of Scheme we call Charme. The Charme language is very simple, yet is powerful enough to express all computations (that is, it is a universal programming language). Its evaluation rules are a subset of the stateful evaluation rules for Scheme. The full grammar and evaluation rules for Charme are given in Section 11.3. The evaluator implements those evaluation rules.
    Section 11.4 illustrates how changing the evaluation rules of our interpreter opens up new ways of programming.

Sì, si costruisce un interprete nuovo di pakka: Charme. Adesso si potrebbe pensare che siccome finora si è usato Scheme e vogliamo farne una variante useremo –logicamente– Scheme. E invece no!

We use Python instead of Scheme to implement our Charme interpreter for a few reasons. The first reason is pedagogical: it is instructive to learn new languages. As Dijkstra’s quote at the beginning of this chapter [non riportata] observes, the languages we use have a profound effect on how we think. This is true for natural languages, but also true for programming languages. Different languages make different styles of programming more convenient, and it is important for every programmer to be familiar with several different styles of programming. All of the major concepts we have covered so far apply to Python nearly identically to how they apply to Scheme, but seeing them in the context of a different language should make it clearer what the fundamental concepts are and what are artifacts of a particular programming language.

The grammar for Python is quite different from the Scheme grammar, so Python programs look very different from Scheme programs. The evaluation rules, however, are quite similar to the evaluation rules for Scheme.
Like Scheme, Python is a universal programming language. Both languages can express all mechanical computations. For any computation we can express in Scheme, there is a Python program that defines the same computation. Conversely, every Python program has an equivalent Scheme program.

E qui parte con la costruzione di Charme. Non ho rifatto tutto sul mio ‘puter ma non sembra poi tanto difficile (d’altronde conosco un paio di bambini sui 10 anni che parlano correttamente cinese 😙).

Ecco. Un corso che mi sarebbe piaciuto fare, illo tempore, e un argomento da approfondire, gli interpreti. E i linguaggi che si usano nel corso sono quelli che uso (o vorrei usare) anch’io.
C’è anche, proprio alla fine, una giustificazione almeno parziale per quello che pensavo da giovane: Although today’s computers can do amazing things, many of which could not even have been imagined twenty years ago, there are problems that can never be solved by computing. E sì non si può fare tutto 🤖

:mrgreen:

Annunci
Post a comment or leave a trackback: Trackback URL.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: