Search

Archives

Pages

Op mijn desktop:

Suggesties, commentaar, ... (klik of schrijf zelf:)e-mail webgang
Laatste titels:

Niklaus Wirth inspireert

Uitzending do 18:00 ** January 25th, 2024 by wim.webgang **

(Ondanks even technische problemen met niet starten van de muziek in BCP1 na het nieuws, toch deel 3 van in memorial Niklaus Wirth).

Pascal vs Gambas

Nu ik terugblik op Pascal, zie ik veel eigenschappen van Pascal terugkomen in de Gambas programmeertaal op Linux. Gambas (ondertussen aan versie 3) is naast een programmeertaal ook een IDE, en kan zowel gebruikt worden om desktop programma’s te maken, als om commandline programma’s of scripts te maken. De maker van Gambas was heel erg gemotiveerd om een samenhangende, logische en betrouwbaar mogelijke taal te maken, en de lelijkheid van iets als Visual Basic te vermijden. Dus ook hij had de bedoeling een “mooie” taal te maken.

Pascal is een mooie programmeertaal, die gebruik maakt gestructureerd programmeren met verstaanbare woorden, en daardoor beter leesbaar en te verstaan is. Volgens freepascal.org is het gemakkelijker om een afgewerkt programma te maken in Pascal dan in C of Java bv. Ook Gambas is verstaanbaarder dan C of Java.

Pascal wordt een hogere programmeertaal genoemd, maar ze laat wel toe om te programmeren tot op laag niveau. Dat kan je van Gambas ook zeggen.

Een van de oorzaken van veel problemen met C programma’s zijn pointers. Je kan in Pascal ook met pointers werken, maar het is niet nodig voor bv een string. De string is een gedefinieerd type in Pascal.
Ook in Gambas is de string een type. De pointer is in Gambas een eigen type, en je kan die niet verwarren met een getal (zoals in C), omdat dat een ander type is.

De Pascal taal is goed gestructureerd, en heeft de toewijzing uitdrukkelijk gedefinieerd met een eigen combinatie, nl dubbel punt + is gelijk teken, of met andere woorden a:=4 (a wordt 4); hierdoor wordt het ook gemakkelijker om fouten te zien (tov a = b en a == b enz)
Een regel eindigt met een puntkomma (;)

Dat is wel een verschil met Gambas: de toewijzing gebeurt helaas door het = teken, en dat wordt ook gebruikt bij een vergelijking, dat is een lelijk puntje in Gambas.

Het einde van een lijn wordt in gambas niet aangegeven door een speciaal teken als “;” of zo, een gewone “newline” is het einde van een lijn. Dat is niet onlogische, minder zichtbaar inderdaad waar de lijn stopt, maar toch duidelijk als je de regelnummers aan hebt staan. Ik vind het persoonlijk geen nadeel.

De if .. then van Pascal heeft een duidelijke begrenzing met:

if voorwaarde then
begin
regelscode
end

In C wordt de voorwaarde begrensd door () en de begin end door accolades {}.
In Gambas hou je de duidelijke if .. voorwaarde .. then maar dan is een “end” genoeg om de code af te sluiten, ze begint altijd intrinsiek na de then.
Pascal leest mooi, maar het is duidelijk meer tikwerk (zeker zonder IDE).

De case .. of structuur van Pascal heeft een else en een end, maar tussen de verschillende case mogelijheden geen speciale woorden als “break”; de structuur is sluitend op zich.

In Gambas wordt het sleutelwoord select gebruikt, en is er een duidelijk afgelijnde structuur:
Gambas: Select ... case case End Select

Bij Pascal worden parameters doorgegeven, ook variabele parameters zijn mogelijk, wat niet het geval is bij C, waar je dan met pointers moet werken.
Bij Gambas is er een “BYREF” toegevoegd om de niet-mogelijkheid om variabele parameters mee te geven te omzeilen voor bepaalde doeleinden; de normale manier is de parameter niet mee te geven maar te declareren het niveau erboven, of in een speciale module als public; die zijn dan bereikbaar vanuit de methode/sub-procedures. (Ik weet niet of dat een mooiere oplossing is, en ik dacht dat het wel mogelijk is/zal worden om bv een “object” mee te geven, maar dan zit je weer met een backward compatibility probleem).

In ieder geval is het de bedoeling na te denken over waar je je variabelen declareert, de “scope” is waar ze dan geldig zijn. In Gambas heb je de eigenaardigheid dat in een module of klasse beslist wordt of variabelen public of private zijn, en binnen een procedure/methode wordt een variabele lokaal gedeclareerd met “dim”, en die bestaat alleen daarbinnen. Een heel goede conventie bij Gambas die ik met enthousiasme heb overgenomen is bij de naamgeving van een variabele een prefix te gebruiken voor het type, dan zie je in je code veel sneller mogelijke fouten door verkeerd type.

— 4 —
En nog iets over naamgeving: Pascal beschouwt een variabele naam waar een hoofdletter als hetzelfde als de naam zonder hoofdletter(s). Dat is raar! Typisch iets van de “oude” computertijd, (en ook bekend van e-mail).
Enerzijds merk je niet dat je een hoofdletter vergeten bent in een samenesteld woord waarbij je het tweede deel met hoofdletter begon, Pascal begrijpt het wel. Hetzelfde trouwens voor Gambas: je kan niet dezelfde naam van procedure of variabele declareren met kleine letters en hoofdletters. En ok, ik begrijp het ook wel, als het enige verschil tussen twee namen een hoofletter is, dan ben je met je naamgeving niet zinvol bezig.

Pascal heeft implementaties met Object-oriëntatie. Bij Gambas is een zekere vorm van Object-oriëntatie ingebouwd. Mooi vind ik bv de “with object do” syntax, waarbij nadien het object afgekort wordt door een punt voor de naam van de methode of de properties.

In de “slant” community wordt Gambas3 gekozen boven (Free-) Pascal om bv een desktopapplicatie voor Linx te maken, maar dat heeft niet alleen met de Gambas programmeertaal, maar ook met de programmeeromgeving te maken, die trouwens zelf in de Gambas taal geschreven is. “Je kan geen gemakkelijkere manier vinden om een desktop-programma voor Linux te schrijven”, klinkt het daar.

En daar zitten we met het grootste verschil: er zijn vele Pascals (dialecten) en er is maar één Gambas. Pascal bestaat voor verschillende computerplatformen, dus er is enige kans om programma’s cross-platform te maken.
En Gambas maakt “.gambas” executables die een “runtime” nodig hebben (een beetje als java), itt Pascal dat native executables maakt.

Free Pascal (3.2) en Lazarus RAD IDE (Z.2.6) zijn standaard aanwezig in bv de openSUSE software verzameling, Gambas zat daar ook even in onder “educational”, maar nu moet je die uit een aparte repository halen, bv “munix9″.

Ref: sources and links

https://en.wikipedia.org/wiki/Niklaus_Wirth

https://people.inf.ethz.ch/wirth/

https://en.wikipedia.org/wiki/Pascal_(programming_language)

https://en.wikipedia.org/wiki/Free_Pascal#Version_2

https://www.freepascal.org/docs-html/ref/ref.html#QQ2-164-205

https://www.lazarus-ide.org/

https://people.inf.ethz.ch/wirth/projects.html

https://oberon.org/en

https://free.oberon.org/en/

https://ch.linkedin.com/company/oberon-microsystems-ag

https://gambas-buch.de/

Lift ^ | Lift v | Comments Off

Comments are closed.