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

Χωρις βιβλιοθηκες γινεται??


PCganster

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

καλησπερα παιδια

εχω παρατηρησει κατι σε πολλες γλωσσες

για να φιαξεις GUI ENVORMNENT θελεις βιβλιοθηκες {καλα δεν μιλαω για την python.........ολο βιβλιοθηκες ειναι.... }Ακομα και στην C++ πρεπει να χρησιμοποιηησεις την καταλληλη βιβλιοθηκη για GUI και αλλες λειτουργιες

 

οι βιβλιοθηκες δεν ειναι τιποτε αλλο απο συναρτησεις για να διευκολυνομαστε αλλα δεν θα μπορουσα να φανταστω πως θα μπορουσε να ταν ο κωδικας....

 

για αυτο ηθελα να εμβαθυνω τις γνωσεις μου πανω σε αυτες........πως δημιουργουν GUI (για παραδειγμα Tkinter για python η windows.h για C++) .....πως μπορουν να διαβαζουν και να τροποποιουν αρχεια {os για python για παραδειγμα ) η ακομα πως παιρνουν οδηγιες τοσο χαμηλου επιπεδου αλλαζοντας ακομα και το μεγεθος εικονων!!! κ.α {image στην python για παραδειγμα)

ευχαριστω πολυ

PCganster :-) :-)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ναι και οχι. Πανω σε OS ειναι 300% σιγουρο οτι δεν μπορεις να φτιαξεις GUI, και αυτο επειδη δεν το φτιαχνεις εσυ αλλα το OS. Χωρις OS μπορεις σχετικα ευκολα να το κανεις με τη βοηθεια του BIOS (με 13223123123213132 περιορισμους) ή αρκετα δυσκολα με την gpu.

 

Τελος οι "βιβλιοθηκες" που λες δεν ειναι μονο μια σουμα απο κωδικα παρκαρισμενη στον σκληρο. Πολλες συναρτησεις ειναι ηδη στην μνημη και παιζουν το ρολο του μεσαζοντα, δηλαδη σου δινουν προσβαση σε αλλο επιπεδο με αλλες συναρτησεις που πανε σε αλλο επιπεδο κλπ.

 

Πχ οταν φτιαχνεις ενα προγραμμα σε python, μπορει να μη δεις ουτε μια γραμμη κωδικα που να θυμιζει windows, αλλα αν το τρεξεις σε windows θα δεις οτι σε καποιο σημειο θα καλεσει την CreateWindow. Αυτο θα γινει επειδη σε windows για να τρεξει κατι πρεπει να εχεις εναν handler σε ενα window, και για να δεις κατι στην οθονη των windows πρεπει να υπαρχει ενα DC. Δεν μπορεις να το παρακαμψεις.

 

Αυτο για τα λειτουργικα, σε ξερο hardware κανεις οτι θες αλλα θα ειναι bounded.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

καλησπερα παιδια

εχω παρατηρησει κατι σε πολλες γλωσσες

για να φιαξεις GUI ENVORMNENT θελεις βιβλιοθηκες {καλα δεν μιλαω για την python.........ολο βιβλιοθηκες ειναι.... }Ακομα και στην C++ πρεπει να χρησιμοποιηησεις την καταλληλη βιβλιοθηκη για GUI και αλλες λειτουργιες

 

οι βιβλιοθηκες δεν ειναι τιποτε αλλο απο συναρτησεις για να διευκολυνομαστε αλλα δεν θα μπορουσα να φανταστω πως θα μπορουσε να ταν ο κωδικας....

 

για αυτο ηθελα να εμβαθυνω τις γνωσεις μου πανω σε αυτες........πως δημιουργουν GUI (για παραδειγμα Tkinter για python η windows.h για C++) .....πως μπορουν να διαβαζουν και να τροποποιουν αρχεια {os για python για παραδειγμα ) η ακομα πως παιρνουν οδηγιες τοσο χαμηλου επιπεδου αλλαζοντας ακομα και το μεγεθος εικονων!!! κ.α {image στην python για παραδειγμα)

ευχαριστω πολυ

PCganster :-) :-)

Δεν διαφέρουν σε κάτι σημαντικό από τα stand-alone προγράμματα που δεν είναι βιβλιοθήκες, πέρα από το ότι είναι sharable.

 

Δηλαδή, ότι κάνει μια βιβλιοθήκη μπορείς να το κάνεις και σε stand-alone πρόγραμμα... να φτιάξεις δηλαδή αντίστοιχες συναρτήσεις αποκλειστικά για το δικό σου πρόγραμμα.

 

Τώρα, το πως φτιάχνουν GUIs κλπ, χρησιμοποιούν κι αυτές πιο low-level βιβλιοθήκες (για να μην γράφουν τα πάντα από την αρχή ή/και για να είναι cross-platform) και χτίζουν πάνω σε αυτά δικά τους πιο high-level πράγματα, τα οποία στα παρέχουν κατόπιν έτοιμα όλα-μαζί, για να τα χρησιμοποιήσεις και να χτίσεις πάνω σε αυτά δικά σου πράγματα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Εν συντομία, φυσικά και γίνεται χωρίς βιβλιοθήκες, αλλά γιατί να ξαναανακαλύπτεις τον τροχό;

 

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

 

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

 

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

 

Ενα βασικό πρόβλημα με το να γράψεις δική σου βιβλιοθήκη είναι το πως θα τεστάρεις τον κώδικά σου. Το να γράψεις σωστά και αναλυτικά tests είναι σίγουρα περισσότερη δουλειά από το να γράψεις απλά μερικες συναρτήσεις που χρειάζεσαι. Άρα θα χρειαστεί να αφιερώσεις ακόμα περισσότερο χρόνο.

 

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

 

Επίσης πολύ συχνά η βιβλιοθήκη σου θα έχει πολύ λιγότερα features από μία άλλη που μπορείς να βρεις έτοιμη. Σκέψου ότι υπάρχουν βιβλιοθήκες που από πίσω τους έχουν χιλιάδες ανθρωποώρες δουλειάς. Πως μπορείς εσύ μόνος σου να φτάσεις εκεί; Μία έτοιμη βιβλιοθήκη στα δίνει αυτά έτοιμα.

 

Μία άλλη παράμετρος, που μπορεί να παίζει ρόλο σε ορισμένες περιπτώσεις, είναι η ταχύτητα του κώδικα. Πχ είναι εξαιρετικά αμφίβολο ότι ο μέσος προγραμματιστής μπορεί να γράψει πιο efficient code από αυτόν που θα βρεθεί στις εξειδικευμένες βιβλιοθήκες αριθμητικής ανάλυσης (πχ BLAS, ATLAS κτλ).

 

Υπάρχουν και άλλα πράγματα που μπορούν να αναφερθούν. Το ένα είναι το να είναι η εφαρμογή σου cross-platform όπως αναφέρθηκε προηγουμένως. Μία βιβλιοθήκη σαν το Qt ή την GTK σου κρύβει την πολυπλοκότητα των low-level λεπτομερειών των διάφορων λειτουργικών και σου δίνει ένα ενιαίο API (abstraction).

 

Τα παραπάνω φυσικά ισχύουν όταν υπάρχουν έτοιμες βιβλιοθήκες που κάνουν τη δουλειά σου. Όταν δεν υπάρχει έτοιμο αυτό που θέλεις, τότε φυσικά είσαι υποχρεωμένος να σηκώσεις τα μανίκια και να στρωθείς στη δουλειά. Πάντως εν γένει, οι  βιβλιοθήκες κάνουν καλό ;) :P

  • Like 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Βέβαια για να είμαστε δίκαιοι, υπάρχουν και άσχημα στη χρήση των βιβλιοθηκών, κυρίως σε μικρο-μεσαία projects (προς μικρά) που κάτι αναφέρθηκε ήδη, αλλά και σε κάποιες ειδικές περιπτώσεις. Τα παρακάτω αφορούν κυρίως native γλώσσες.

 

Το πρώτο είναι το ανεπιθύμητο bloating που προσθέτουν στο πρόγραμμά μας (ειδικά αν δεν είναι κατάλληλα σχεδιασμένες με modular λογική φορτώματος κατά το linking... π.χ. κάθε public συνάρτηση να έχει δικό της, ξεχωριστό object αρχείο μέσα στην βιβλιοθήκη).

 

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

 

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

 

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

 

Όπως τα πάντα στον προγραμματισμό, έτσι και οι βιβλιοθήκες εμπεριέχουν την έννοια του trade-off.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

απο οτι βλεπω και οσο ζυγιζω την κατασταση μου φαινεται οτι η δημιουργια μιας δικια μου βιβλιοθηκης ειναι η καλυτερη λυση....σου προσφερει γνωσεις εμβαθυνμσης και εχεις και τον απολυτο ελενχο της εφαρμογης σου...εσεις τι λετε....?? πια ειναι η γνωμη σας??

ΥΣ ευχαριστω για την αμεση αναποκριση σας!!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Νομίζω ότι συνδυάζοντας τη δική μου απάντηση με αυτήν του migf1 μπορείς να δεις με αρκετή πληρότητα το θέμα. Το τι θα κάνεις τελικά εξαρτάται από το σκοπό σου, το χρόνο που διαθέτεις αλλά και από την ιδιοσυγκρασία σου.

 

friendly tip. Υπάρχουν ορισμένοι τομείς (πχ xml, regex) που πραγματικά δεν έχεις κανένα λόγο να προσπαθήσεις να δημιουργήσεις μία βιβλιοθήκη μόνος σου. Εκτός και αν το κάνεις καθαρά για λόγους εκμάθησης/εξάσκησης, πρώτα ψάξε το τι υπάρχει έτοιμο και σε πιο βαθμό σε καλύπτει. Αφού δεις αυτά αποφασίζεις

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

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