c++ expression evaluation

Giorgos Keramidas keramida at ceid.upatras.gr
Wed Jan 28 15:56:57 EET 2009


On Tue, 27 Jan 2009 16:53:32 +0200, Theodore Lytras <thlytras at gmail.com> wrote:
> Χαιρετώ τη λίστα!
> Θα ήθελα να ρωτήσω το εξής:
>
> H PHP έχει την πολύ χρήσιμη συνάρτηση eval(), η οποία δέχεται ένα
> string και το εκτελεί σαν κώδικα[1].
>
> Υπάρχει κάτι τέτοιο για C++?
> Κάποια ρουτίνα σε κάποια βιβλιοθήκη π.χ. που να της δίνω ένα string
> και να μου "εκτελεί" τον κώδικα, ή έστω να μου κάνει evaluation ένα
> expression? (true ή false)
>
> Ή θα πρέπει να φτιάξω κάτι τελείως μόνος μου?
>
> Και στην περίπτωση αυτή, αυτό το κάτι θα είναι ένας... parser??? (αν
> ναι, κάποια tutorials πάνω στο αντικείμενο?)

Όχι δεν υπάρχει κάτι τέτοιο σε C++ εκτός κι αν ενσωματώσεις στο
πρόγραμμά σου ένα mini (εντάξει όχι και τόσο «mini») C++ compiler και
runtime.

> Δουλεύω σε C++/Qt4. Ο μακροπρόθεσμος στόχος μου θα είναι να δώσω
> κάποια δυνατότητα (πάρα πολύ απλού) scripting στην εφαρμογή μου[2].
> Αναρρωτιέμαι λοιπόν ποιά είναι η κατεύθυνση που πρέπει να ακολουθήσω
> για να το πετύχω αυτό.

Μη χρησιμοποιήσεις C++ scripting.  Υπάρχουν πολύ καλύτερες γλώσσες για
embedded scripting support, όπως οι:

  * Python (η ίδια η Python λέει στο documentation της πώς μπορείς να
    ενσωματώσεις ένα mini-interpreter στο εκτελέσιμό σου, ή ακόμα και
    πώς να γράψεις ΚΥΡΙΩΣ σε Python με hooks σε external C++ κώδικα για
    ότι χρειάζεται πιο πολλά).

  * Lisp ή Scheme.  Η Lisp είναι από τις πιο δυναμικές & ευέλικτες
    γλώσσες και με την SBCL, CMUCL, CLISP ή ECL (embeddable common lisp)
    μπορείς να καλέσεις Lisp από C ή ανάποδα.  Η Scheme είναι μικρή σε
    μέγεθος και μπορεί άνετα να ενσωματωθεί χωρίς τεράστιο bloat.  Και
    οι δύο υποστηρίζουν δυναμικό evaluation κώδικα, external linkage,
    macros, runtime compiling, κλπ.

Όλες αυτές υπάρχουν σε μορφή shared library, και δίνουν τη δυνατότητα να
κάνεις δυναμικό evaluation από runtime generated κώδικα.  Επίσης έχουν
το ενδιαφέρον χαρακτηριστικό ότι κρατούν ένα interpreter & «environment»
μόνιμα στο background, οπότε κάθε φορά που εσύ τρέχεις ένα κομμάτι script
κώδικα μπορείς να επηρεάσεις το state του υπόλοιπου scripting environment.



More information about the Linux-greek-users mailing list