Milyen nyelv kéne ide? Kell egyáltalán?

A megoldandó probléma:
Adott egy nagyon primitív scriptnyelv. Ez a nyelv magában még egy stringet sem tud kezelni, viszont C++-ból ki tudom terjeszteni új függvényekkel.

Így tudok stringeket kezelni, de a manipulálásuk eléggé nehézkes, mert minden műveletre kell egy C++ függvényt írni, kettőt összefűzni külön kaland stb.

Arra gondoltam, hogy ne kelljen tíz sort gépelni, egy fejlettebb script nyelven leírok egy bizonyos transzformációt, azt átadom a C++ kódnak, ami azt végrehajtja és az eredményt visszadobja valahogy.

Valami ilyenre gondoltam, most pl. Pythonban:

StrPython "'%'.rstrip('.!?')" str

A % helyére a programom behelyettesítené a szöveget, aztán adja át az értelmezőnek (ami most a Python).

Tehát maga a kérdés: milyen nyelv legyen az egész alapja? Van erre valami célnyelv?

Szempontok (kb. fontossági sorrendben):
- Könnyen tanulható, használható (sed kizárva, és igen, tudom, hogy ez a hup.hu :) )
- Gyors (egyébként is erőforrásigényes játékról van szó)
- Rendesen dokumentált
- Legyen elég rendelkezésre álló függvény
- Legyen valamennyire biztonságos

Ami eddig megfordult a fejemben:

Perl: Nem ismerem annyira, de amit olvastam róla, az alapján itt jól jönne.

Python: Vannak benne függvények, meg elvetemülteknek lambda, de a használatához jobban bele kell mélyedni

Tcl: Ezt sem ismerem annyira, de eddig ez látszik a legjobbnak.

Valami javaslat?

Hozzászólások

Talán m4 re van szükséged ?

lua -t gyakran használnak hasonló helyeken.

Érdemes megnézni Boost::Spirit -et, vagy, C -vel szokásso flex,bison (lex,yacc) -ot, ha parsolhatnékod van.

m4 nem hiszem, hogy a célnak megfelelő lenne... mondjuk még leginkább Sherman verzió.
Nekem egysorosokra lenne szükségem, amiket triviális megírni.

Lua bonyolultabb dolgokhoz sokat használja a saját table rendszerét, aminek az ismerete nem igazán várható el attól, aki éppen elkezd komolyabban foglalkozni egy kb. C Preprocessor és BASIC között félúton álló scriptnyelvvel.

Eddig még mindig a Tcl vezet, utána a Lua.

De ha az sem jön, be, majd összekombinálok egy parsert meg egy C++ stringkezelő libraryt...

perl++ (eleg hatekony stringkezelo mechanizmusok + regexp.)

Végül elkezdtem Tcl-ben, kösz a javaslatokat. Van benne pár furcsa dolog (pl. az, hogy minden string), de jónak látszik a célra.

Jó a perl, a python, a ruby, a Tcl, a PHP.
Azt válaszd, amelyiket a legjobban ismered.

Két dologot nem értek csak :)

1 miért akarsz új scriptnyelvet írni, amikor bármelyiket használhatod a fentiek közül.
2 ha már új scriptnyelvet írsz, miért akarsz másik scriptnyelvet felhasználni hogy a függvényhívásait kiszolgáld, miért nem c.

Ha nem akarsz vele sokat melózni akkor a saját scriptnyelvben megírt scrptet inkább fordítsd át mondjuk python-ra, és úgy futtasd. Így olyan, mintha külön nyelv lenne, mégis profi és kipróbált cucc van alatta.

Personal favorit: lua. Van hozzá tolua/tolua++/luabind, amikkel fájdalommentes az integráció. (És akkor még a swig-ről nem is beszéltünk.)

A vacak scriptnyelvet nem én írtam, hanem bele van kódolva a programba, ami zárt forrású. Én csak egy mások által reverse engineerelt API-féleséget használok, szóval az marad.

Tcl nem ment, mert a linker ugyan nem panaszkodott, de futáskor amikor Tcl-es függényt hívok, elszáll, szóval gondolom valami nem stimmel, és nem érzem úgy, hogy van egy szabad hetem megtalálni a hibát...

A következő a listán a Lua, ezzel már tettem egy próbát, de a luabind-nek kellett volna Boost részeket fordítani, ami Windows környezetben egy rémálom, szóval jön a toLua++