Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλημέρα σας,

 

είμαι στη διαδικασία εκμάθησης C++. Έχω ξεκινήσει σιγά-σιγά με μία απλή εργασία. Έναν απλό interpreter.

 

Ένα ζήτημα, το οποία λύνω εύκολα (σ/μ)ε C, αλλά όχι σε C++ way είναι η χρήση συναρτήσεων πάνω σε χαρακτήρες. Στη C υπάρχει η ctype.h. Στη C++ η cctype. Διάβασα κι εδώ στο forum, ότι και πάλι η cctype είναι C. Οπότε υποθέτω πως υπάρχει κάποιος τρόπος διαβάσματος χαρακτήρα, όπως επίσης και συναρτήσεις ελέγχου χαρακτήρων που να είναι καθαρά C++. Το βιβλίο που διαβάζω, μέχρι στιγμής δεν έχει αναφέρει κάτι συγκεκριμένο. Έκανε όμως μία παρουσίαση της cctype.

 

Απλά ρωτάω γιατί υποτίθεται πως η C++ χτίστηκε ως μία καλύτερη C. Θα ήταν λίγο fail να βασίζεται πάνω στη libc.

 

Διάβασα γενικά ότι είναι κακιά συνήθεια η συντόμευση με τα namespaces, του στυλ using namespace std, using std::string (για το τελευταίο δεν είμαι σίγουρος, μου φαίνεται ασφαλές). Υπάρχει κάποια περίπτωση στην οποία μπορώ με ασφάλεια να το χρησιμοποιήσω; Ή αυτό εξαρτάται από τί ονόματα θα δώσω σε μεθόδους κάποιας κλάσης μου;

 

Μπορεί να ρωτάω χαζές ερωτήσεις, απλά τώρα αρχίζω να κολυμπάω. Θα ακολουθήσουν κι άλλες ερωτήσεις σίγουρα σε αυτό το post.

Δημοσ.

Στη C++ όλες οι λειτουργίες αυτού του είδους υπάγονται σε locales και κατηγοριοποιούνται κάτω από την ομπρέλα του locale σε λειτουργικές ομάδες που ονομάζονται facets. Συγκεκριμένα για classification χαρακτήρων αρμόδιο είναι το ctype facet (παράδειγμα).

 

To "using namespace std" λέγεται using directive και είναι το "παράδειγμα προς αποφυγή", ενώ το "using std::string" λέγεται using declaration και είναι τελείως OK. Το πρόβλημα με το directive (που βέβαια είναι σχεδόν αδύνατο να συμβεί σε trivial προγράμματα) το εξηγούν πολύ καλά στο SO: κάποια στιγμή μπορεί να κάνεις compile με διαφορετική έκδοση της τάδε library, κι αυτό να έχει σαν αποτέλεσμα κάποιο name στο πρόγραμμά σου να καταλήξει να αντιστοιχεί σε διαφορετικό πράγμα απ' ότι αντιστοιχούσε όταν έκανες compile με την προηγούμενη έκδοση.

 

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

Δημοσ.

Ευχαριστώ για την απάντηση!

 

Μπερδεύτηκα η αλήθεια είναι λίγο. Τι διαφορά έχει η ctype του locale (std::ctype) με αυτή; Κατάλαβα ότι η πρώτη είναι πιο portable όταν μιλάμε για C++, αλλά μάλλον δεν είμαι αρκετά in για να το "ακολουθήσω". Επίσης χρησιμοποιείται ας πούμε κάτι τέτοιο; Έχουμε 3 ας πούμε τρόπους, να κάνουμε μία δουλειά (φαντάζομαι αυτό δεν είναι μόνο για τους χαρακτήρες - προσπαθώ τουλάχιστον να γενικεύσω την ερώτηση). Τι προσπαθεί να αποδείξει ο κάθε τρόπος; Ποιος είναι C++ τελικά;

 

Έχει ουσία η ερώτησή μου; Ρωτάω για να διαπιστώσω αν έχει νόημα να παιδεύομαι με κάτι τέτοιο. Ποιο ήταν και είναι το όραμα των δημιουργών της γλώσσας και των βιβλιοθηκών για το τελικό προϊόν; Γιατί να φτιάξουν το ιostream με όλες αυτές τις μεθόδους ενώ θα έβαζαν και βιβλιοθήκες C; Για να υποστηρίξουν πολλαπλά επίπεδα προγραμματισμού; Για να "τραβήξουν"/δελεάσουν τους προγραμματιστές C;

 

Γενικά δε ξέρω αν θα δουλέψω σαν προγραμματιστής, αλλά απ' όσο περιμένω (σε διάφορα open-source projects - πανεπιστημιακά και μη) οι καλές πρακτικές λοίπουν, ειδικά από παλιά project. Τουλάχιστον λίγος σεβασμός προς τους κακόμοιρους που θα ακολουθήσουν.

 

 

Είμαι λίγο πρήξας! :P

 

Δημοσ.

...

Έχει ουσία η ερώτησή μου; Ρωτάω για να διαπιστώσω αν έχει νόημα να παιδεύομαι με κάτι τέτοιο. Ποιο ήταν και είναι το όραμα των δημιουργών της γλώσσας και των βιβλιοθηκών για το τελικό προϊόν; Γιατί να φτιάξουν το ιostream με όλες αυτές τις μεθόδους ενώ θα έβαζαν και βιβλιοθήκες C; Για να υποστηρίξουν πολλαπλά επίπεδα προγραμματισμού; Για να "τραβήξουν"/δελεάσουν τους προγραμματιστές C;

 

Γενικά δε ξέρω αν θα δουλέψω σαν προγραμματιστής, αλλά απ' όσο περιμένω (σε διάφορα open-source projects - πανεπιστημιακά και μη) οι καλές πρακτικές λοίπουν, ειδικά από παλιά project. Τουλάχιστον λίγος σεβασμός προς τους κακόμοιρους που θα ακολουθήσουν.

...

Αυτό είναι για μένα ένα από τα μείον της C++. Το περίφημο "the C++ way" (ή το αντίστοιχο "the Python way", κλπ) κατά τη γνώμη μου είναι άτοπο σε τέτοιες γλώσσες, διότι ειδικά η C++ είναι ένας πραγματικός ωκεανός! Σχεδόν για το κάθε τι που θέλεις να κάνεις δεν υπάρχουν μόνο 2-3 τρόποι αλλά 12-13, κι άντε μετά εσύ να πιστέψεις πως το "the C++ way" είναι ντε και καλά αυτό που θέλει να σου επιβάλλει ο εκάστοτε... ειδικός.

 

Π.χ. το infamous "C with classes" που όλοι C++άδες το φτύνουν υποτιμητικά σε κάθε ευκαιρία, προσωπικά μετά από τόσα χρόνια ακόμα δεν έχω καταλάβει τι το σατανικό έχει. Δηλαδή γιατί είναι πια τόσο κατάπτυστο το να χρησιμοποιεί κάποιος την C++ ως C με κλάσεις; Ειδικά αν το κάνει συνειδητά επειδή έτσι τον εξυπηρετεί καλύτερα για τις ανάγκες του πρότζεκ του, σιγά μην χαλάσει τη ζαχαρένια του απλά για να πουλήσει μούρη.

 

Άσε που σε κάθε αναθεώρηση, αρκετά από τα "the C++ ways" (που ίδρωσες μέχρι να μάθεις και να τα εφαρμόζεις) σου τα παίρνουν πίσω και σου τα αντικαθιστούν με καινούρια (ή απλώς σου προσθέτουν και καινούρια).

 

Η C++ είναι γλώσσα "πολύ από όλα" (σε αντιπαράθεση δηλαδή με το "λίγο από όλα"), χάνει η μάνα το παιδί και το παιδί τη μάνα (από το λίγο που έχω ασχοληθεί πρόσφατα, βλέπω πως στο ίδιο μοτίβο κινείται και η Python). Φαντάσου κάτι σαν την PHP, αλλά σε μεγεθυντικό φακό και με πολύ πιο "αλαζόνες" ειδικούς (πάντα κατά την άποψη μου, μην έχουμε τίποτε αχρείαστες παρεξηγήσεις πάλι :P).

 

Η δική μου άποψη είναι να πάρεις ένα πρόσφατο βιβλίο (ψάξε λιγάκι πρώτα για να βρεις κάποιο που να έχει καλές κριτικές και μεγάλη αποδοχή) και να ακολουθήσεις το όποιο στυλ σου προτείνει. Όταν με το καλό το τελειώσεις και νιώσεις σίγουρος ότι έχεις πάρει το κολάι, μπορείς να αρχίσεις να ψάχνεσαι και για εναλλακτικούς τρόπους, στυλ, κλπ.

Δημοσ.

Μπερδεύτηκα η αλήθεια είναι λίγο. Τι διαφορά έχει η ctype του locale (std::ctype) με αυτή; Κατάλαβα ότι η πρώτη είναι πιο portable όταν μιλάμε για C++, αλλά μάλλον δεν είμαι αρκετά in για να το "ακολουθήσω".

 

Αν εννοείς τι διαφορά έχει να πάρεις το default locale και να καλέσεις κάτι από το ctype facet του με το να καλέσεις το αντίστοιχο από το <cctype> τότε δεν υπάρχει διαφορά.

 

Οι διαφορές προκύπτουν από το ότι στη C++ μια locale instance κάνει encapsulate τις σχετικές πληροφορίες και μπορεί να χρησιμοποιηθεί αυτόνομα. Για παράδειγμα, τα παρακάτω πράγματα μπορείς να τα κάνεις portably στη C++ αλλά AFAIK όχι portably στη C:

  • να χρησιμοποιήσεις πολλές locales παράλληλα με ευκολία (αν και στη C γίνεται αλλάζοντας "το" locale συνέχεια)
  • να χρησιμοποιήσεις διαφορετικές locales ταυτόχρονα σε multithreaded εφαρμογή
  • να δημιουργήσεις δικές σου custom locales (και custom facets, π.χ. facet για formatting τηλεφωνικών αριθμών, για νούμερα παπουτσιών, βασικά για ότι μπορείς να φανταστείς)
Αυτά βέβαια στη C λύνονται αν κάνεις target POSIX σύστημα (υπάρχουν nonstandard λύσεις).

 

Επίσης στη C++ μπορείς πολύ εύκολα να ορίσεις διαφορετικό locale ανα stream (encapsulation και πάλι), στη C δεν υπάρχουν streams οπότε μπορείς να κάνεις το αντίστοιχο γράφοντας κώδικα για abstraction αλλά θα έχεις και πάλι τα προβλήματα που ανέφερα νωρίτερα (π.χ. σε multiple threads θα γίνει το έλα να δεις).

 

Και τέλος, το μεγαλύτερο ίσως πρόβλημα (AFAIK δε λύνεται στη C) είναι πως όταν χειρίζεσαι multibyte strings τμηματικά (σα stream δηλαδή) οι διάφορες functions κρατάνε απαραίτητα ένα εσωτερικό state ("shift state") το οποίο χάνεται όταν αλλάζεις locale. Problem.

 

 

Επίσης χρησιμοποιείται ας πούμε κάτι τέτοιο;

 

 

Δεν κατάλαβα την ερώτηση.

 

 

Έχουμε 3 ας πούμε τρόπους, να κάνουμε μία δουλειά (φαντάζομαι αυτό δεν είναι μόνο για τους χαρακτήρες - προσπαθώ τουλάχιστον να γενικεύσω την ερώτηση). Τι προσπαθεί να αποδείξει ο κάθε τρόπος; Ποιος είναι C++ τελικά;

Οτιδήποτε δεν μπαίνει στην κατηγορία "C library" είναι C++.

 

Φυσικά υπάρχουν κι άλλες επιλογές (π.χ. σε ένα vector μπορείς να πας με for i = 0; i < vec.size() και επίσης με i != vec.end()) οι οποίες είναι "C++ και στην ουσία στο πνεύμα" ή "C++ στην ουσία αλλά όχι στο πνεύμα", αλλά αυτό ισχύει σε όλες τις γλώσσες (είναι αυτό που λέμε αν γράφεις idiomatic κώδικα).

 

 

Ποιο ήταν και είναι το όραμα των δημιουργών της γλώσσας και των βιβλιοθηκών για το τελικό προϊόν; Γιατί να φτιάξουν το ιostream με όλες αυτές τις μεθόδους ενώ θα έβαζαν και βιβλιοθήκες C; Για να υποστηρίξουν πολλαπλά επίπεδα προγραμματισμού; Για να "τραβήξουν"/δελεάσουν τους προγραμματιστές C;

Όσον αφορά π.χ. το iostream, en-cap-su-lation. Υποθέτω ότι δεν ξέρεις ιδιαίτερα από OOP (και δεν εννοώ classes και methods γιατί αυτό είναι σα να λέει κανείς ότι ξέρω από καλώδια και πρίζες άρα είμαι μηχανικός εγκαταστάσεων) γιατί αν ήξερες δε μπορώ να φανταστώ ότι θα έκανες αυτή την ερώτηση.

 

Ο μόνος τρόπος να νιώσεις το γιατί είναι να κάνεις κάτι ψιλοζόρικο και με τους δύο τρόπους, να το βελτιώσεις σε κάθε περίπτωση μέχρι να φτάσεις στο "έτσι γίνεται η δουλειά" και μετά να συγκρίνεις. Αυτά τα πράγματα είναι σαν το ποδήλατο, αν τα "μάθεις" μια φορά μετά σχεδόν δε μπορείς να φανταστείς πώς είναι να μη τα ξέρεις.

 

Όσον αφορά το να δελεάσουν τους προγραμματιστές της C, σαφώς ναι.

 

Γενικά δε ξέρω αν θα δουλέψω σαν προγραμματιστής, αλλά απ' όσο περιμένω (σε διάφορα open-source projects - πανεπιστημιακά και μη) οι καλές πρακτικές λοίπουν, ειδικά από παλιά project. Τουλάχιστον λίγος σεβασμός προς τους κακόμοιρους που θα ακολουθήσουν.

Οι καλές πρακτικές λείπουν γενικότερα. Επίσης υπάρχουν πολλά "επίπεδα" καλής πρακτικής. Το θέμα είναι πως πέρα από το θέμα των γνώσεων του manual (που όλοι μπορούν να αποκτήσουν διαβάζοντας), οι πρακτικές είναι αυτές που κάνουν το πλυμένο να ξεχωρίζει από το πραγματικά καθαρό. Όταν έχεις εμπειρία πραγματικά ισχύει το "δείξε μου τον κώδικά σου να σου πω ποιος είσαι", κι αν θέλεις να κάνεις καριέρα το ποιός είσαι... μετράει.

 

Η C++ είναι γλώσσα "πολύ από όλα" (σε αντιπαράθεση δηλαδή με το "λίγο από όλα"), χάνει η μάνα το παιδί και το παιδί τη μάνα (από το λίγο που έχω ασχοληθεί πρόσφατα, βλέπω πως στο ίδιο μοτίβο κινείται και η Python). Φαντάσου κάτι σαν την PHP, αλλά σε μεγεθυντικό φακό και με πολύ πιο "αλαζόνες" ειδικούς (πάντα κατά την άποψη μου, μην έχουμε τίποτε αχρείαστες παρεξηγήσεις πάλι :P).

Μιλώντας για τον εαυτό μου, που ξέρει C++ και PHP και έχει δει "σε δράση" ειδικούς και στις δύο γλώσσες, εδώ γέλασα πολύ. Αλλά βέβαια το χιούμορ είναι υποκειμενικό, να μην έχουμε τίποτα αχρείαστες παρεξηγήσεις πάλι.

Δημοσ.

...

Μιλώντας για τον εαυτό μου, που ξέρει C++ και PHP και έχει δει "σε δράση" ειδικούς και στις δύο γλώσσες, εδώ γέλασα πολύ. Αλλά βέβαια το χιούμορ είναι υποκειμενικό, να μην έχουμε τίποτα αχρείαστες παρεξηγήσεις πάλι.

Παρόλο που δεν έχω την παραμικρή ιδέα για ποιο λόγο γέλασες, δεν παύει να είναι αναφαίρετο δικαίωμά σου.

 

Εγώ πάντως γελάω πολύ όταν ακούω/διαβάζω "the XXX way", γιατί αυτόματα στο μυαλό μου ερμηνεύεται ως "να τους ψήσω πως το χάος είναι συγκροτημένο, να κάνω και το κομμάτι μου". Εδώ κολλάει και το "αλαζονικό" που έγραψα παραπάνω.

 

Οι PHPάδες δεν έχουν τέτοιες ψευδαισθήσεις, δεν έχουν "PHP way"... ίσα-ίσα που αν και όταν το λένε το κάνουν για να αυτοσαρκαστούν. Αντίθετα οι C++-άδες (και οι Pythonistas) το λένε σαν να πιστεύουν ότι υπάρχει κιόλας (δεν ξέρω μπορεί όντως να το πιστεύουν) και μάλιστα πασχίζουν να το επιβάλλουν κιόλας.

Δημοσ.

Η c++ ειναι παρα πολυ δυνατη γλωσσα. Η c++ standard library δεν ειναι C++ ειναι c++ standard library, οπως και η STL δεν ειναι c++ ειναι standard template library. Η πρωτη ειναι ενας wrapper που χρησιμοποιει ΜΟΝΟ κλασεις και overloads ή δευτερη χρησιμοποιει και metaprogramming. Αυτα ειναι μονο δυο paradigm απο τα πολλα που προσφερει η c++ ως γλωσσα. Δες την γλωσσα ως γλωσσα και οχι ως library.

 

edit: Εαν μεινεις στις library θα καταντησεις σα το mig, θα βλεπεις c++ way και τιποτα αλλο.

Δημοσ.

Η c++ ειναι παρα πολυ δυνατη γλωσσα. Η c++ standard library δεν ειναι C++ ειναι c++ standard library, οπως και η STL δεν ειναι c++ ειναι standard template library. Η πρωτη ειναι ενας wrapper που χρησιμοποιει ΜΟΝΟ κλασεις και overloads ή δευτερη χρησιμοποιει και metaprogramming. Αυτα ειναι μονο δυο paradigm απο τα πολλα που προσφερει η c++ ως γλωσσα. Δες την γλωσσα ως γλωσσα και οχι ως library.

Εγώ πάντως δeν κατάλαβα τίποτα :lol:

 

H C++ δεν είναι απλώς πάρα πολύ δυνατή γλώσσα, εγώ νομίζω πως είναι η πιο δυνατή γλώσσα από τις δημοφιλείς. Αυτό όμως προϋποθέτει να συνεννοηθούμε στο τι εννοούμε "δύναμη". Εγώ εννοώ ότι υποστηρίζει εγγενώς και ως γλώσσα και μέσω των στάνταρ βιβλιοθηκών της έναν ποικιλόμορφο ωκεανό από χαρακτηριστικά, από δυνατότητες και από programming paradigms. Κάτι που αν το συμφωνήσουμε, τότε έρχεται αυτονόητα σε αντίθεση με το να λέμε πως υπάρχει "The C++ way".

 

Πάντα κατά την άποψή μου, αν μια από τις δημοφιλείς γλώσσες δικαιούται να λέει πως έχει δικό της διακριτό "way" αυτή είναι η Java.

Δημοσ.

Παρόλο που δεν έχω την παραμικρή ιδέα για ποιο λόγο γέλασες, δεν παύει να είναι αναφαίρετο δικαίωμά σου.

 

Εγώ πάντως γελάω πολύ όταν ακούω/διαβάζω "the XXX way", γιατί αυτόματα στο μυαλό μου ερμηνεύεται ως "να τους ψήσω πως το χάος είναι συγκροτημένο, να κάνω και το κομμάτι μου". Εδώ κολλάει και το "αλαζονικό" που έγραψα παραπάνω.

 

Οι PHPάδες δεν έχουν τέτοιες ψευδαισθήσεις, δεν έχουν "PHP way"... ίσα-ίσα που αν και όταν το λένε το κάνουν για να αυτοσαρκαστούν. Αντίθετα οι C++-άδες (και οι Pythonistas) το λένε σαν να πιστεύουν ότι υπάρχει κιόλας (δεν ξέρω μπορεί όντως να το πιστεύουν) και μάλιστα πασχίζουν να το επιβάλλουν κιόλας.

 

http://www.phptherightway.com/

 

Ειδικά στην PHP θα έμενες έκπληκτος από το πόσοι λάθος τρόποι που όμως φαίνεται εκ πρώτης όψεως να δουλεύουν υπάρχουν για να κάνεις ακόμα και το πιο απλό πράγμα στον κόσμο -- για γλώσσα που δεν έχει undefined behavior είναι άπιαστη σ' αυτό τον τομέα (one reason why it sucks). Not surprisingly, δεν έχω συναντήσει πιο λυσσασμένους developers "το σωστό είναι αυτό τελεία" σε καμία άλλη γλώσσα. Νομίζεις ότι το "άσε τη malloc και βάλε vector" είναι "αλαζονικό"; Ασχολήσου λίγο με PHP.

 

Τέλος θα ήταν ίσως καλύτερα να αφήσεις κάποιον που ξέρει την εκάστοτε γλώσσα να μιλήσει γι' αυτήν, αλλά ελευθερία λόγου έχουμε οπότε μπορείς αν προτιμάς να ακυρώνεις τις απόψεις των PHPάδων, C++άδων και Pythonistas παρόλο που αν δεν κάνω λάθος, σε αντίθεση μ' αυτούς δεν ξέρεις καμία από τις τρεις αυτές γλώσσες (και δεν εννοώ βέβαια τη σύνταξη).

Δημοσ.

http://www.phptherightway.com/

 

Θα ήταν ίσως καλύτερα να αφήσεις κάποιον που ξέρει την εκάστοτε γλώσσα να μιλήσει γι' αυτήν, αλλά ελευθερία λόγου έχουμε οπότε μπορείς αν προτιμάς να ακυρώνεις τις απόψεις των PHPάδων, C++άδων και Pythonistas παρόλο που αν δεν κάνω λάθος, σε αντίθεση μ' αυτούς δεν ξέρεις καμία από τις τρεις αυτές γλώσσες (και δεν εννοώ βέβαια τη σύνταξη).

Και πάλι κάνεις λάθος, μόνο την Python πέτυχες. Επίσης, εσύ παρόλο που τις έχεις φάει με το κουτάλι έχεις μια δυσκολία καθώς φαίνεται στο να μην περιορίζεσαι σε απλό googling για τα links που δίνεις. Θα περίμενε κανείς πως εφόσον μας έχεις κάνει σαφές τις απέραντες γνώσεις σου στην PHP, θα ήσουν σε θέση να δώσεις κάνα link που ήξερες ότι ενισχύει την επιχειρηματολογία σου, από το να τη διαψεύδει από την 2η κιόλας παράγραφο:

 

There is no canonical way to use PHP. This website aims to introduce new PHP developers to some topics which they may not discover until it is too late, and aims to give seasoned pros some fresh ideas on those topics they’ve been doing for years without ever reconsidering. This website will also not tell you which tools to use, but instead offer suggestions for multiple options, when possible explaining the differences in approach and use-case.

...

Αλλά ελευθερία λόγου έχουμε, οπότε μπορείς να αντιφάσκεις όσο θέλεις.

 

EDIT:

 

Πάπι, το the C++ way το ρώτησε ο gon... αυτό παρέθεσα και σε αυτό απάντησα. Gon, αν αποκλείσεις τις στάνταρ βιβλιοθήκες της γλώσσας που μαθαίνεις, θα καταντήσεις σαν τον παπι που νομίζει πως οι γλώσσες προγραμματισμού δουλεύουν και χωρίς τις στάνταρ βιβλιοθήκες τους.

Δημοσ.

Πάλι καλά που πέτυχα έστω και μία θα έλεγα εγώ.

 

Είμαι σίγουρος πως σε αντίθεση με μένα που μόλις πριν λίγο ανακάλυψα αυτό το site πατώντας τυχαία πράγματα στο google απλά και μόνο για να βρω κάτι να πω, άλλοι όχι απλά καταλαβαίνουν το νόημά του αλλά -- έχοντας επιπλέον έρθει σε επαφή με διάφορους developers αλλά και μέλη της internals ανα τον κόσμο -- ξέρουν πραγματικά να μιλήσουν για PHP.

 

Δε θα μείνω για το υπόλοιπο έργο γιατί το έχω ξαναδεί. Καληνύχτες.

Δημοσ. (επεξεργασμένο)

 Όσον αφορά π.χ. το iostream, en-cap-su-lation. Υποθέτω ότι δεν ξέρεις ιδιαίτερα από OOP (και δεν εννοώ classes και methods γιατί αυτό είναι σα να λέει κανείς ότι ξέρω από καλώδια και πρίζες άρα είμαι μηχανικός εγκαταστάσεων) γιατί αν ήξερες δε μπορώ να φανταστώ ότι θα έκανες αυτή την ερώτηση.

Ο μόνος τρόπος να νιώσεις το γιατί είναι να κάνεις κάτι ψιλοζόρικο και με τους δύο τρόπους, να το βελτιώσεις σε κάθε περίπτωση μέχρι να φτάσεις στο "έτσι γίνεται η δουλειά" και μετά να συγκρίνεις. Αυτά τα πράγματα είναι σαν το ποδήλατο, αν τα "μάθεις" μια φορά μετά σχεδόν δε μπορείς να φανταστείς πώς είναι να μη τα ξέρεις.

 

Όσον αφορά το να δελεάσουν τους προγραμματιστές της C, σαφώς ναι.

Ευχαριστώ για τα points. Γνωρίζω για το encapsulation, αλλά όχι OOP όπως θα έπρεπε. Αν και η Java είναι μία OOP με τα όλα της ποτέ δεν την πήγαινα. Ευελπιστώ να μάθω με C++. Η ερώτησή μου ήταν μερικώς ρητορική και λογικά η απάντησή της, όπως πάει το πράγμα είναι κυρίως το marketing (Όσον αφορά το να δελεάσουν τους προγραμματιστές της C, σαφώς ναι).

 

 

Η c++ ειναι παρα πολυ δυνατη γλωσσα. Η c++ standard library δεν ειναι C++ ειναι c++ standard library, οπως και η STL δεν ειναι c++ ειναι standard template library. Η πρωτη ειναι ενας wrapper που χρησιμοποιει ΜΟΝΟ κλασεις και overloads ή δευτερη χρησιμοποιει και metaprogramming. Αυτα ειναι μονο δυο paradigm απο τα πολλα που προσφερει η c++ ως γλωσσα. Δες την γλωσσα ως γλωσσα και οχι ως library.

 

edit: Εαν μεινεις στις library θα καταντησεις σα το mig, θα βλεπεις c++ way και τιποτα αλλο.

 

Τι εννοείς; Καμία standard library κάποιας γλώσσας δεν είναι η γλώσσα. Αν δω όμως την γλώσσα ως γλώσσα και όχι library, τότε θα καταλήξω να φτιάχνω τη δική μου library. (Στο κάτω-κάτω μία γλώσσα έχει να διαφημίσει τα standard libraries της - Η string.h της C σε σχέση με την κλάση String της Java είναι Δαυίδ).

Εκτός κι αν εννοείς να μη χάνω το χρόνο μου με το ποιά βιβλιοθήκη να χρησιμοποιήσω και να αξιοποιήσω ΟΠΟΙΑ δυνατότητα μου προσφέρει η γλώσσα. "Αδράξτε την γλώσσα" δηλαδή.

Επεξ/σία από gon1332
Δημοσ. (επεξεργασμένο)

...

Η ερώτησή μου ήταν μερικώς ρητορική και λογικά η απάντησή της, όπως το καταλαβαίνω εγώ είναι το marketing (Όσον αφορά το να δελεάσουν τους προγραμματιστές της C, σαφώς ναι).

...

Δεν είμαι σίγουρος πως καταλαβαίνω τι εννοείς λέγοντας marketing. Η C++ παραπάνω από τη μισή ζωή της (αν τα θυμάμαι σωστά) ήταν πλήρες υπερσύνολο της C. Η πρώτη της υλοποίηση ήταν στον προεπεξεργαστή της C. Δημιουργήθηκε για να είναι επέκταση της C, για να διορθώσει αδυναμίες της C, και για να προσθέσει μοντέρνα χαρακτηριστικά. Η C είναι στο DNA της C++. Κάπου στην πορεία άρχισε να χάνεται όμως η μπάλα σε μια μανία θα μπορούσαμε να πούμε εμπλουτισμού της γλώσσας με ότι πιθανό κι απίθανο "κυκλοφορεί". Σχετικά πρόσφατα σταμάτησε να είναι και ακριβές υπερσύνολο της C και σήμερα έχουμε φτάσει στο σημείο οι C++άδες των φόρουμ να ακούνε C και να βγάζουν σπυριά (το διαχωρίζω, γιατί στην επαγγελματική αρένα οι περισσότεροι γνωρίζουν και χρησιμοποιούν και τις 2).

 

Πρόκειται για μια γλώσσα πραγματικά πασπαρτού, με τεράστια ευελιξία και δυνατότητες, με τεράστια εμβέλεια εφαρμογής σε άπειρους τομείς (από low-level μέχρι meta-programming) την οποίαν όμως προσπαθούν να μας επιβάλλουν να την χρησιμοποιούμε μονόμπαντα, γιατί... έτσι! Το ίδιο συμβαίνει και με άλλες πολύπλευρες γλώσσες, δεν είναι μόνο η C++. Με το που ενσωματώνεται κάποια νέα δυνατότητα στη γλώσσα, σπεύδουν να την υιοθετήσουν και να την προμοτάρουν σαν τρελοί. Αλλιώς δεν είσαι "the C++ way".

 

Για την υποστήριξη της C libray που ρώτησες, δεν είναι marketing. Aν π.χ. θελήσεις να κάνεις low-level programming με τη C++, ή ακόμα και embedded programming, τότε μάλλον θα την εκτιμήσεις δεόντως ;) Ή αν θελήσεις να φτιάξεις βιβλιοθήκη στην οποία θες να έχουν access όσο το δυνατόν περισσότερες γλώσσες, τότε θα προτιμήσεις να της φτιάξεις C interface, με extern C κλπ (αν κι αυτό προφανώς δεν σχετίζεται με την υποστήριξη της C standard libraries, αφού το implementation από πίσω είσαι ελεύθερος να το έχεις (και μάλλον θα το έχεις) με όσα C++ features επιθυμείς).

 

ΥΓ. Τελικά θα μας πει κάποιος ειδικός ποιο είναι το C++ way (και κυρίως το γιατί) για να διαβάζουμε ένα αρχείο; Είναι ας πούμε με fread; μήπως είναι με ifstream.read; μήπως με stringstream.rdbuf(); ή μήπως με memory mapping (mmap); Εν ολίγοις, ξεκολλήστε!

Επεξ/σία από migf1
Δημοσ.

Απλά θέλω να ξεράσω.

 

"Σχετικά πρόσφατα σταμάτησε να είναι ακριβές υπερσύνολο της C". Όντως, αν θεωρεί κανείς το 1989 "σχετικά πρόσφατα" (και πιθανόν να μην ήταν κι ακόμα νωρίτερα, really δεν έχω ιδέα). Τώρα που το ξανασκέφτομαι, obviously η C++ δε θα μπορούσε ποτέ να είναι υπερσύνολο, ούτε καν πριν τις ISO εποχές.

Δημοσ.

Απλά θέλω να ξεράσω.

Πρόβλημα σου (να κυκλοφορείς με σακουλάκια στην τσέπη αν είσαι επιρρεπής).

 

"Σχετικά πρόσφατα σταμάτησε να είναι ακριβές υπερσύνολο της C". Όντως, αν θεωρεί κανείς το 1989 "σχετικά πρόσφατα" (και πιθανόν να μην ήταν κι ακόμα νωρίτερα, really δεν έχω ιδέα). Τώρα που το ξανασκέφτομαι, obviously η C++ δε θα μπορούσε ποτέ να είναι υπερσύνολο, ούτε καν πριν τις ISO εποχές.

Η C++ παραπάνω από τη μισή ζωή της (αν τα θυμάμαι σωστά) ήταν πλήρες υπερσύνολο της C

It turns out that, δεν τα θυμόμουν ακριβώς αλλά σχεδόν σωστά, μάλλον επειδή έχω γράψει με το ζόρι αρκετό-έως-πολύ C κώδικα με C++ compiler back in the day (βάλε μου χαμηλό βαθμό στο διαγώνισμα)...

http://www.stroustrup.com/bs_faq.html#C-is-better

...

Is C a subset of C++?

 

In the strict mathematical sense, C isn't a subset of C++. There are programs that are valid C but not valid C++ and even a few ways of writing code that has a different meaning in C and C++. However, C++ supports every programming technique supported by C. Every C program can be written in essentially the same way in C++ with the same run-time and space efficiency. It is not uncommon to be able to convert tens of thousands of lines of ANSI C to C-style C++ in a few hours. Thus, C++ is as much a superset of ANSI C as ANSI C is a superset of K&R C and much as ISO C++ is a superset of C++ as it existed in 1985.

 

Well written C tends to be legal C++ also. For example, every example in Kernighan & Ritchie: "The C Programming Language (2nd Edition)" is also a C++ program.

...

Το μεγάλο breakage ήρθε το 2000 (δηλαδή σχετικά πρόσφατα) με την αναθεώρηση C99 και με βασική ευθύνη της C committee (αν δεν έψάχνες για σακουλάκι ίσως να είχες διαπιστώσει πως το breakage το κατέθεσα ως fact, δεν απέδωσα ευθύνες).

 

Και τώρα το ΚΛΟΥ...

 

http://www.stroustrup.com/bs_faq.html#Object-Oriented-language

 

Is C++ an Object-Oriented language?

 

C++ is a multi-paradigm programming language that supports Object-Oriented and other useful styles of programming. If what you are looking for is something that forces you to do things in exactly one way, C++ isn't it. There is no one right way to write every program - and even if there were there would be no way of forcing programmers to use it.

 

That said, writing C-style programs in C++ is for most applications not an optimal use of C++. To be a really effective C++ programmer, you must use the abstraction mechanisms and the type system in a way that fits reasonably with their intent. Trying to ignore or defeat the C++ type system is a most frustrating experience.

 

Writing Java-style code in C++ can be as frustrating and sub-optimal as writing C-style code in C++.

Οι σοβαροί όταν πραγματεύονται multi-paradigm γλώσσες σπεύδουν από πολύ πολύ νωρίς να επισημάνουν πως δεν υπάρχει ένας και μοναδικός τρόπος και πολύ περισσότερο δεν επιχειρούν να τον επιβάλλουν ως θέσφατη πανάκεια. Δευτερευόντως, φυσικά και επισημαίνουν τα στοιχεία εκείνα που ξεχωρίζουν την εκάστοτε γλώσσα από τις υπόλοιπες.

 

Στην περίπτωση της C++, από τη δική μου εμπειρία, αυτά είναι κυρίως τα generics και η λεπτομερής υποστήριξη πολλών OOP concepts (ίσως και η παγίωση -λόγω της δημοφιλίας της γλώσσας- κάποιων χαρακτηριστικών ως OOP).

 

Και μιας και είπα OOP σε C++, ένα ελαφρώς outdated but nevertheless a good read: http://www.stroustrup.com/oopsla.pdf

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...