rousso wrote: |
Σχετικά με το αναφερόμενο post:
To for each loop σου ήταν γραμμένο σε VB.NET. Εάν η γλώσσα δεν υποστήριζε dynamic typing θα απαιτούσε να έχεις δηλώσει τον τύπο του item (for each <item> in <collection>). Αν το απαιτούσε φυσικά και δεν θα σου διέφευγε ούτε επίτηδες ούτε κατά λάθος ![Smile [:)]](/cs/emoticons/emotion-1.gif)
|
|
Χμμμ... Ή εγώ δεν καταλαβαίνω τι θέλεις να πεις, ή δεν κατάλαβες κάτι στο παραπάνω post... ![Smile [:)]](/cs/emoticons/emotion-1.gif)
Στη VB.NET το dynamic/static typing υποστηρίζεται από το statement "Option Strict On/Off" ενώ είναι υποχρεωτική η δήλωση των μεταβλητών κατά το statement "Option Explicit On/Off" (τα λέω αυτά γιατί απ'ότι κατάλαβα είσαι C# developer). Έτσι λοιπόν, το θέμα του post ήταν ότι εγώ απλά πάντοτε χρησιμοποιούσα το
Dim a as apple
For Each a In ApplesList...
αντί του in-line declaration: For Each a as apple In ApplesList...
Και να μην υποστήριζε η VB dynamic typing, δεν θα άλλαζε τίποτα καθώς ο τύπος πάντοτε απαιτείται να δηλώνεται.
rousso wrote: |
Σχετικά με το θέμα μας:
Συμφωνώ με το σκετπικό σου και κάπως έτσι είναι τα πράγματα. Προφανώς και χρειάζονται γλώσσες (ειδικά στους μη προγραμματιστές) που να αφαιρούν την "πολυπλοκότητα" που επιβάλει η "αυστηρότητα" του strong typing. Ακόμα και για τους προγραμματιστές είναι συχνά χρήσιμες. Απλά εγώ έχω συνηθίσει όταν αναφέρομαι σε προγραμματισμό να εννοώ compiled γλώσσες που φτιάχτηκαν για "πιο βαριές δουλειές" ας το πούμε. Το argument όμως τοποθετείται στον χώρο της ανάπτυξης συστημάτων. Όταν δηλαδή ξεκινάς να φτιάξεις μια εφαρμογή που θα καταλήξει να έχει πολλές χιλιάδες γραμμές κώδικά και η οποία θα κληθεί να ανταπεξέλθει σε ζήτηση από πολλούς ταυτόχρονους χρήστες, θα αναπτυχθεί από πολλούς developers κλπ, τότε σίγουρα απαιτείται μια "αυστηρότητα" και κάποιοι στοιχειώδεις bottom-line κανόνες οι οποίοι θα σε βοηθήσουν όχι μόνο να μην την γεμίσεις λάθη και παραλέιψεις, αλλά και να μπορείς να κάνεις αλλαγές μετά από ένα χρόνο (π.χ.) χωρίς να χρειάζεται να την ξαναδιαβάσεις όλη από την αρχή.
|
|
Εμ... Θα έπρεπε κι εσύ να βάλεις τα specifications εκ των προτέρων... Σου έδωσα δύο παραδείγματα και τα έκανες ...disqualified. Πάντως, όπως είδες, το είπα κι εγώ ότι σε enterprise/commercial development το dynamic typing συνεπάγεται περισσότερα προβλήματα απ'όσα λύνει, κύρια στο θέμα που έθιξες, αυτό της συντήρησης των εφαρμογών. Πάντως, δεν θα μπορούσα να τα πω καλύτερα από τον Διομήδη Σπινέλλη (αναφέρεται στη Java αλλά όλα αυτά ισχύουν και για το .NET): http://www.dmst.aueb.gr/dds/pubs/jrnl/2005-IEEESW-TotT/html/v22n3.html
rousso wrote: |
Η γνώμη μου σε σχέση με το XML/Relational integration στο CLR (αντίστοιχα και για το java runtime) δεν έχει να κάνει τόσο με το dynamic typing όσο με την δημιουργία μιας internetικής υποδομής αντίστοιχης με το DNS. Δηλαδή ένας συνδυασμός των πραγμάτων που ήδη ξέρουμε και χρησιμοποιούμε με αξιοποίηση των XML namespaces, των Web Services κλπ στην κατεύθυνση του να έχουν τα συστήματα πρόσβαση στον κατάλληλο κώδικα για την διαχείριση των κατάλληλων δεδομένων χωρίς να απαιτείται να κάνεις υποθέσεις πριν to compilation για το τι δομικές αλλαγές θα γίνουν στα δεδομένα σου μετά το compilation. Μεγάλη κουβέντα είναι τώρα αυτή που λέω αλλά ας πούμε ότι είναι ένα gut feeling ή η κατεύθυνση προς την οποία θα το έψαχνα εγώ αν συμμετείχα σε αυτές τις ομάδες. Για να καταλάβεις καλύτερα τι εννοώ σκέψου πως παιρνώντας στον OO προγραμματισμό από τον procedural φτιάξαμε κλάσεις για να εισάγουμε την ένοια του data hidding και encapsulation κλπ, έτσι αντίστοιχα μπορούμε να φτιάξουμε ένα μοντέλο το οποίο θα κάνει κάτι αντίσοιχο χρησιμοποιώντας web services (ας πούμε "web classes") οι οποίες θα μπορούν να εντοπίζουν η μία την άλλη μέσα από ένα σύστημα όπως το DNS αλλά με αναφορά τα XML namespaces και θα "μιλάνε" με την κατάλληλη version της κατάλληλης web class για διαχειριστούν δεδομένα που θα μπορούν να αλλάζουν δομή (άρα και type) μετά το compilation χωρίς recompilation.
|
|
Χμμμ... Ναι ωραίο ακούγεται μόνο που ένα τέτοιο σύστημα θα έχει τρομερό overhead ενώ το XML/Relational integration στο CLR οδηγείται από την ανάγκη για performance...
rousso wrote: |
That said, δεκτό το XML/relational παράδειγμα αν και θολό ακόμα ως πεδίο. Όμως επέτρεψε μου να επιστρέψω στο θέμα που είχα θέσει αρχικά. Έχει κάποιος να μας δώσει κάποιο παράδειγμα όπου η λύση dynamic typing είναι καλύτερη από την λύση strong typing; Εννοώ δηλαδή κάτι πιο καθημερινό, πιο συγκεκριμένο και λιγότερο "μελλοντικό" από το XML/Relational data integration στo CLR το οποίο κατά τη γνώμη μου έχει να κάνει περισσότερο με Object/Relational integration (στις ίδιες databases και στο data layer), παρά με dynamic vs strong typing. Ένα παράδειγμα ας πούμε που θα μπορούσε να μας δώσει το συμπέρασμα ότι ίσως τελικά να πρέπει η C# να αποκτήσει dynamic typing.
|
|
Βασικά είναι η περίπτωση του Ελβετικού σουγιά... Κάποιοι τον θέλουν μόνο με τα τρία βασικά εργαλεία, κάποιοι τον θέλουν full με τιρμπουσόν και USB flash disk. Εγώ ανήκω στους δεύτερους, όχι μόνο επειδή είμαι gadgetάκιας αλλά και επειδή θέλω κατά την εξαιρετική περίπτωση που θα χρειαστεί να ανοίξω μια σαμπάνια στη μέση του δάσους, να έχω αυτό το τιρμπουσόν! ![Smile [:)]](/cs/emoticons/emotion-1.gif)
'Η, για να το επαναφέρω το πράγμα στην πραγματικότητα, είναι σαν το late binding (το αναφέρω γιατί από πίσω του κρύβεται το reflection το οποίο reflection κρύβεται και πίσω από το dynamic typing). Υπάρχει, και μου αρκεί που είναι εκεί έτσι ώστε αν παρουσιαστεί ανάγκη να το χρησιμοποιήσω. Ή τέλος, είναι σαν την περίφημη δυνατότητα για την οποία καυχιόνται οι developers της C#, να μπορείς να γράψεις unsafe code. Υπάρχει, είναι εκεί και μπορεί κάποιος, κάπου, κάποτε, αν παραστεί ανάγκη, πχ στη μέση ενός δάσους, να το χρησιμοποιήσει.
Vir prudens non contra ventum mingit