2022. január hónap bejegyzései

Programnyelvek és típusok

A Debra programnyelv tervezése közben természetesen előkerült a talán legfontosabb tervezési kérdés: szigorúan típusos, vagy dinamikus legyen a nyelv, esetleg a kettő keveréke? Erről már írtam korábban többször is, most újra összefoglalom a legfontosabb tudnivalókat.

Kétféle programnyelv van: a szigorúan típusos és a dinamikus típusos. Esetleg olyan megoldás is lehet, hogy az egyik típusba tartozó nyelv közeledni kezd a másikhoz és kevert nyelvi konstrukciókat alkalmaz (ilyen megoldás a „dynamic” típus bevezetése a C# nyelvbe).

Szigorúan típusos: deklarálni kell a változók típusát, vagy explicit módon vagy értékadással, ilyenkor az értékből derül ki a típus (nem egyértelműség esetén utótagokkal segíthetünk (L, F, … a C#-ban). Az osztályok mezői is szigorúan deklaráltak. A legfontosabb megkötés az, hogy a változó típusa nem is változhat, a változó élettartama idejére ugyanaz marad, más értéktípust nem rendelhetünk hozzá (kivétel float = int, string = char).

Az ilyen nyelvekben a függvény, eljárás definíciókban is meg kell adni a formális paraméterek típusát, függvények esetében a visszatérési érték típusát is. Ez nehézkesnek tűnhet a dinamikus nyelvekhez képest, de amikor többféle argumentumlistával rendelkező, ugyanolyan nevű függvényekről, eljárásokról van szó, a szigorú típusosság segíti a fordítót abban, hogy kiválassza a legjobban illeszkedő függvényt.

A dinamikus nyelvek legnagyobb előnye, hogy menet közben változhat egy-egy változó típusa, értékadásonként, és nem kell ezt eldönteni a definiálásnál, azaz kevesebb kódot kell írni, a kód rövidebb, áttekinthetőbb lesz. Ugyanakkor ez hátrány is lehet, amikor felüldefiniált (túlterhelt) függvényeket szeretnénk írni, ezt ugyanis dinamikus nyelv esetében nem tehetjük meg, csak akkor, ha különbözik az azonos nevű függvények argumentumszáma. Azonos nevű, egyenlő számú formális paraméterrel rendelkező függvények közül, a fordító nem tud választani, a különböző típusú paramétereket a függvény kódjában, futási időben kell megoldanunk. Egy alternatíva lehet, ha segítjük a fordítót, és adunk típust a formális paramétereknek, de ebben az esetben is futási időben dől el, hogy melyik függvény fog lefutni. Dinamikus nyelvek esetében úgy tűnik, a legjobb megoldás, ha az azonos nevű, azonos számú paraméterrel rendelkező függvények esetében a függvények nevében elhelyezünk valamilyen, az argumentumok típusára utaló jelzést, így a fordító fordítási időben is tud választani az azonos nevű függvények közül.

A legfontosabb különbség a kétféle nyelv között az, hogy szigorúan típusos nyelveknél a típus összeférhetetlenségi hibák már a fordítási időben kiderülnek, a dinamikus nyelveknél ezek a hibák a futás közben jönnek csak elő. Azaz, dinamikus nyelven sokkal könnyebb a programírás, de sokkal nehezebb a hibakeresés. Minden értékadás, függvényhívás egy-egy potenciális hibaforrás, statikus nyelveknél, ez mind előkerül a fordításkor.

Külön meg kell említenünk a tömbök esetét: statikus nyelveknél meg kell mondanunk, hogy a tömb milyen típusú elemeket tartalmaz, és minden tömb csak azonos típusú elemeket tartalmazhat. Dinamikus nyelveknél egy-egy tömb, különböző típusú elemeket is tartalmazhat ugyanabban a tömbben, ami jól jöhet, ha adatbázis rekordokat akarunk beolvasni gyorsan és egyszerűen egy kétdimenziós tömbbe, ahol a sorok olyan tömbök, amiknek az elemei különböző típusúak, az adatbázis egyes mezőinek megfelelően. A tömb feldolgozása viszont futási időben lassabb lehet, és a típusok egyeztetése futási hibákat okozhat a legváratlanabb helyeken.

Statikus nyelvekben is lehet olyan tömböket készíteni, amiknek nem azonos típusúak az elemei, de ekkor elveszítjük a szigorú típusosság minden előnyét.

Foglaljuk most össze, a kétféle nyelv tulajdonságait, különös tekintettel arra, hogyan lehet a kétféle megközelítést keverni, ezzel rugalmasabb nyelvet létrehozni.

Statikus nyelvek:

– minden változónak és függvény argumentumnak definiálni kell a típusát

– könnyen megvalósítható a függvény felüldefiniálás, az azonos nevű függvények közül a fordító választja ki a megfelelőt

– a tömbök csak azonos típusú elemeket tartalmazhatnak, a típust meg kell adni a tömb definiálásánál

– lassabb a kód írása, és az nagyobb is, nehezebben olvasható

– a típusegyezőségi hibák már fordítási időben kiderülnek, de a fordítás lassabb

– jóval kevesebb hiba fordulhat elő futási időben, egyszerűbb a hibakeresés, a futás gyorsabb

– akkor érdemes ilyen nyelvet használni, ha jól definiált a környezet, és a programot sokáig szeretnénk használni

Hogyan lehet dinamikus elemeket bevezetni: a legegyszerűbb, ha bevezetünk egy olyan típust, ami éppen azt jelzi, hogy az ilyen változó bármilyen típusú értéket tartalmazhat (ilyen a „dynamic” is) . A függvények is kaphatnak ilyen argumentumokat, és a tömbök is lehetnek ilyen típusúak, azaz az elemeik bármilyen típusú értéket felvehetnek. Természetesen ezzel elveszítünk minden előnyt, amit a statikus nyelvek biztosítanak, és minden típusellenőrzési művelet, futási időre marad. Nagyon nagy előnye ennek a módszernek, hogy csak akkor vesszük elő, ha tényleg szükség van rá. A fordítóban benne kell lenni a képességnek az ilyen kód kezelésére, de ha nem használjuk, a lefordított programban nem lesznek váratlan típus-kompatibilitási hibák, és a futás is gyors lesz.

Dinamikus nyelvek:

– minden változónak és függvény argumentumnak bármilyen típusú értéke lehet

– a függvény felüldefiniálás csak a különböző argumentumszámú függvények esetében lehetséges, egyébként a névben szerepeltetni kell valamilyen, az argumentumtípusra utaló megkülönböztető jelzést

– a tömbök különböző típusú elemeket is tartalmazhatnak ugyanabban a tömbben is

– gyorsabb a kód írása, az rövidebb, könnyebben olvasható

– a típusegyezőségi hibák csak futási időben derülhetnek ki, a fordítás gyorsabb, de a futás sokkal lassabb

– jóval több hiba fordulhat elő futási időben, nehezebb a hibakeresés

– akkor érdemes ilyen nyelvet használni, ha rugalmas a környezet, és a programot csak alkalomszerűen, esetleg csak egyszer szeretnénk futtatni

Hogyan lehet statikus elemeket bevezetni: a fordítottját kell tennünk annak, amit a statikus nyelveknél elmondtunk. Ha nem adunk meg típust, marad a dinamikus működés, ha a definiálásnál, a függvény argumentumok megadásánál típusnevet is szerepeltetünk, akkor a fordító már tudja ellenőrizni a típus-kompatibilitást fordítási időben is. Ha egy tömbnek határozott típust adunk, akkor a tömb csak ilyen elemeket tartalmazhat. Ha a függvény argumentumok határozott típusúak, akkor máris lehetséges az egyértelmű függvény felülírás.

Következtetés: mindkét típusú programnyelv bővíthető olyan eszközökkel, amelyekkel gyakorlatilag egyenértékű nyelvek hozhatók létre. Ha az elsődleges cél a gyors fejlesztés, akkor legyen a nyelv dinamikus, és egészítsük ki statikus elemekkel. Ha a cél a precízebb, kevesebb futási hibával fenyegető nyelv készítése, akkor az legyen statikus, és tegyünk később bele dinamikus elemeket. Nincs tehát kibékíthetetlen ellentét a kétféle nyelv között.

A Debra nyelv megvalósításához a gyorsabb haladás érdekében a dinamikus változatot fogom használni, ezzel gyorsan tudunk egyszer használatos programokat, prototípusokat, kísérleti programokat készíteni. Majd jöhetnek a statikus definíciók, amivel végül egy teljes értékű nyelv lehet a Debra, ami így már rendelkezni fog mindkét típus előnyeivel, és kiküszöbölheti a hátrányokat is, a programozó dönthet, hogy milyen módszerrel programoz, az eszköz tartalmazni fogja mindkét módszerhez az eszközöket.

Ezzel olyan nyelv jöhet létre, ami egyszerre rugalmas, gyors fejlesztésre alkalmas eszköz, másrészt precíz, hibamentes programozásra is alkalmas lesz.

Athena fotója a Pexels oldaláról

Miért jó az ingyenes könyvkiadás?

A kérdés valójában az elektronikus eszközökön olvasható könyvek, az e-könyvek esetében merülhet fel, a nyomtatott könyvek kiadása és terjesztése jelentős anyagi ráfordítással jár, és komoly terjesztői hálózat nélkül nem is működik. Ez esetben ingyenes könyvkiadással csak akkor érdemes foglalkozni, ha rendelkezünk az anyagi erőforrásokkal, és a terjesztéshez is van eszközünk.

Az e-könyvek esete egészen más. Az elkészítés csak időbe kerül, elég hozzá egy szövegszerkesztő, egy PDF konvertáló, és egy epub formátumot előállítani képes program. Ilyen programok ingyen és legálisan elérhetőek az Interneten. Sőt, az e-könyv készítésről is van már ingyenesen olvasható e-könyv, így a gyakorlati megvalósítással sem lehet problémánk, ezek a könyvek részletesen bemutatják az e-könyv készítés menetét.

Természetesen egy író, vagy költő először nem arról álmodik, hogy majd ingyenes könyveket fog kiadni, hanem azt gondolja, majd csak talál olyan kiadót, aki átvállalja a nyomtatás, tárolás, terjesztés költségeit, cserébe a haszon nagy részét megkapja, de azért a szerzőnek is marad annyi bevétele, hogy neki is megérje ez a fajta könyvkiadás.

Van aztán a másik módszer, a szerzői kiadás, és ez az, ami nem működik, legalábbis az én esetemben nem vált be. Szerződtem egy kiadóval, aki megjelentette az e-könyvemet, ami a legnagyobb meglepetésemre nem fogyott egyáltalán. Gondoltam, egy print-on-demand kiadás hátha jobban beválik, ilyenkor csak akkor nyomtatják ki a könyvet, ha vásárló jelentkezik.

Az e-könyv kiadása nem került pénzbe, egy akció volt éppen a kiadónál, ezt használtam ki. Más volt a helyzet a print-on-demand verzióval, itt már fizetnem kellett, de az összeg nem volt megterhelő egyáltalán, vállalni tudtam, abban a reményben, hogy a könyvemet végre venni fogják. Ezután fizettem még reklámújságban megjelenésért is, de ez sem hozott vásárlókat.

Megkerestem a kiadót, hogy mi lehet a probléma, és próbáltam rájönni, hogy ők miért nem reklámozzák a könyvet, hiszen az eladások révén ők is részesednének a haszonból. Megtudtam, hogy a szerzői kiadás lényege, hogy mindent a szerzőnek kell vállalnia, legalábbis, ami a reklámozást, népszerűsítést illeti. Ők annyit tesznek, hogy néha előállnak egy-egy újabb fizetős reklámakcióval, ami persze csak viszi a pénzt, de vásárlót nem hoz.

Aztán a LinkedIn-en keresztül is próbáltam segítséget kapni, a legtöbb, amit elértem, hogy konzultálhattam egy könyvkiadással is foglalkozó „brand-építő”-vel, aki sok mindennel bíztatott (ami pénzbe is került), de konkrét eredmény nélkül. Próbáltam a közben kialakított LinkedIn hálózatomon keresztül is, az ismerősökhöz eljuttatott könyvajánlókkal, még válaszokat sem kaptam.

Az utolsó csepp az volt, amikor a kiadóval folytatott vitám közben, egy email-ben ajánlottak egy web-oldalt, ahol egy „szakértő” elmélkedéseit lehetett olvasni, és podcast anyagokat is lehetett volna hallgatni. Eddig már nem jutottam el, ugyanis az oldal tetején ezt olvastam: „Azt javaslom minden könyvkiadónak, hogy elsőkönyves szerzővel ne foglalkozzon, …”.

Ez egyrészt nagyon rosszul esett, másrészt arra gondoltam, ha mindenki így gondolkodott volna a könyvnyomtatás megszületése óta, akkor soha nem adtak volna ki egyetlen könyvet sem.

Persze nagyon fontos megjegyezni, hogy a science-fiction novelláskötet, amit írtam, nem könnyű olvasmány, szűk réteghez szól, elsősorban elgondolkodtató, filozofikus, mint szórakoztató. Akik a fantasy könyvekhez, meg a szuperhősös filmekhez szoktak, azok nyilván nem az ilyen könyveket keresik. Mégis úgy éreztem, nekem is kell, hogy helyem legyen a könyvpiacon, ha nem is a több ezer példányos sikerkönyvek, de legalább a néhány száz példányos igényes művek között.

Aztán a véletlen segített. Illetve, úgy is fogalmazhatnám, hogy természetfölötti segítséget kaptam. Otthonról dolgoztam majdnem másfél évig, és a szokásosnál több szabadidőm volt, így minden nap ráértem legalább egy félórát meditálni. Aztán láttam egy videót is az automatikus írásról, és rájöttem, hogy hát ezt én régebben aktívan műveltem is.

És elkezdtem az írást. És az automatikus írás nem novellákat hozott ki belőlem, ahogy régebben, hanem verseket. Elneveztem őket meditációs verseknek, mert úgy éreztem a rendszeres meditáció kialakított valami kapcsolatot közöttem és egy spirituális forrás között, szinte akadálytalanul, erőlködés nélkül írtam a verseket, volt úgy, hogy naponta nyolcat, tízet is megírtam.

Aztán jött újra a kiábrándulás. Elküldtem egy minta válogatást néhány embernek, akiről úgy gondoltam tetszeni fog nekik, és segíteni is tudnak a kiadást illetően. De megint csalódnom kellett.

És ekkor akadt a kezembe egy ingyenes e-könyv az elektronikus könyvekről, és ebben a könyvben találkoztam először azzal a fogalommal, hogy „ingyenes e-könyv”. És ez a találkozás megvilágosító erejű volt.

Hiszen ha azt szeretném, hogy amit leírtam azt más is olvassa, mert szerintem az írásaim jók, akkor miért akarnék én ebből meggazdagodni? Ha a könyvkiadás eddig csak pénzköltéssel járt, hasznom nemigen volt belőle, akkor miért kell ezt erőltetni? Az ingyenes e-könyv kiadás, nem csak az olvasónak, hanem nekem is ingyenes!

Ekkor került a látókörömbe a Google Books, illetve a Google Play, ahonnan én is letöltöttem az e-könyvekről szóló e-könyvet, és rövid utánajárást követően már el is készült a szerzői oldalam, ahová feltöltöttem a meditációs versekből egy válogatást. Legnagyobb meglepetésemre néhány nap után elindultak a letöltések. Azt mondtam, ha 15 letöltés összejön, akkor már nagyon boldog leszek. Most már 800 felé közelít ez a szám, nemcsak Magyarországról, hanem külföldről is van már olvasóm, 6-8 országból. Volt olyan nap, amikor a Google Books ingyenes könyvek népszerűségi listáján a 25. voltam. Ezt már valódi sikerként éltem meg.

Aztán feltöltöttem egy science-fiction válogatást is, ez már kisebb siker lett, de itt is 100 felé tart a letöltések száma.

Aztán jött egy elég nagy csalódás, angolra fordítottam a science-fiction válogatást, feltöltöttem, és elvileg 66 országban lehetne angolul olvasni, mégsem töltötte le még senki, rajtam és egy új-zélandi ismerősömön kívül. Folyamatosan gondolkodom az okokon, egyelőre nincs magyarázat, hacsak az nem, hogy az angol nyelvű könyvek választéka nagyságrendekkel nagyobb a magyarul olvasható könyvekénél, és reklám nélkül valószínűleg elvész a kötet a rengetegben.

Összefoglalásként: a könyvkiadókon keresztül történő kiadás bizonytalan, sőt reménytelen, csak viszi a pénzt, de sem olvasót, sem bevételt nem hoz. Az ingyenes e-könyv kiadás nekem is ingyenes, nem csak az olvasónak. Nem kell rá költeni, igaz, nem is eredményez bevételt, de az igazat megvallva a munkám miatt ez most még jó is, mert jövedelemszerző tevékenységhez engedélyt kellene kérnem, ha ezt megkapnám (ami nem biztos), akkor jöhet az adószám, és a bevétel utáni adózás. Ez a probléma a könyvkiadóval kapcsolatban azért nem merült fel, mert ők egy számlán gyűjtenék a bevételemet, tehát azzal egyelőre nem kellett volna elszámolnom.

És ami a legfontosabb, minden egyes letöltéssel, egy emberrel több van a Földön, aki ismeri a nevemet, olvassa az írásaimat, és talán még tetszik is neki, amit írtam. És ki tudja, egy közülük, hátha előáll azzal a javaslattal, hogy kiadná valamelyik könyvemet.

Addig pedig nincs más dolgom, mint új verseket és novellákat írni, esetleg egy tanulmánykötet is jöhet még a tudomány mai problémáiról, és feltölteni őket minél több helyre, és tiszta szívből örülni annak, ha újra és újra növekszik valamelyik letöltési szám.

Ha valaki tényleg szereti azt, amit ír, a pénznél sokkal többet ér az, ha minél több olvasóhoz eljutnak a gondolatai. És ezért érdemes ingyenes e-könyvet kiadni.

Utóirat: a 2021-es letöltési számok így alakultak:

  • Az érkező: 382
  • Lander: 4
  • Meditációs versek: 1446 (Magyarország: 1300, a külföldi országok között Románia vezet, 93 letöltéssel)

És ami a legnagyobb meglepetés, az idei eddigi 8 nap alatt 62 letöltés történt, ezek között a legjobban annak a Lander letöltésnek örülök, ami révén Ausztrália is felkerült az országok közé, ahol olvassák az írásaimat. Talán az angol nyelvű könyvem is elindul a saját útjára.

A „Meditációs versek”-et néhány olvasó még osztályozta is, egy szöveges értékelés is érkezett, nem éppen pozitív, de mivel tudom, hogy a versek sem mindenkihez szólnak, nem is várom el, hogy mindenki szeresse őket. De az is értékes, ha valaki rászánja az idejét, akár egy negatív vélemény megírására is, mert ez azt jelenti, hogy elgondolkodott a verseken, valamilyen szinten megérintették a versek. Lehet, hogy a versek dolgoznak majd benne tovább, és talán később újra előveszi, és kezdi érteni őket.

A letöltési linkek:

Meditációs versek: https://play.google.com/store/books/details/Sz%C5%B1cs_J%C3%A1nos_Medit%C3%A1ci%C3%B3s_versek?id=6LEmEAAAQBAJ

Az érkező: https://play.google.com/store/books/details/Sz%C5%B1cs_J%C3%A1nos_Az_%C3%A9rkez%C5%91?id=JVctEAAAQBAJ

Lander: https://play.google.com/store/books/details/Sz%C5%B1cs_J%C3%A1nos_Lander?id=8UY5EAAAQBAJ