0 like 1 dislike

Tudják rólam néhányan talán, hogy jóideje saját programnyelven dolgozom. (Szkriptnyelv). Csináltam is eddig már belőle több változatot, s egyre jobbak. (szerintem). A legutóbbi változattal már kb teljesen elégedett vagyok, de ilyesmit sosem lehet „befejezni”, csak „abbahagyni”, mert állandóan bővíthető ugyebár mindenféle ficsőrökkel.
Na most, épp azon gondolkodtam, hogy e legutolsó változatba is beteszem a "switch" szerkezetet, amit tudott az előző nyelvem is, de aztán azon kezdtem el töprengeni, hogy:

—egyáltalán mennyire szükséges egy efféle szerkezet egy nyelvbe, hiszen végeredményben minden case-ág csak egy rejtett if+goto.
—oké, majd beépítem ennek ellenére e szerkezetet, csak mert hogy legyen, miért is ne. De nem lehetne-e kitalálni helyette valami sokkal jobbat?

Na most e legutóbbi miatt írom e postot, hátha van valakinek valami olyan ötlete, hatlete, mi lenne az a vezérlési szerkezet, ami nagyjából olyasmi mint a (C/C++ nyelvből ismert) switch, de annál jobb, hatékonyabban alkalmazható, kényelmesebb, vagy akármiért is de neki jobban tetszene!

Bevallom, nem szoktam tanácsokat kérni a nyelvem milyenségéhez, mert eleve azt élvezem ha pont olyan, amilyennek látni szeretném, de e switch kérdésben bizonytalan vagyok. (És sietve közlöm, NEM azt várom el, hogy valaki segítsen leprogramozni! Istenőrizz! Kizárólag ötletelést szeretnék hallani a szintaxissal kapcsolatban!)

Ugyanis, ha a C/C++ szerinti switch szerkezetet valósítanám meg, hát azzal kapcsolatban averzióim vannak. Nem tetszik benne például, hogy ha nincs breakkel lezárva egy ág, akkor a végrehajtás „átcsorog” a következő ágra. Az se tetszik, hogy csak előre meghatározott skalár értékek szerepelhetnek a case paramétereiben, s nem tetszőleges aritmetikai kifejezések. Másrészt viszont, ha ott tetszőleges aritmetikai kifejezést engedek meg, a preprocesszor nem képes belőle ugrótáblát kreálni, ami még nem is olyan szörnyű baj, attól eltekintve hogy a végrehajtás lassabb. Igenám, de akkor meg talán jó ötlet lenne kitalálni egy egészen újfajta „vezérlési szerkezetet”, ami olyasmire volna jó, hogy könnyű nyelvi eszközt biztosítsunk UGRÓTÁBLÁK létrehozására! (mint a C nyelvben a „függvények pointereit tartalmazó tömbök” vagy valami hasonló).

Sietve közlöm, efféle pointertömbök a nyelvem jelenlegi fejlettségi szintjén is létrehozhatóak és alkalmazhatóak már, csak épp nem az előfeldolgozás szakaszában, hanem runtime, ami bár cseppet se baj hogy lehetséges, de nem mindig kényelmes. Én azonban most arra gondoltam, miként lehetne effélének a legenerálásához már magát a preprocesszort (lényegében a tokenizáló részt) felhasználni, de valami „human readable” szintaxissal. Természetesen én is képes vagyok mindenféle szintaxist kitalálni effélére, ez a legkönnyebb az egészben, a baj ezzel csak az, hogy kezdem kiismerni magamat e téren, s többnyire az van, hogy amit kitalálok elsőnek, az majdnem mindig olyan izé... szóval hajmeresztő, na. De annyira, hogy leprogramozom, működik, örülök neki, aztán később kezdek egyre elégedetlenebb lenni vele magam is, s ahogy egyre több ilyesmi gyűlik össze a nyelvemben, végül kidobom az egészet, s írok egy teljesen új nyelvet.

És ezzel nincs is baj mert a nyelveim egyre jobbak, de e mostani már annyira tetszik, hogy inkább kikérem e részletkérdésben mások tanácsát, mert itt bizonytalan vagyok, s nem akarok olyasmit megcsinálni, amiben magam se vagyok biztos. Hm, attól tartok ez így túl homályos, de nem tudom jobban megmagyarázni.

Továbbá, amikor ezen morfondíroztam, megfordult a fejemben olyasmi, hogy egy efféle ugrótábla már egy aránylag bonyolult felépítésű osztálynak is tekinthető talán, ami azonban nem runtime generálódik. Ez meg ha ilyesmit beépítek a nyelvbe, tulajdonképpen annak az előszobája, hogy OOP képességekkel ruházom fel, bár az még amúgy nincs benne. Gondolkodtam rajta, de mindig oda lyukadtam ki, hogy arra (OOP-ra) nekem igazából nincs is olyan nagyon szükségem, sok más dolog jobban érdekel. Most azonban lehet hogy mégis jó lenne, ha már úgyis ugrótáblákat akarok legeneráltatni?

Szóval, bizonytalan vagyok ezekben a kérdésekben hogy merrefelé haladjak a tervezésben.

A nyelvem amúgy még nem letölthető (bár nálam már működik), egyelőre még nem is tervezem közzétenni (jelenleg írom a dokumentációt is), de pár dolog már olvasható róla azért itt:
http://fossilcodger.blogspot.com/

De a link nem amiatt szerepel, mintha okvetlenül oda várnám az ötleteket, jöhetnek ide a veremcserére is, csak az infók meg pár példaprogram ott nézhető meg.

De most kifejezetten tényleg csak az ugrótáblák érdekelnek, ki miként képzelné el annak a szintaxisát, illetve hogy a switch-nek miféle szabályai legyenek, stb.

Tudom, ez is hosszú post volt, bocs. De nálam az szakmai ártalom (író vagyok), meg különben is, ez bonyolult téma.

kérdezve Ápr 23, 2016 C / C++ kategóriában FossilCodger (61 pont) által

1 válasz

1 like 0 dislike
Legjobb válasz

Szia,

  1. tényleg próbáld meg tömören a lényeget, mert ebből a halomból iszonyat nehéz kihámozni, hogy mit szeretnél.
  2. nézd meg pl.: a javascript switch case szerkezetét, ott lehetőséget van szabadabban is meghatározni egy case által vizsgált elem értékét.

Pl.:
http://stackoverflow.com/questions/18229790/switch-combining-cases-string-regex-and-number

A switch case nem véletlenül lett kitalálva. Kifejezetten konkrét értékek vizsgálatára való, egy menüszerkezethez, parancssori attribútumokhoz, stb. Van létjogosultsága, máskülönben tele lenne else if ágakkal a programunk (ami olvashatatlanná tenné a kódot). Emellett a break is fontos szerepet játszik, mert előfordulhat olyan eset, amikor nem célunk kilépni, hanem további ágakat is szeretnénk vizsgálni. Nem haszontalan.

Ettől függetlenül ez a Te nyelved, azt teszel vele, amit szeretnél, viszont ha ezt nem csak magadnak akarod a jövőben fejleszteni, akkor hamar fel fog merülni az igény erre is a többi felhasználó részéről.

megválaszolva Ápr 23, 2016 dacr (92 pont) által
kiválasztott Ápr 23, 2016 FossilCodger által

Na de épp amiatt lett ilyen hosszú, mert magam se tudom még hogy mit szeretnék. Az rendben van hogy jó dolog ha tudja a switchet, csak nem vagyok benne biztos, pontosan milyen formában. Illetve, hogy kéne-e mellé valami ugrótábla-létrehozást segítő akármi is. És ha igen, annak is milyen legyen a formája.

pf. Tessék, az első öt bekezdésed megfogalmazva.

Sziasztok! Dolgozom egy programnyelven, s gondolkozom rajta, hogy a swicth-case szerkezetet megvalósítsam benne. Vagy a C-s stílusú megoldás irányában mennék el, vagy egy teljesen új dolgot szeretnék kitalálni. A C-s megoldás hátrányai, szerintem ezek: (lista)

Javaslom elolvasársra a Stackoverflow Hogyan kérdezzünk írását, s a többi bevezető szöveget ott.

Egy ilyen oldalon kifejezetten nem illik az élettörténetedet is elmesélni (például, hogy milyen fázisban állsz a nyelveddel, mikor lesz letölthető, hol lesz elérhető, épp dokumentációt írsz). Itt röviden felvázolsz egy problémát, s arra válaszolunk. De ebben minden van, csak rövid probléma-felvázolás nincs.

Oké. Nagyon szépen köszönöm Nagy Vilmos segítőkész válaszát. Azt hiszem itt be is fejezhetjük a dolgot. Látom megjelenik itt is a tipikus „magyar hozzáállás”, hogy ha valaki elkezd valamit csinálni, nem lehet egy picit se kötetlenül beszélgetni egy őt érdeklő részletkérdésről, mert jönnek a kioktatások hogy így illik meg úgy illik, amúgy meg nem. Nem tudom felfogni, akit idegesít a stílusom (amiben egyetlen sértő szó se volt!), miért nem tudja egyszerűen azt tenni hogy nem olvassa amit írok és kész.
A HUP-on is ez volt... Persze sejthettem volna hogy nagyjából ide is ugyanazok az arcok fognak járni. Semmi vész, túlélem.

Köszönöm hogy eddig itt lehettem. Tisztelettel megkérem azt, akinek van ehhez jogosultsága, törölje a regisztrációmat. Sajnos, ugyanis ha nem teszi most, akkor megteszi majd később, de az rosszabb lesz, mert olyan körülmények közt kerül majd sor rá, ami miatt a HUP-ról is bannolva lettem. Elfogy a cérna, beszólok, s jön a ban. Felesleges ezt megvárni.

Köszi előre is.

Béke veletek.

A Veremcsere a Refaktor Magazinhoz kapcsolódó, barátságos kérdezz-felelek oldal, ahol felteheted a webfejlesztéssel és üzemeltetéssel kapcsolatos kérdésedet.

A részletekért olvasd el az üdvözlő postunkat!
Az oldal valamennyi tartalma a Creative Commons Attribution NonCommercial ShareAlike 3.0 licenc alatt érhető el.

Kapcsolódó kérdések

67 kérdés
142 válasz
354 hozzászólás
113 felhasználó