In cele doua articole anterioare am explicat ce este Leibniz si cum functioneaza. Acum mergem la implementarea Pharo a Leibniz.

Imaginea de mai jos arata cum arata implementarea Pharo in prezent, cu subpachete precum Reguli, active si contexte care trebuie create de la zero. Trebuie sa le creez pe fiecare si sa le atasez la subpachetul Contexte pentru o implementare generala a Leibniz. pachetele sunt ceea ce intentionez sa creez si sa adaug la pachetul Leibniz.

Array

Trebuie sa existe metode si subpachete care sa permita Parsarea si vizualizarea. Utilizatorul trebuie sa poata juca cu modelele pe care le citeste. Acest lucru ii va oferi o paritate caracteristica cu Racket-Leibniz. Am explicat cum sa instalati pachetul si cum functioneaza mai jos.

Pentru a instala pachetul in Pharo 7, rulati urmatoarele linii in locul de joaca Pharo:

Metacello noua

linie de baza: „Leibniz”;

depozit: ‘github: // khinsen / leibniz-pharo / src’;

sarcina.

Array

Leibniz foloseste generos glifurile Unicode care nu sunt continute in fonturile implicite utilizate de imaginile standard Pharo. Urmatorul cod poate fi rulat daca aveti „Arial Unicode MS Regular 10” si „DejaVu Sans Mono Regular 10” in sistem.

FreeTypeFontProvider actualizare curentaFromSystem.

StandardFonts implicitFont:

(LogicalFont

familyName: dimensiunea punctului „Arial Unicode MS”

: 10).

StandardFonts codeFont:

(LogicalFont

familyName: punct „DejaVu Sans Mono”

Dimensiune: 10).

Array

StandardFonts listFont:

(LogicalFont

familyName: “Arial Unicode MS” punct

Dimensiune: 10).

Meniul StandardFontFont:

(LogicalFont

familyName: Punctul „Arial Unicode MS”

Dimensiune: 10).

Butonul StandardFonts Font:

(LogicalFont

familyName: punct “Arial Unicode MS”

Dimensiune punct: 10).

StandardFonts windowTitleFont:

(LogicalFont

familyName: punctul ‘Arial Unicode MS’

Dimensiune: 11).

StandardFonts balloonFont:

(LogicalFont

familyName: punct „Arial Unicode MS”

Dimensiune: 9).

StandardFonts haloFont:

(LogicalFont

familyName: punct „Arial Unicode MS”

Dimensiune: 9).

Am explicat fiecare dintre straturile de mai jos intr-un mod cuprinzator.

Strat document – Acesta este stratul in care sunt analizate documentele din Pilon. Stratul document trimite apoi contextele care reprezinta modelul stiintific mai jos in stratul context. Este in stratul de document in care folosim arborele XML si extragem contextele mentionate in pagina XML si le trimitem pentru a fi construite si create.

Stratul de document este, de asemenea, format din LeibnizBuiltins, care are contexte integrate, cum ar fi numere intregi, numere rationale, siruri etc. Acestea sunt cateva dintre contextele utilizate de majoritatea modelelor care vor fi implementate de utilizatori.

Context Layer – Acesta este locul in care partile contextului sunt impartite mai departe in diferitele sale parti constitutive. Subpachetele continute aici efectueaza citirea arborelui XML. Ei detecteaza diferitele aspecte cum ar fi vals, op etc si il transmit mai departe subpachetelor proprii, adica SortGraphs pentru sortari.

Aici sarcina mea ar fi sa adaug valori pentru reguli, termeni, termeni de evaluare si alte aspecte. Completati subpachetele cu schelete de baza. Primul obiectiv aici este sa identificam aceste componente si sa le cream in pachetele corespunzatoare din subpachetele de mai jos. In prezent acestea sunt cele care exista.

Fiecare are metode pentru a adauga ops, vars, sorturi etc. Voi implementa cele pentru reguli, termeni si active. Fiecare va fi declarat mai tarziu si voi arunca mai multa lumina asupra procedurii odata ce lucrarile vor incepe.

Termeni – Acest subpachet contine o definitie concisa a valorilor si cantitatilor existente intr-un context. Acestea pot fi chiar relatii existente intre valori intr-un context. Terminologia acestor termeni defineste un model stiintific si ii face mai usor de citit si de utilizat.

Fiecare termen are propriul sau Sort, care este prezentat in pachetul sortgraphs.

Sortarea este calculata cu conexiuni la subpachetul Semnaturi. De acolo, fiecarui termen i se da propriul sau fel. Ca un termen intreg folosit intr-un model stiintific poate fi urmarit inapoi la a avea un sort intreg.

Semnaturi – Colectia tuturor operatorilor din diferite contexte se numeste semnaturi. Acesta este un mare ajutor pentru a observa modelele stiintifice asa cum se arata mai jos. Fiecare dintre operatorii de mai jos are un tip separat si modul in care functioneaza. Acestea pot fi vizualizate de la inspector in modul in care graficele arata in doua moduri diferite. Acest lucru nu a fost implementat nicaieri in alte limbi. Am atasat imagini cu cat de uimitoare este vizualizarea pentru operatii in tip boolean.

Operatorii pentru context boolean

Mai jos am atasat operatorul de inmultire in numere reale vazute folosind arborescenta.

Vedere in copac a multiplicarii op

Imaginea de mai jos este vizualizarea in retea a aceluiasi operator.

Vizualizare retea

Doua tipuri diferite de vizualizari cu o intelegere profunda a modului in care functioneaza fiecare strat este puterea Pharo.

SortGraphs – Subpachetul Sortgraphs este utilizat pentru a stoca categorii si seturi de valori. Asa cum s-a explicat in implementarea Leibniz-Racket, sorturile sunt utilizate pentru a descrie cantitati precum masa, numere intregi. Relatia lor este reprezentata de Sortgraph. Toate aceste caracteristici sunt reprezentate in fila inspector cu grafice folosind Roassal2.

Cum sunt reprezentate sorturile

Celelalte trei subpachete sunt reguli, termeni si active. De aici incepe munca mea. Exista un schelet gol care necesita conexiuni si metode implementate. Al patrulea meu articol din serie se va concentra asupra muncii si asupra modului in care merg inainte sa implementez aceste subpachete si sa completez pachetul.

Exista o aura de mister in jurul a ceea ce face de fapt un model stiintific si a modului in care computerul il face sa functioneze. Pharo este limbajul perfect pentru a elimina acest lucru, deoarece comunitatea Pharo a redus intotdeauna diferenta dintre dezvoltator si utilizator. Libertatea oferita de acest limbaj este foarte libera, deoarece oricare dintre componentele din baza de coduri poate fi schimbata si manipulata.

Proiectul, daca este selectat, incepe pe 6 mai, dupa care voi posta actualizari saptamanale despre modul in care imi desfasor proiectul si despre cum sa il imbunatatesc in continuare.