Forth: Un limbaj de programare ciudat. Here’s Why You Might Love It Anyway.

Dezvăluire: Sprijinul dumneavoastră ajută la funcționarea site-ului! Câștigăm o taxă de recomandare pentru unele dintre serviciile pe care le recomandăm pe această pagină. Aflați mai multe

Forth este un limbaj neobișnuit. Este în primul rând un interpretor și are o interfață de linie de comandă pentru a putea fi utilizat în timp real. Dar are, de asemenea, capacitatea de a lua seturi de cod și de a le compila. Deci este un fel de hibrid.

Din acest motiv, Forth este utilizat în mod obișnuit pe hardware care nu are un sistem de operare tradițional. Este, de asemenea, utilizat pe scară largă pentru a controla mașinării și a fost folosit în explorarea spațială – chiar și pe Philae, sonda care a aterizat pe cometa 67P/Churyumov-Gerasimenko.

Istorie

Forth a fost dezvoltat de Charles Moore începând cu anul 1968, în timp ce făcea programare grafică la Mohasco Industries. Dar prima implementare completă a Forth nu a venit până în 1971, când Moore a creat un sistem autonom pentru controlul telescopului de 11 metri de la Observatorul Național de Radioastronomie din SUA (NRAO).

Versiunile anterioare ale Forth au atras atenția comunității de programare. Dar, în acest moment, a devenit foarte popular în comunitatea astronomică. Astfel, în 1973, Moore a fondat FORTH, Inc. împreună cu colegii săi de la NRAO, Elizabeth Rather și Edward Conklin.

Compania a portat programul pe multe sisteme diferite. Iar FORTH, Inc continuă să fie o companie importantă, furnizând produse legate de Forth oamenilor din mediul de afaceri, academic și guvernamental.

Vizualizare generală a Forth

Există o serie de aspecte unice ale limbajului de programare Forth. Le vom discuta aici pe cele mai importante.

Caracteristicile Forth

Forth oferă multe caracteristici unice:

  • Programare interactivă
  • Crearea de extensii compilate ale limbajului numite „cuvinte”
  • Stacks și Reverse Polish Notation
  • Conectare directă între utilizator și hardware.

Reverse Polish Notation

Forth face calcule matematice folosind Reverse Polish Notation. Aceasta depinde de stocarea numerelor într-o stivă.

Consideră calculul: 2 + 3. În Forth, acest lucru s-ar face prin plasarea lui 2 pe stivă, apoi prin plasarea lui 3 pe stivă și apoi prin adăugarea lor. Acest lucru ar arăta cam așa: 2 3 +.

Pare un pic ciudat, dar este mai ușor pentru calculator să analizeze, deoarece acesta este modul în care calculatoarele fac de fapt calculele. Și odată ce te obișnuiești ca programator, devine destul de natural.

În plus, nu este nevoie de paranteze. Luați în considerare următoarele două exemple. (Notă: caracterul backslash începe un comentariu.)

2 3 + 5 * This is the same as (2 + 3) * 52 3 5 * + This is the same as 2 + 3 * 5

În primul exemplu, 2 este împins pe stivă urmat de 3. Deci 2 este al doilea în stivă și 3 este primul. Operatorul „+” se aplică primelor două elemente din stivă. Acest lucru elimină aceste două elemente din stivă și lasă 5 (2 + 3) în partea de sus a stivei.

Apoi îl împingem pe 5 pe stivă. Acest lucru pune un 5 în prima și a doua poziție a stivei. În cele din urmă, aplicăm operatorul „*”, ceea ce face ca 25 (5 * 5) să fie plasat în partea de sus a stivei.

În al doilea exemplu, plasăm 2, 3 și 5 pe stivă, astfel încât 5 se află pe prima poziție, 3 pe a doua și 2 pe a treia. Apoi aplicăm operatorul „*” pe primele două elemente ale stivei (5 * 3), rezultând că 15 este plasat în partea de sus a stivei.

În acest moment, 15 este pe prima poziție, iar 2 este pe a doua poziție. Când se aplică operatorul +, acesta lasă 17 (15 + 2) în partea de sus a stivei.

Program de exemplu

Programul următor este foarte simplu, dar demonstrează multe din ceea ce se întâmplă în limbaj.

 : OUTMATH Output a mathematical calculation ." We will now calculate: (2 + 3) * 5" CR 2 3 + 5 * ." This equals: " . CR ; OUTMATH

Primul lucru pe care îl face acest program este să definească o funcție numită OUTMATH. Liniile care o urmează fac parte din funcție până la linia care se termină cu punct și virgulă. Prima linie tipărește textul: „Vom calcula acum: (2 + 3) * 5” și îl urmează cu o întoarcere de cărucior.

Linia următoare efectuează calculul despre care am discutat mai sus, rezultând că 25 este plasat în partea de sus a stivei. Ultima linie a funcției emite: „Acest lucru este egal cu: „, urmată de valoarea din partea de sus a stivei (reprezentată de „.”) și de o revenire la cărămidă.

Apoi pur și simplu executăm funcția. Deci, atunci când programul rulează, el emite:

We will now calculate: (2 + 3) * 5This equals: 25

Învățarea Forth

Pentru majoritatea programatorilor, acesta este un nou mod de a gândi. Dar este surprinzător cât de natural pare odată ce începi să lucrezi cu el. Iată câteva tutoriale și cărți care vă vor ajuta să lucrați cu acest limbaj.

Tutoriale Forth

Există o mulțime de tutoriale online. Deoarece Forth este ciudat pentru cei care nu sunt programatori Forth în același timp în care este de la sine înțeles pentru utilizatorii actuali, multe dintre tutoriale trec cu vederea lucruri care pot fi confuze pentru începători. Aceste tutoriale nu au această problemă.

  • Easy Forth: acest scurt Ebook este o excelentă introducere. Singurul său dezavantaj este că nu este foarte bogat în exemple. Așa că verificați câteva dintre exemplele de mai jos.
  • A Beginner’s Guide to Forth: aceasta este o altă introducere bună. Este un pic mai tehnică, dar are mai multe exemple.
  • And So Forth…: aceasta este o introducere foarte amănunțită în Forth – aproape la fel de bună ca o carte.

Forth Books

De multe ori este mai ușor să înveți un limbaj nou obținând o carte care te poate conduce pas cu pas prin acest proces. Există o mulțime de cărți bune despre Forth – în special cele care datează din anii 1980, când Forth a luat cu adevărat avânt. Iată o colecție a celor mai bune și mai importante dintre ele.

  • Discover Forth: Learning and Programming the Forth Language (1982) de Thom Hogan: aceasta este o introducere bună și concisă în limbajul Forth.
  • Starting Forth: An Introduction to the Forth Language and Operating System for Beginners and Professionals (1982) de Leo Brodie: acesta este un clasic și o modalitate excelentă de a învăța Forth. A ieșit de sub tipar, dar copiile folosite nu sunt greu de găsit pentru bani puțini. De asemenea, este disponibilă online gratuit. Programatorii avansați de Forth ar putea dori să consulte lucrarea mai recentă a lui Brodie, Thinking Forth.
  • Programming a Problem Oriented Language: Forth – How the Internals Work (2014) de Charles Moore: aceasta este o versiune Kindle a cărții pe care creatorul lui Forth a scris-o cu mult timp în urmă. Oferă în continuare o perspectivă ascuțită asupra limbajului, dar nu este cea mai bună alegere pentru început.
  • Forth Programmer’s Handbook (2007) de Elizabeth Rather și Edward Conklin: aceasta este o carte mai avansată despre Forth, scrisă de ceilalți doi pionieri Forth. Vezi și cartea lui Rather, Forth Application Techniques (2006).

Alte resurse

  • Forth Interest Group: acest site are tot felul de informații interesante, inclusiv documente istorice vechi. Din păcate, are, de asemenea, o mulțime de link-uri rupte. Dar merită totuși verificat.
  • Links to Forth Programs: aceasta este o colecție excelentă de exemple reale de programe, cum ar fi o foaie de calcul și un rezolvator de puzzle Sudoku.
  • Forth Google Group: acesta este un grup foarte activ de utilizatori Forth care pun și răspund la întrebări.
  • Forth Subreddit: acesta nu este un forum teribil de activ, dar există totuși oameni bine informați pe el.

Impletări Forth

Au existat o mulțime de implementări ale Forth de-a lungul anilor. Forth Interest Group are o lungă pagină de Compilatoare Forth. Deci, dacă se întâmplă să aveți un PDP-11 care se învârte prin garaj, puteți obține un compilator Forth pentru el! Dar pentru sisteme mai moderne, iată care sunt cele mai comune opțiuni.

bigFORTH

La mijlocul anilor 1980, Dietrich Weineck, Georg Rehfeld și Klaus Schleisiek au dezvoltat volksFORTH pentru mașini pe 16 biți, cum ar fi 8086 IBM PC și 6502 Apple, Commodore și Atari.

În cele din urmă, ei au creat o versiune pe 32 de biți pentru Atari ST bazat pe 68000 (bus pe 16 biți). Chiar dacă volksFORTH făcea progrese, proiectul a cam murit (deși a fost reluat mai târziu).

Bernd Paysan a fost totuși suficient de interesat de această versiune de volksFORTH (numită pe atunci turboFORTH), încât a făcut din ea baza lui bigFORTH.

Prima sa versiune a fost lansată pentru Atari ST în 1990. Până în 1995, bigFORTH a fost portat pe 386, iar în anul următor era disponibil pe Windows NT, OS/2 și Linux.

Interfața grafică

În acel moment, Paysan a început să lucreze la MINOS. (Din punct de vedere tehnic, este „MINOS”, dar în mod normal este denumit simplu „MINOS.”)

Este o interfață grafică pentru bigFORTH. S-ar putea să fie mai ușor să ne gândim la el ca la „Visual bigFORTH” ca la Visual Basic, pentru că mai mult sau mai puțin asta este. A fost creat pentru prima dată pentru sistemul X-Windows. Dar în curând a fost disponibil și pentru Windows.

Dezvoltarea atât a bigFORTH cât și a MINOS pare să se fi oprit în jurul anului 2010. Cu toate acestea, ambele sunt ușor disponibile și destul de utile (bigFORTH este compatibil ANSI). De fapt, este foarte distractiv să te joci cu MINOS.

bigFORTH Resources

Dacă vrei să folosești bigFORTH sau chiar să dezvolți pentru el, vei avea la dispoziție toate instrumentele de care ai nevoie:

  • Codul sursă: acesta este codul din ultima versiune oficială din 22 martie 2010, versiunea 2.4.
  • Pachet Debian: un pachet ușor de instalat pentru orice distribuție Linux bazată pe Debian (de exemplu, Ubuntu, Mint). Se instalează în /usr/local/bin și include MINOS, deși se numește xbigforth.
  • Windows Self-Installing Executable: același lucru ca și pachetul Debian, dar pentru Windows. MINOS se numește chiar xbigforth.exe.
  • Documentație (PDF): această carte de aproape 300 de pagini are rol de tutorial și referință, scrisă de JL Bezemer. O mare parte din ea se referă la Forth generic și este cea din care este preluat „And So Forth…”.
  • Bernd Paysan’s Homepage: această pagină are o mulțime de informații și exemple interesante legate de Forth. De remarcat în special limbajul de marcare bazat pe Forth al lui Paysan.
  • bigFORTH Repository: destinația finală pentru toate nevoile dumneavoastră bigFORTH.

Gforth

Gforth este implementarea GNU a Forth. Are un pedigree distins.

Proiectul Gforth a fost inițiat în 1992 de creatorul bigFORTH, Bernd Paysan și Anton Ertl, cu contribuții substanțiale din partea lui Jens Wilke.

A fost o combinație între bigFORTH și mult mai vechiul fig-FORTH (vezi mai jos). Dar istoria sa este întortocheată, deoarece bigFORTH a provenit din volksFORTH, care s-a bazat pe fig-FORTH.

Fiind un proiect GNU, s-a lucrat foarte mult la el de când a început. Acum este complet conform ANSI și și-a atins toate obiectivele inițiale. Cea mai recentă versiune este 0.7.3, cu ultima intrare (de Paysan) la 25 februarie 2013.

În ceea ce privește implementările Forth libere, Gforth este cea mai frecvent utilizată. O parte din asta se datorează doar faptului că face parte din proiectul GNU și disponibilității sale. Dar este, de asemenea, și pentru că este puternic și rapid.

Resurse Gforth

Gforth are toate resursele de care aveți nevoie pentru a-l folosi în orice scop:

  • Cod sursă: această pagină oferă codul sursă Gforth de la versiunea 0.2.1 până la cea actuală, 0.7.3.
  • Pachete Debian: există diverse pachete disponibile pentru distribuția Debian Linux. Rețineți că, în funcție de pachetul pe care îl alegeți, este posibil să trebuiască să instalați mai întâi unul sau mai multe alte pachete.
  • Windows Self-Installing Executable: aceasta este o versiune anterioară (0.7.0) a Gforth, dar o modalitate rapidă de a începe.
  • Documentation (PDF): această carte de 250 de pagini se aplică versiunii 0.7.0 a Gforth. Este, de asemenea, disponibilă în format HTML.
  • Gforth Repository: cam tot ceea ce este legat de Gforth poate fi găsit aici.

pbForth

pbForth se pare că nu mai este suportat, dar este o implementare atât de interesantă a Forth încât merită verificată.

După cum am discutat, Forth a fost întotdeauna asociat cu controlul hardware. Așa că nu a fost deloc surprinzător faptul că a fost creată o implementare Forth pentru kitul de robotică LEGO MINDSTORMS – mai exact, pentru RCX pe 16 biți care a apărut în 1998.

Se pare că nu a fost niciodată actualizată pentru a funcționa cu a doua generație, seria NXT, care a apărut în 2006, și nici cu actuala MV3, care a apărut în 2013.

Deși nu există un site oficial pentru pbForth, este încă posibil să învățați despre el și chiar să îl folosiți. Cu toate acestea, este posibil să existe o curbă de învățare abruptă, deoarece nu există atât de multe informații. Și, în mod clar, ați avea nevoie de un LEGO MINDSTORMS RCX (nu sunt atât de greu de găsit la mâna a doua).

NXT folosește un procesor complet diferit (și pe 32 de biți), așa că pbForth cu siguranță nu ar funcționa cu el. Totuși, ar putea fi distractiv. Și dacă sunteți în stare să o faceți, ați putea, în mod conceptibil, să o portați la kiturile din a doua și a treia generație.

Resurse pbForth

Ce informații sunt disponibile pe internetul normal sunt în general laconice și întotdeauna trimit la pagina de pornire pbForth, care nu mai este în funcțiune cel puțin din 2010. Numai datorită Internet Archive o mare parte din acestea sunt disponibile.

  • History of LEGO Robotics: deși nu se referă la pbForth, oferă o prezentare rapidă a produselor LEGO MINDSTORMS.
  • Introduction to pbForth (PDF): acest tutorial de 30 de pagini vă va ajuta să începeți să vă familiarizați cu acest limbaj.
  • Codul sursă al pbForth: rețineți că pbForth este scris în limbaj de asamblare și Tcl, așa că va trebui să aveți la dispoziție aceste instrumente.
  • Windows GUI: acest fișier rulează, deși este posibil să fie mai complicat să îl faceți să facă ceva. Dacă doriți pbForth pentru Linux sau Mac, va trebui să folosiți codul sursă.
  • phForth Home Page Circa 2009: această pagină oferă linkuri către destul de multe informații interesante despre pbForth, mai ales o jumătate de duzină de scripturi de probă.

Alte implementări

  • fig-FORTH: aceasta a fost una dintre primele implementări Forth, creată de Forth Interest Group. Este o implementare pe 16 biți. Este disponibilă pentru unele calculatoare vechi și minunate, cum ar fi Data General Eclipse și Alpha Micro, precum și pentru calculatoare bazate pe 8086 și 6502. Problema este că nu există fișiere executabile – doar cod în limbaj de asamblare. Și, în cele mai multe cazuri, doar fișiere PDF bitmap ale codului. Codul efectiv pare să fie disponibil doar pentru 8088/8086, PDP-11 și 6800. (6800 este un procesor pe 8 biți, așa că, aparent, a existat o versiune pe 8 biți a fig-FORTH.)
  • SP-Forth: aceasta este o implementare Forth gratuită pentru Windows și Linux.
  • 4tH: aceasta este o implementare Forth ușor de utilizat, disponibilă pentru o gamă largă de hardware (inclusiv Raspberry Pi), și include o documentație bună.
  • SwiftForth™: acesta este compilatorul Forth de la compania originală care a adus Forth în lume. Este un produs comercial, dar are un preț rezonabil.

Summary

Lasă un răspuns

Adresa ta de email nu va fi publicată.