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

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

Δημοσ.

Τα μόνα άσχετα links είναι αυτά που δίνεις εσύ. Αυτά που δίνω εγώ είναι πάντα σχετικά με αυτά που γράφω (το trolling είναι δικό σου προνόμιο).

 

Έχετε δίκιο ε? Για πες τες μας λοιπόν κάνα-δυο compilers ή/και πλατφόρμες στις οποίες ΔΕΝ λειτουργεί ας expected ο κώδικας που έδωσα; Αλλά τι ζητάω τώρα; Αυτά δεν τα θα τα βρεις στο πρότυπο, αλλά στο real world (με το οποίο real world προφανώς δεν έχεις καμία επαφή).

  • Απαντ. 1,6k
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοσ.

Ρε παίδες.. και κυρίως όσοι έχουν καλή εμπειρία από ξένα forums...

 

Η φαγωμάρα που παρατηρείται σε ελληνικά forums προγραμματισμού παρατηρείται και σε ξένα; Ή είναι άλλο ένα Π.Ο.Π. μαζί με την φέτα;

Έμμεσο κράξιμο acknowledged. Όλο λέω ότι δεν θα συμμετέχω σε "καυγάδες" αλλά ποτέ δεν το κάνω. Έχεις δίκιο ότι δεν είναι ωραίο.

 

@imitheos: Μετά από ώριμη σκέψη καταλήγω στο συμπέρασμα ότι σε πήρα στο λαιμό μου γιατί διάβασες το post και τα links και "με πίστεψες" ότι αυτό κάνει και ο κώδικας. Ακόμα κι αν δεν έγινε ακριβώς έτσι, υποθέτω ότι έπαιξα και γω το ρόλο μου.

 

Sorry mate.

Το link της SO που έδωσες και το μήνυμα που έδωσε ο migf1 μιλούσαν για τη μορφή που είναι UB. Αυτά τα δύο έκανα quote και αυτά σχολίασα. Πριν απαντήσω μάλιστα σε εκείνο το νήμα, πρότεινα σε ένα άλλο νήμα ακριβώς την ίδια μέθοδο και προέτρεψα τον OP να ψάξει μηνύματα του migf1. Ο migf1 το πέρασε στο ντούκου αυτό. Γιατί να το προτείνω αν πίστευα ότι είναι UB ? Δεν άνοιξα καν το spoiler με το κώδικα που έδωσε οπότε δεν νομίζω ότι με πήρες στο λαιμό σου. Σε αυτά που έκανα quote ο σχολιασμός μου ήταν σωστός.

 

Απλά ο migf1 είναι σαν τους καθηγητές πανεπιστημίου και σαν τους ανωτέρους στο στρατό. Πάντα αυτό που λένε είναι σωστό γιατί έχουν 30 χρόνια εμπειρία. Δεν δέχεται ποτέ την άποψη αλλουνού.

 

Χωρίς καμία πρόθεση να μπω στη μέση του οποιουδήποτε "ερωτικού" κλίματος υπάρχει μεταξύ σας, σαν απλός αναγνώστης μπερδεύτηκα λιγάκι.  :-D

 

Ο migf1 στο άλλο θέμα ο κώδικας που παραθέτει είναι σε συντομία αυτός

Sorry παίδες αλλά δε μπορώ να καταλάβω που ακριβώς μπορεί να προκύψει UB σε αυτή τη χρήση.

 

Αφού όπως είπε και ο ίδιος ο imitheos τον δεσμεύει και τον διαχειρίζεται σα μονοδιάστατο. 

 

Άλλο θέμα αν είναι καλό ή κακό για τον κάθε φορά σκοπό. UB δε μπορώ να καταλάβω που προκύπτει,

Όχι μόνο δεν είναι UB αλλά δεν είναι και κακό. Μια χαρά τρόπος είναι απλά εγώ μίλησα για άλλο πράγμα. 

 

Δε ξέρω που τα βρήκες αυτά, αλλά εγώ στο νήμα της C++ έδωσα κώδικα με i*COLS+j σχολιάζοντας πως είναι εναλλακτική πρόταση του 2D για να χρησιμοποιήσει κανείς μονοκόμματη μνήμη, ο defacer έγραψε πως αν το κάνεις access όπως έδειχνα βγάζει UB (δίνοντας 2 τελείως άσχετα links από κάτω) κι εσύ επικρότησες.

Τα είδα εκεί που τα έγραψες. Συγκεκριμένα είπες:

Σε ότι αφορά την C, το έχουμε ξανασυζητήσει αυτό το θέμα, κι έχω δώσει και απόσπασμα από το ίδιο το πρότυπο: http://www.insomnia.gr/topic/437533-ερωτήσεις-για-c/page-66#entry5065039 (C11) που επιβεβαιώνει την πεποίθηση μου.

Το ίδιο κομμάτι ξανα-έκανα quote χτες και σου είπα μάλιστα να κοιτάξεις τους κώδικες που υπήρχαν 2-3 μηνύματα πριν από το δικό σου (το #990 δηλαδή). Δεν μίλησα πουθενά για τον κώδικα που είχες σε spoiler στο νήμα της c++.

 

Α ώστε είναι και λάθος το register, όχι δηλαδή απλώς περιττό στους mainstream compilers αλλά και λάθος. Μάλιστα!

 

3. Λέω να κάνεις πρόταση στο committee να το αφαιρέσουν τελείως από την γλώσσα, μιας και είναι λάθος, ή έστω να μη λένε πως είναι implementation defined αλλά πως είναι λάθος να το χρησιμοποιείς σε frequently accessed vars, και να το έχεις μόνο για non-referenced objects...

Πριν να ειρωνεύεσαι μάθε να διαβάζεις. Στο ίδιο τμήμα του προτύπου που έκανες quote έλεγε το ένα "πρόβλημα" του register.

Except when it is the operand of the sizeof operator or the unary & operator, or is a string literal used to initialize an array, an expression that has type ‘‘array of type’’ is converted to an expression with type ‘‘pointer to type’’ that points to the initial element of the array object and is not an lvalue. If the array object has register storage class, the behavior is undefined.

103) The implementation may treat any register declaration simply as an auto declaration. However,

whether or not addressable storage is actually used, the address of any part of an object declared with

storage-class specifier register cannot be computed, either explicitly (by use of the unary &

operator as discussed in 6.5.3.2) or implicitly (by converting an array name to a pointer as discussed in

6.3.2.1). Thus, the only operator that can be applied to an array declared with storage-class specifier

register is sizeof.

— An lvalue having array type is converted to a pointer to the initial element of the

array, and the array object has register storage class (6.3.2.1).

Δεν είναι άιντε βάζουμε παντού ένα register και στη χειρότερη ο compiler θα το αγνοήσει. Υπό συνθήκες οδηγεί σε UB. Εκτός αυτού, ακόμη και στη περίπτωση που το αγνοήσει και το variable έχει κανονικά διεύθυνση, ο compiler είναι (σύμφωνα με το 103 footnote) υποχρεωμένος να μην επιτρέπει & για να πάρουμε την διεύθυνση του variable (επειδή μπορεί να βρίσκεται σε register και να μην έχει διεύθυνση). Που είναι τώρα το πρόβλημα ? Τα footnotes δεν είναι normative οπότε οδηγεί σε προβλήματα portability γιατί δεν είναι παραβίαση αν δεν το τηρήσει ο compiler. Έτσι μπορεί ένας compiler να σου επιτρέψει το & και άλλος όχι.

 

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

Δημοσ.

Το link της SO που έδωσες και το μήνυμα που έδωσε ο migf1 μιλούσαν για τη μορφή που είναι UB. Αυτά τα δύο έκανα quote και αυτά σχολίασα. Πριν απαντήσω μάλιστα σε εκείνο το νήμα, πρότεινα σε ένα άλλο νήμα ακριβώς την ίδια μέθοδο και προέτρεψα τον OP να ψάξει μηνύματα του migf1. Ο migf1 το πέρασε στο ντούκου αυτό. Γιατί να το προτείνω αν πίστευα ότι είναι UB ? Δεν άνοιξα καν το spoiler με το κώδικα που έδωσε οπότε δεν νομίζω ότι με πήρες στο λαιμό σου. Σε αυτά που έκανα quote ο σχολιασμός μου ήταν σωστός.

 

Δεν είχα υπόψη το άλλο thread, δεν το παρακολουθούσα. :)

 

Το "σε πήρα στο λαιμό μου" αναφερόταν ακριβώς στο ενδεχόμενο να μην άνοιξες το spoiler επειδή προφανώς το άνοιξα εγώ.

Δημοσ.

...

Απλά ο migf1 είναι σαν τους καθηγητές πανεπιστημίου και σαν τους ανωτέρους στο στρατό. Πάντα αυτό που λένε είναι σωστό γιατί έχουν 30 χρόνια εμπειρία. Δεν δέχεται ποτέ την άποψη αλλουνού.

Με έχεις διορθώσει αρκετές φορές στο φόρουμ και συμφώνησα. Επίσης έχω ανοίξει αρκετά νήματα (και στο παρόν και σε άλλα φόρουμ) στα οποία ζητάω βοήθεια. Οπότε ο χαρακτηρισμός σου είναι μια ακόμα υπερβολή.

 

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

 

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

 

Όταν φτιάξεις ας πούμε κάνα game που θα τρέχει π.χ. 20% πιο αργά από τον ανταγωνισμό του, το να δικαιολογηθείς στον εργοδότη σου όταν σου ζητήσει εξηγήσεις λέγοντάς του π.χ. πως αυτοί χρησιμοποιούν UB τακτικές, σύμφωνα με το πρότυπο τάδε, παράγραφος δείνα, υποσημείωση 3, ενώ εγώ είμαι απόλυτα συμβατός, δεν νομίζω πως θα λειτουργήσει θετικά στην καριέρα σου. Ειδικά όταν τα υποτιθέμενα UBs λειτουργούν ας intended σε κάθε πιθανή κι απίθανη πλατφόρμα (ή έστω στο 99.5% εξ αυτών).

 

Τα είδα εκεί που τα έγραψες. Συγκεκριμένα είπες:

Το ίδιο κομμάτι ξανα-έκανα quote χτες και σου είπα μάλιστα να κοιτάξεις τους κώδικες που υπήρχαν 2-3 μηνύματα πριν από το δικό σου (το #990 δηλαδή). Δεν μίλησα πουθενά για τον κώδικα που είχες σε spoiler στο νήμα της c++.

Επικρότησες δηλαδή με +1 τα άσχετα links που παρέθεσε ο defacer, χωρίς να επικροτείς τα σχόλια που προηγούνταν των links, παρόλο που τα συμπεριέλαβες κι αυτά στην παράθεση που επικρότησες. Οκ!

 

Btw, το link που έδωσα εγώ στον defacer κάλυπτε και τις 2 περιπτώσεις: και την αριθμητική δεικτών και τα άσχετα links. Προέτρεψα επίσης να διαβάσετε και τα περιξ εκείνου του ποστ.

 

Πριν να ειρωνεύεσαι μάθε να διαβάζεις. Στο ίδιο τμήμα του προτύπου που έκανες quote έλεγε το ένα "πρόβλημα" του register.

 

Δεν είναι άιντε βάζουμε παντού ένα register και στη χειρότερη ο compiler θα το αγνοήσει. Υπό συνθήκες οδηγεί σε UB. Εκτός αυτού, ακόμη και στη περίπτωση που το αγνοήσει και το variable έχει κανονικά διεύθυνση, ο compiler είναι (σύμφωνα με το 103 footnote) υποχρεωμένος να μην επιτρέπει & για να πάρουμε την διεύθυνση του variable (επειδή μπορεί να βρίσκεται σε register και να μην έχει διεύθυνση). Που είναι τώρα το πρόβλημα ? Τα footnotes δεν είναι normative οπότε οδηγεί σε προβλήματα portability γιατί δεν είναι παραβίαση αν δεν το τηρήσει ο compiler. Έτσι μπορεί ένας compiler να σου επιτρέψει το & και άλλος όχι.

 

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

Λέγοντας πως το register είναι λάθος αναφερόμενος σε δικούς μου κώδικες (που το χρησιμοποιούν σχεδόν αποκλειστικά για loop counters) δεν είναι το ίδιο με αυτό που γράφεις τώρα. Στη C δεν είναι μόνο το register που μπορεί να δημιουργήσει προβλήματα αν χρησιμοποιηθεί blindly, αλλά και πάρα πολλά άλλα.

 

Θα μπορούσες να μου δείξεις κώδικές μου που κάνουν ΛΑΘΟΣ χρήση του register keyword?

 

Θα μπορούσες επίσης να μου δείξεις κώδικές μου που κάνουν ΛΑΘΟΣ χρήση του const?

 

Με ενδιαφέρει, ώστε να τους διορθώσω αν είναι όντως ΛΑΘΟΣ.

 

Επίσης, θα μπορούσες να αναφέρεις εσύ (μιας και ο defacer δήλωσε ταπωμένος) κάνα-δυο real-world compilers/platforms στα οποία δημιουργούν πρόβλημα οι κώδικές μου που αφορούν αυτά που συζητάμε, ένεκα αλόγιστης χρήσης των register, const ή/και int *walk = (int *) arr2d;

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

... 

Edit: βλέπω έκανες edit οπότε το παραπάνω quote δεν είναι ακριβές πλέον. Οπότε ας το συμπληρώσω με το εξής:

 

Αν ψάξω και βρω game developer που υποθετικά όντως το κάνει αυτό (άσχετα που πρακτικά δε θα το κάνει, μιας και αν πιστέψουμε το link που ο ίδιος έδωσες το ταχύτερο είναι allocation και διαχείριση σαν 1d -- αλήθεια, τα διαβάζεις εσύ τα links που ποστάρεις?), ξέρεις τι θα μου απαντήσει αν σέβεται τον εαυτό του; Ότι ναι το καταλαβαίνει πως είναι UB αλλά το κάνει γιατί δουλέυει στα μηχανήματα των πελατών του και στο τέλος της ημέρας αυτό είναι που μετράει. Μακάρι να μπορούσες να κάνεις και συ το ίδιο.

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

 

Εδώ δεν ξέρεις τι διαφορά έχει ένας data pointer από έναν function pointer, θες να μας κάνεις και υποδείξεις για το ποιος σέβεται και ποιος όχι τον εαυτό του στους game developers (καλά, αν έχεις δει κανέναν στο ύπνο σου θαύμα θα είναι).

 

Δεν έχεις γράψει ποτέ των ποτών ούτε μια γραμμή μέτριου έστω κώδικα με C pointers, ούτε έχεις περάσει ποτέ στη ζωή σου έστω και ξόφαλτσα έξω από την αυλή οποιοδήποτε C dev, αλλά επιμένεις να μας κάνεις θεωρητικά κηρύγματα περί UBs, σεβασμούς εαυτών και ότι άλλο σου την καρφώνει κατά καιρούς, μέσα από την άνεση της πολυθρόνας ενός φόρουμ, έχοντας απλώς ένα τεφτέρι στο ένα χέρι και το google στο άλλο.

 

Προφανώς υποθετικά το αναφέρουν στο Nadeau Software Consulting ως μια από τις συνήθεις πρακτικές, υποθετικά το αναφέρουν στην ύλη του Carnegie Mellon, υποθετικά το χρησιμοποιεί αυτός εδώ ο cocos στο iOS, υποθετικά το χρησιμοποιούν στον OpenCV, υποθετικά το χρησιμοποιώ κι εγώ, υποθετικά το χρησιμοποιούν όσοι ξέρω, υποθετικά το χρησιμοποιούν σε 1002 τομείς, όλα υποθετικά...

 

Τα κυριολεκτικά, τα σωστά, τα πρακτικά, τα δοκιμασμένα, τα production standards, είναι τα δικά σου και του ημίθεου.

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

Πραγματικά, λύσε μου μια απορία: έλεγες τέτοια πράγματα και πριν το 2008 ή απλά σε θυμήθηκε ο Hofmann στη διαθήκη του;

 

@timon: To err is human, αλλά αυτό θα μου πεις είναι ακόμα παλιότερο.  ;)

Δημοσ.

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

Δημοσ.

@timon: To err is human, αλλά αυτό θα μου πεις είναι ακόμα παλιότερο.  ;)

 

Είναι... indeed!

 

Btw..

 

Τα last 2 posts (εκτός της παρένθεσης του 2ου), παρότι "φαγωμάρικα", τα σπάσανε. 

 

 

Να.. δεν μπορείτε να το κάνετε έτσι.. να σκάει και εμάς λίγο το χειλάκι μας; :P :P

 

Δημοσ.

Παπι αυτος που έχεις αβαταρ απο τον πολυ προγραμματισμο έγινε έτσι?

Απο το πολυ γαμησι εγινε ετσι. Την μιση ρωσια ειχε πηδηξει αυτος ο αγιος ανθρωπος (γιατι ηταν και αγιος).
Δημοσ.

Τα last 2 posts (εκτός της παρένθεσης του 2ου), παρότι "φαγωμάρικα", τα σπάσανε. 

 

Έχω βαρεθεί και κάνω challenge τον εαυτό μου να βρίσκει δημιουργικές απαντήσεις (δε μπορείς να πεις βέβαια, και ο migf1 συνεργάζεται άψογα). Αλλά πόσο μακριά να πάει αυτό όταν είσαι άνθρωπος κι έχεις απέναντί σου το μοναδικό πράγμα που σίγουρα είναι άπειρο;

 

Λες να κάνω με την ευκαιρία έναν ανεπίσημο διαγωνισμό spot the reference?  :D

 

 

 

Οι σωστές απαντήσεις. Μη κλέβετε!

 

#1

 

 

 

 

#2

 

 

 

 

 

 

 

 

@παπι

 

 

αν ο Rasputin έγινε έτσι από το πολύ γαμήσι πραγματικά θα ήθελα να δω μια φωτογραφία αυτού του thread.

 

 

Δημοσ.

Έχω βαρεθεί και κάνω challenge τον εαυτό μου να βρίσκει δημιουργικές απαντήσεις (δε μπορείς να πεις βέβαια, και ο migf1 συνεργάζεται άψογα).

 

Όχι απλά συνεργάζεται... κάνετε και καλό duet...

 

 

Πιστεύω ότι εάν το γυρίσετε στα δημιουργικά θα ανέβει level η σχέση σας... προς το παρόν είστε παντρεμένοι 15 χρόνια που καθυστερεί το διαζύγιο...

 

Εάν το πάτε στο δημιουργικό, θα πάτε στα 45 χρόνια παντρειάς χωρίς sex τα τελευταία 7. Εκεί είναι όλα τα λεφτά!

 

 

 

 

Απο το πολυ γαμησι εγινε ετσι. Την μιση ρωσια ειχε πηδηξει αυτος ο αγιος ανθρωπος (γιατι ηταν και αγιος).

 

Βοήθειά μας, εν Αλάχ αδερφέ Παπί. Μία εικόνα του μπορώ να έχω να τον κάνω 'κόνισμα;

 

 

Επισκέπτης
Αυτό το θέμα είναι πλέον κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...