Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Πιο πέρα από το strong-typing: Strong dimensioning

Îåêßíçóå áðü ôï ìÝëïò Δημήτρης Σουφλής. Τελευταία δημοσίευση από το μέλος Δημήτρης Σουφλής στις 30-08-2007, 12:18. Υπάρχουν 0 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  30-08-2007, 12:18 34607

    Πιο πέρα από το strong-typing: Strong dimensioning

    Στο Πολυτεχνείο χρειάστηκε σε μόνιμη βάση να φτιάχνουμε προγράμματα που έκαναν υπολογισμούς με φυσικά μεγέθη. Η μόνη "παραδεκτή" γλώσσα ήταν Fortran 77 (ναι, η 90 δεν είχε βγει ακόμα) και η Αριθμητική Ανάλυση έδινε και έπαιρνε. Δεν ξέρω πόσοι από εσάς, στον επαγγελματικό στίβο πλέον, έχετε τομείς εφαρμογής που έχουν σχέση με φυσικά μεγέθη (υποπτεύομαι λίγοι) αλλά πρόσφατα έτυχε να ασχοληθώ με ένα έργο που έκανε ακριβώς αυτό, και με γύρισε πίσω στο χρόνο.

    Αν τα προγράμματά σας αφορούν υπολογισμούς με φυσικά μεγέθη, έχετε παρατηρήσει ότι αφαιρώντας τη φυσική διάσταση και κρατώντας μόνο την αριθμητική τιμή, είναι λίγο σα να περνάς από μιά γλώσσα που κάνει compile-time type checking σε μία που δεν κάνει; Χειρότερο, όταν δεν έχεις compilation με type-checking, τουλάχιστον θα γίνει runtime type checking. Ενώ, όταν αφαιρέσεις τη φυσική διάσταση και καταλήξεις να πολλαπλασιάζεις μήκος με χρόνο και κάνεις ανάθεση σε ηλεκτρική ένταση, δε θα το καταλάβεις παρά μόνο δύσκολα. Είναι κάτι σα να κάνεις type erasure σε generics (βλ. δημοσίευση Palladin), dimension-erasure.

    Κάποια στιγμή λοιπόν σκέφτηκα πώς θα μπορούσε να διορθωθεί αυτό και βγήκε, στην ουσία, ένα μικρό C++ template των λίγων γραμμών που προσθέτει τις φυσικές διαστάσεις σαν αριθμητικά ορίσματα του template, και ορίζει τις πράξεις να γυρίζουν το ίδιο template με τις κατάληλες τιμές για την κάθε διάσταση.

    Μόνο που στην C# και στη Java, δεν υπάρχουν αριθμητικά ορίσματα στα Generics (αλλά ούτε και στην C++ του .net υπάρχουν στα template ή στα generics, χρειάζεται standard C++). Έτσι έφτιαξα μία λύση με code generation η οποία έχει το μειονέκτημα ότι περιορίζεις τεχνητά το εύρος των τιμών που υποστηρίζεται για κάθε διάσταση και, βέβαια, οι πράξεις ορίζονται μόνο μέσα σε αυτό το εύρος.  Η λύση μου βρίσκεται στο: http://dimenso.sourceforge.net

    Παρόλο που είναι μια απλή ιδέα, μου αρέσει να τη σκέφτομαι σαν ένα μικρό DSL για αριθμητικούς υπολογισμούς physics-aware, ειδικά αφού τα IDE  (VS, IntelliJ) κάνουν type check την ώρα που γράφεις.

    --
    D. Souflis
    "Reality is that which, when you stop believing in it, doesn't go away" P. K. D.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems