( uid_21365 | 2020. 11. 26., cs – 22:24 )

Rengeteg dolgot említettél, ha kimerítően akarnék válaszolni rá úgyis megkapnám a kiosztásomat hogy tl;dr...

Szóval igyekszem általánosabban hozzáállni a kifogásaidhoz.

—Nyilván bele lehet kötni abba a logikába amit a topiknyitóban felvázoltam. Rengeteg kifogást lehetne emelni ellene azokon felül is namiket írtál, magam is tudom. Ennek ellenére, a helyzet akkor is az hogy látható már remélem, ez nem egy „katyvasz”, hanem igenis VAN benne logika! LEHETNE BENNE MÁS LOGIKA IS, igen. Lássuk be azonban, úgyse lehet olyan jelentésmegfeleltetéseket találni a szimbólumoknak (vagy olyan szimbólumrendszert kitalálni) ami rögtön világos mindenki számára, vagy akárcsak olyat legalább, ami ha nem is világos, de miután megtanulta valaki, az lesz a véleménye hogy e szimbólumok tényleg annyira logikusak hogy nem lehetne másképp értelmezni őket. Ez ugyanaz a helyzet mint ami az emberi nyelveknél van. A magyar nyelvben van (például) egy olyan szó, hogy „asztal”. Mindent nevezhetünk asztalnak ami nagyjából vízszintes felületű, rá lehet tenni valamit, teljesen mindegy hogy ezen most kajálunk vagy levelet irkálunk. Mindegyik „asztal”. Logikus? IGEN.

Ezzel szemben az angol nyelvben két szó is van erre, funkciótól függően. Table és desk. Logikus? IGEN, ez is logikus a maga módján. Most beleköthetünk hogy miért ilyen hülye az angol, hiszen látható a magyar nyelvből, tök jól meg lehetne spórolni egy szót, mert lehetne használni a desk helyett is a table szót az angolban is, biztos megértenék. De ugyanúgy a magyar nyelvbe is bele lehetne kötni hogy „szegényes” és „primitív” nyelv, mert nem képes olyan frappánsan kifejezni már a szóválasztással is ilyen apró stilisztikai különbségeket...

Mindez ízlés kérdése. Egyik se jobb a másiknál, csak MÁS.

A Peri ugyanilyen aspektusból nézve, nyilvánvalóan jelentősen MÁSABB mint a megszokottabb nyelvek. Tény hogy szokni kell. A mlogikáját is, igen. Ettől azonban még van benne logika. Te hosszasan kifejtetted, hogy a felvázolt logika lehetne más is. Valóban lehetne más. Akkor az egy másik nyelv lenne... EGY programnyelv csak EGY fajta szimbólumlogikát képes implementálni.

Másik kifogásod ha jól értettelek, hogy a „szintaktikai sugár” szerinted túl kicsi egyes esetekben. Igen, akadhatnak ilyen esetek valóban. Most mit csináljak, a szintaktikai sugár minél nagyobb érvényessége bár fontos szempont, készségesen elismerem, ám nem az EGYETLEN szempont. Rengeteg különböző szempont és követelmény létezik egy programnyelvvel kapcsolatban, és sajnos ezek olykor egymásnak drámaian ellentmondóak. A programnyelvtervező dolga többek közt épp az, hogy ezek közt finom összhangot teremtsen. Én megtettem a tőlem tellő legjobbat. Neked ez nem tetszik, te másféle összhang mellett döntöttél volna ha te tervezel nyelvet, más szempontoknak nagyobb előnyt biztosítottál volna, egyéb szempontok rovására. Most mit csináljak, megint csak azt mondhatom, ízlés kérdése ez is...

Miért ennyire kiemelt szerepű nálad a string?

Egyszerűen nálam mindennek az az alapja. Egy univerzális objektum. Ezt vélhetően azért nem érted, mert a string szó hallatán te okvetlenül és kizárólag olyan izémizére gondolsz, ami olvasható karaktereket tárol. Az én stringem azonban ennél jóval általánosabb valami. Eleve nem is bájtok az egységei, de még csak nem is UNICODE értékek, hanem egy unionok, mely unionok 8 bájtból állnak. Nyilván, ez őrületes pocséklás ha csak ASCII szöveget tárolunk ilyen stringben, ugyanakkor azonban magasan megéri több szempont miatt. Egy ilyen string amikor szöveget tárol, az alsó 4 bájton tárolja az UNICODE értéket, a felső 4 bájt kihasználatlan. Viszont épp emiatt mert 8 bájtos egységekből áll, tetszőleges adatot képes tárolni, bármit, még pointert is... ÉS EZ A LÉNYEG!

Így ugyanis megtehetem hogy nálam minden memóriafoglalás VÉGSŐ SORON egy stringet ad vissza. (mármint a stringre mutató pointert). A lefoglalt terület elején amúgy egy elég bonyolult struktúra található, a stringleíró, a string belső adminisztrációs céljaira...

A stringtömbjeim maguk is tök közönséges stringek, épp csak ekkor nem karakterek vannak bennük hanem pointerek: mindegyik pointer egy „igazi” stringre mutat, olyan stringre amiben már valóban karakterek találhatóak... Egy stringtömbben tehát amiben van mondjuk 10 string, abban igazából csak 10 pointer van nálam... De ettől még TECHNIKAI ÉRTELEMBEN ez a stringtömb nálam egy kutyaközönséges string: épp csak nem karaktereket tárol. De lekérdezhetem a hosszát, mint bármely más közönséges stringét, ezesetben természetesen azt kapom meg hány pointer van benne, ami ugyanazt a számot jelenti, hány sora van a stringtömbömnek...

Tudod, rájöttem, igazából egyetlen adatstruktúra létezik csak a számítástechnikában, s ez a TÖMB. Minden más ennek a csicsázása, s kisebb-nagyobb variálása csupán.

Nálam még a veremtár is stringből van megalkotva. A stringjeim tárolják nemcsak az aktuális hosszukat, de a maximális hosszukat is, azaz hogy épp mennyi memória van nekik lefoglalva. Ez nagyon jó, gyorsítja a futást, mert ha a stringnek új tartalmat adok, ami hosszabb mint a régi tartalom, akkor se feltétlenül kell reallokálni abban az esetben ha az új terület amit igényel e maximális hossznál kisebb...

Ez teszi lehetővé azt is hogy a stringjeim veremtárként viselkedjenek. Az a belső változó ami az aktuális hosszat jelzi, kiválóan használható stackpointernek. Hiszen mindig arra az elemre mutat ami a következő szabad elem a stringben, annak a végén...A közvetlenül ez alatti elem meg - nyugodtan mondhatjuk - „a stack tetején” van...

Szóval temérdek előnye van e stringjeimnek, egyetlen hátrányuk hogy memóriazabálóak, mert minden elemre elpocsékolnak 8 bájtot, akkor is ha az érték maga csak 1 bájtot igényelne. De a RAM manapság már olcsó...

Nálam tehát, a Periben, MINDEN e stringekre épül. Minden, kivétel nélkül. Szerves része a nyelvemnek, annyira mint a Perlben a reguláris kifejezések. Sőt még sokkal inkább.