C99: Hunt

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: C99: Hunt

Δημοσίευσηαπό migf1 » 05 Μάιος 2012, 16:20

Μπράβο Ηλία!

Ακόμα δεν έχω δοκιμάσει στο Ubuntu, αλλά στα Windows κατόρθωσα να το τρέξω μοναχα στην Αγγλική του έκδοση. Όχι όμως μέσα από τα make που δίνεις, αλλά απευθείας από την γραμμή εντολών, ως εξής:

Κώδικας: Επιλογή όλων

gcc -std=c99 -Wall -Wextra *.c -Ic:/unix/gnuwin32/include -Lc:/unix/gnuwin32/lib -lreadline -lintl -o hunt.exe

Η παραπάνω εντολή λειτουργεί με την προϋπόθεση πως η readline ειναι εγκατεστημένη στον φάκελο: c:/unix/gnuwin32, με τα header αρχεία της στον φάκελο: c:/unix/gnuwin32/include και τα εκτελέσιμα της βιβλιοθήκης στον φάκελο: c:/unix/gnuwin32/lib.

Ομοίως και για την gettext (και πιο συγκεκριμένα το header αρχείο: c:/unix/gnuwin32/include/libintl.h και το εκτελέσιμο-βιβλιοθήκης: c:/unix/gnuwin32/lib/libintl.a ή/και libintl.dll.a ή/και libintl.lib).

Το πως εγκαθιστά κάποιος της βιβλιοθήκες readline και gettext στα Windows και πως ρυθμίζει το περιβάλλον του για να τις χρησιμοποιεί ξεφεύγει από το κεντρικό θέμα του νήματος (σε γενικές γραμμές, το mingw tool-chain, το cygwin, το gnuwin, το gtk+ for windows, και αρκετά άλλα τις εγκαθιστούν μαζί με διάφορα άλλα unix/linux-like tools).

Υπάρχει πρόβλημα όμως με τον τρόπο που κάνεις install το .mo αρχείο της μετάφρασης. Αφενός διότι όλο το scripting-language που χρησιμοποιείς μέσα στο make είναι sh/bash specific και αφετέρου επειδή την μετάφραση του hunt την εγκαθιστάς σε επίπεδο συστήματος (που είναι και πάλι linux specific: datadir = /usr/local/share).

Ένα καθοριστικό βήμα για να μπορεί να τρέξει η μετάφραση και σε Windows είναι για datadir να χρησιμοποιήσεις τον φάκελο του εκτελέσιμου και να δηνιουργήσεις εκεί το απαιτούμενο path. Αν δεις, αυτός είναι ο τρόπος που το έκανα στην τρίλιζα.

Δηλαδή...

Κώδικας: Επιλογή όλων

triliza\lang\el\LC_MESSAGES\triliza.mo
triliza\lang\el_GR\LC_MESSAGES\triliza.mo
triliza\lang\el_GR.UTF-8\LC_MESSAGES\triliza.mo
...
για κάθε γλώσσα δηλαδή, ξεχωριστό folder-structure μέσα όμως στον φάκελο του εκτελέσιμου. Αυτό το ανεξαρτητοποιεί από το λειτουργικό σύστημα.

Αργότερα, ή αύριο, θα κοιτάξω μήπως μπορεσω να τροποποιήσω τον κώδικά σου και το makefile ώστε να μπορούν να γίνουν comiple και σε Windows. Αν και προσωπικά δεν θα έχτιζα το .mo αρχείο της μετάφρασης μέσα από το make. Θα είχα έτοιμο το path-structure της κάθε γλώσσας μαζί με το τελικό .mo αρχείο, οπότε ο χρήστης δεν χρειάζεται καν να έχει εγκατεστημένο όλο το gettext toolchain στο σύστημά του για να κάνει compile τον κώδικα.

ΥΓ. Στα Windows δεν χρειάζεται καν η readline, γιατί το cmd.exe κρατάει αυτόματα history, καθώς επίσης παρέχει δυνατότητες editing στο input όλων των προγραμμάτων που τρέχουν σε κονσόλα.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: C99: Hunt

Δημοσίευσηαπό simosx » 05 Μάιος 2012, 16:53

Πολύ καλή δουλειά!

Προτείνω ως επόμενο βήμα να δεις την προσθήκη της υποστήριξης των autotools, όπου επιτρέπει αυτόματα την επίλυση ζητημάτων όπως
1. που είναι εγκατεστημένη η readline, κτλ
2. πως να εγκατασταθούν το εκτελέσιμο και οι μεταφράσεις
3. τι άλλες εξαρτήσεις χρειάζονται.
4. μάλλον θα προσθέσει αυτόματα υποστήριξη και για Windows

Ο πιο εύκολος τρόπος για να προσθέσεις υποστήριξη autotools είναι μέσω του Anjuta. Δοκίμασε να φτιάξεις ένα μικρό πρόγραμμα για να εξοικειωθείς.
Η ιδέα είναι να εισάγεις τα αρχεία σου σε ένα έργο του Anjuta που έχει υποστήριξη Autotools. Μόλις το καταφέρεις, δεν είναι απαραίτητο να χρησιμοποιείς το Anjuta, διότι θα έχεις πάρει τα αρχεία που σε ενδιαφέρουν. Αν θέλεις να δοκιμάσεις κάτι τέτοιο και έχεις περισσότερες απορίες, πες μου.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: C99: Hunt

Δημοσίευσηαπό Ilias95 » 05 Μάιος 2012, 22:33

migf1 έγραψε:Αν και προσωπικά δεν θα έχτιζα το .mo αρχείο της μετάφρασης μέσα από το make. Θα είχα έτοιμο το path-structure της κάθε γλώσσας μαζί με το τελικό .mo αρχείο, οπότε ο χρήστης δεν χρειάζεται καν να έχει εγκατεστημένο όλο το gettext toolchain στο σύστημά του για να κάνει compile τον κώδικα.

Έχω την εντύπωση ότι στην πραγματικότητα χρησιμοποιείς το make όσο το project είναι στο στάδιο της ανάπτυξης και όταν βγει σταθερή έκδοση διανέμεις και τα .mo αρχεία.
Δεν είμαι σίγουρος για το παραπάνω όμως.

migf1 έγραψε:Στα Windows δεν χρειάζεται καν η readline, γιατί το cmd.exe κρατάει αυτόματα history, καθώς επίσης παρέχει δυνατότητες editing στο input όλων των προγραμμάτων που τρέχουν σε κονσόλα.

Όντως, δοκίμασα την πρώτη έκδοση του Hunt (χωρίς readline) σε Windows XP και κρατούσε αυτόματα ιστορικό εντολών.
Πάλι χρειάζεται η readline όμως για την completion. Αυτό με το editing δεν το κατάλαβα.

Θα ψαχτώ με τα autotools που προτείνει ο Σίμος για να δω αν μπορώ να αυτοματοποιήσω περισσότερο τα πράγματα και για Linux και για Windows.

Off topic:
Με την εγκατάσταση προγραμμάτων που έχουν εξαρτήσεις από εξωτερικές βιβλιοθήκες στα Windows αλήθεια τι γίνεται;
Δεν θυμάμαι ποτέ πχ. να πήγα να εγκαταστήσω κάποιο πρόγραμμα και να μου είπε πρέπει να έχεις την τάδε βιβλιοθήκη στο σύστημα σου...
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: C99: Hunt

Δημοσίευσηαπό migf1 » 06 Μάιος 2012, 09:41

Ilias95 έγραψε:
migf1 έγραψε:
migf1 έγραψε:Στα Windows δεν χρειάζεται καν η readline, γιατί το cmd.exe κρατάει αυτόματα history, καθώς επίσης παρέχει δυνατότητες editing στο input όλων των προγραμμάτων που τρέχουν σε κονσόλα.

Όντως, δοκίμασα την πρώτη έκδοση του Hunt (χωρίς readline) σε Windows XP και κρατούσε αυτόματα ιστορικό εντολών.
Πάλι χρειάζεται η readline όμως για την completion. Αυτό με το editing δεν το κατάλαβα.

Σωστά, το ξέχασα το completion. Editing εννοώ τη δυνατότητα να κάνεις edit τη γραμμή εντολών πριν την οριστικοποιήσεις με ENTER.

έγραψε:Off topic:
Με την εγκατάσταση προγραμμάτων που έχουν εξαρτήσεις από εξωτερικές βιβλιοθήκες στα Windows αλήθεια τι γίνεται;
Δεν θυμάμαι ποτέ πχ. να πήγα να εγκαταστήσω κάποιο πρόγραμμα και να μου είπε πρέπει να έχεις την τάδε βιβλιοθήκη στο σύστημα σου...

Off topic:
Το πιο εύκολο είναι να εγκαταστήσεις ένα εκ των GNU WIn32 ή Cygwin.

Το 1ο είναι όλα τα GNU Utilities αλλά με Windows binaries (εναλλακτικά μπορείς να δεις τα UnixUtils, αλλά από αυτό το Link: http://sourceforge.net/projects/unxutils/ που είναι πιο ενημερωμένο, 2007 έναντι του 2003 που είναι στο επίσημο site).

Το 2ο είναι κάτι σαν το αντίστροφο του wine σε Posix. Δηλαδή σου παρέχει Posix περιβάλλον & λειτουργικότητα αλλά με native Windows executables.

Και για τα 2 θα πρέπει να εγκαταστήσεις και τα dev-packs των βιβλιοθηκών που θέλεις να χρησιμοποιήσεις σε προγράματα που φτιάχνεις. Και προφανώς να βάλεις τα include & lib folders τους είτε σε κατάλληλα environment variables των Windows, είτε να τα δηλώνεις στη γραμμή εντολών του gcc με -Ι και -L.

Υπάρχουν κι άλλα, συνήθως λιγότερο πλήρη, όπως π.χ. το mingw που είναι ένα πολύ δημοφιλές port του gcc toolchain για Windows (btw, αυτό είναι ο βασικό C compiler που χρησιμοποιώ εγώ, με 2η την Pelles-C), που μεταξύ άλλων περιέχει και το MSYS, ένα bash-shell port δανεισμένο από το bash-shell port του Cygwin (του Cygwin είναι πιο πλήρες).

Επίσης, αν κατεβάσεις για παράδειγμα το all-in-one bundle του GTK+ για Windows (http://www.gtk.org/download/win32.php) περιέχει μέσα του και το gettext. Αυτό είναι και καλό και κακό. Καλό γιατί το bundle σετάρει τα άντα αυτόματα και το μόνο που χρειάζεται είναι απλά να ορίσεις 1-2 GTK+ related environment variables και να το βάλεις και στο PATH, κακό γιατί αν π.χ. έχεις εγκατεστημένο και το GNUWin32 τότε θα έχεις 2 κόπιες του gettext σε 2 διαφορετικά μέρη, κι ενδεχομένως 2 διαφορετικές εκδόσεις. Gettext περιέχει και το MSYS του mingw (3o δηλαδή :lol:)

Αν θέλεις να πειραματιστείς θα σου πρότεινα να δεις το GNU WIn32 που και πιο μαζεμένο είναι, και τελειώς native για Windows και για κάθε tool σου δίνει επιλογή να το κατεβάσεις είτε μόνο του και ξεχωριστά τα dependencies του, είτε με ένα Setup που εγκαθιστά και το tool και τα depedencies του αυτόματα. Προφανώς μπορείς να κατεβάσεις και πολλά packages μαζεμένα ή και όλα μαζί. Όλα θα μπαίνουν στον ίδιο φάκελο, οπότε θα τα έχεις μαζεμένα όλα σε ένα μέρος.

Το πρόβλημα με το GNU WIn32 είναι πως τα tools δεν ενημερώνονται μετους ίδιους ρυθμούς που ενημερώνονται τα αυθεντικά για Posix περιβάλλοντα. Για παράδειγμα, η τελευταία ενημέρωση ήταν το 2010.

Το Cygwin είναι πολύ πιο πλήρες και πολύ πιο ενημερωμένο (ενημερώνεται πολύ πιο συχνά) αλλά δεν στο συνιστώ, γιατί ουσιατσικά φτιάχνει ένα Posix layer πάνω από τα Windows και δουλεύει πάνω σε αυτό. Αυτό έχει σαν αποτέλεσμα να μην μπορείς να χρησιμοποιήσεις με αξιόπιστο τρόπο tools & libraries που τα έχεις κατεβάσει π.χ. απευθείας από τα sites των κατασκευαστών τους. Για παράδειγμα, αν δεις τη σελίδα του GTK+ για Windows (στο Download) σου λέει πως αυτό που θα κατεβάσεις ΔΕΝ πρέπει να το χρησιμοποιήσεις μέσα από Cygwin, γιατί το Cygwin έχει τις δικές του versions.

Για ξεκίνημα σου προτείνω GNU Win32 κι επειδή έχει παλιά έκδοση του gcc, βάλε και το MinGW32. Το shell του mingw (MSYS) είναι επίσης πιο πρόσφατο από του GNU Win32. Βάλτα σε 2 διαφορετικούς φακέλους του καθένα, και απλά βάλε στο PATH των Windows πρώτα τους φακέλους του mingw32 και μετά του GNU Win32.

Οπότε, όταν π.χ. γράφεις στη γραμμή εντολών: make θα κοιτάει για το make.exe πρώτα στους φακέλους του mingw και αν δεν το βρει εκεί, τότε θα ψάχνει στον φάκελο του gnuwin32 ;)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: C99: Hunt

Δημοσίευσηαπό Ilias95 » 06 Μάιος 2012, 12:01

Off topic:
@migf1
Ίσως να μην το διατύπωσα σωστά, αλλά παρ' όλα αυτά πολύ χρήσιμες οι πληροφορίες. :D

Τι εννοούσα:
Έστω ότι έχω αναπτύξει μια μεγάλη εμπορική εφαρμογή η οποία όμως έχει εξαρτήσεις σε εξωτερικές βιβλιοθήκες.
Πχ. χρειάζεται για να τρέξει την readline, το gettext και άλλες δύο βιβλιοθήκες.
Όταν θα την πάρει στα χέρια του ένας απλός χρήστης Windows η εγκατάσταση φαντάζομαι θα γίνει αυτόματα. Δεν θα του πω κατέβασε εκείνο, το άλλο κλπ...
Πως επιτυγχάνουμε κάτι τέτοιο;
Έχω την εντύπωση ότι όταν διανέμεται ένα πρόγραμμα (για εγκατάσταση σε Windows), διανέμονται μόνο τα binary αρχεία.
Μέσα σε αυτά συμπεριλαμβάνεται ο κώδικας των βιβλιοθηκών;

Δηλαδή και στο Linux αν πχ. δώσω μονάχα το εκτελέσιμο του Hunt σε κάποιον με Ubuntu ο οποίος δεν έχει την readline και το gettext εγκατεστημένα, θα τρέχει κανονικά;
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: C99: Hunt

Δημοσίευσηαπό migf1 » 06 Μάιος 2012, 12:43

Off topic:
Αυτό είναι η διαφορά μεταξύ static & shared libraries. Από τη στιγμή που κάνεις link το εκτελέσιμό σου με το static object file της βιβλιοθήκης (το .o στην περίπτωση του gcc ή της συλλογής των .o στο .a) ο χρήστης δεν χρειάζεται να έχει εγκατεστημένο τίποτα στο σύστημά σου. ΟΙ βιβλιοθήκες έχουν ενσωματωθεί στο εκτελέσιμο του προγράματός σου.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: C99: Hunt

Δημοσίευσηαπό simosx » 07 Μάιος 2012, 02:45

Ilias95 έγραψε:
Δηλαδή και στο Linux αν πχ. δώσω μονάχα το εκτελέσιμο του Hunt σε κάποιον με Ubuntu ο οποίος δεν έχει την readline και το gettext εγκατεστημένα, θα τρέχει κανονικά;


Αυτή τη στιγμή γίνεται διπλή συζήτηση μέσα στο offtopic,

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

2. πως αντιμετωπίζουμε εξαρτήσεις σε Ubuntu και πακεταρίσματα.
Βασικά είναι αρκετά εύκολο, και είναι θέμα για πακετάρισμα αρχείων .deb. Με λίγα λόγια μπαίνουν ως εξαρτήσεις τα πακέτα readline, κτλ στο νέο DEB που παράγουμε, και κατά την εγκατάσταση το Κέντρο λογισμικού θα φτιάξει τις εξαρτήσεις σωστά. Αν θέλεις να πακετάρεις σε .RPM, κάνεις κάτι αντίστοιχο. Για DEB ο medigeek έχει ξεκινήσει νήμα για πακετάρισμα, οπότε και για αυτό η συζήτηση πάει αλλού, στο νήμα που ξεκίνησε ο medigeek και βοηθάει για να πακετάρουμε. Εδώ μπορείς κιόλας να συνδέσεις το αποθετήριο με ένα PPA ώστε το Launchpad να φτιάχνει για σένα τα απαραίτητα PPA. Και πάλι, είναι ξεχωριστό θέμα συζήτησης.

Θεωρώ ότι η μετάβαση προς τη χρήση autotools (μέσω Anjuta) είναι το πιο ενδιαφέρον νέο πράγμα που μπορείς να μάθεις και ουσιαστικά επιτρέπει να ολοκληρώσεις τις γνώσεις σου στη δημιουργία νέου ελεύθερου λογισμικού.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: C99: Hunt

Δημοσίευσηαπό Ilias95 » 07 Μάιος 2012, 12:40

Για το πακετάρισμα και την αυτοματοποίηση σε Windows ρώτησα πιο πολύ πληροφοριακά.
Δεν με ενδιαφέρει να το κάνω προς το παρών. Ούτε και PPA.

simosx έγραψε:Θεωρώ ότι η μετάβαση προς τη χρήση autotools (μέσω Anjuta) είναι το πιο ενδιαφέρον νέο πράγμα που μπορείς να μάθεις και ουσιαστικά επιτρέπει να ολοκληρώσεις τις γνώσεις σου στη δημιουργία νέου ελεύθερου λογισμικού.

Συμφωνώ ότι το πιο ενδιαφέρον είναι τα autotools.

Δοκίμασα να κάνω ένα Project στο Anjuta όπως είπες, αλλά χάθηκα τελείως. Οκ, δημιουργήθηκαν κάποια αρχεία αυτόματα. Μετά;
Κάποιος οδηγός; (Θυμάμαι ότι ανέφερες πως έχεις γράψει κάποιον οδηγό στο LinuxInside. Υπάρχει διαθέσιμος online;)
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: C99: Hunt

Δημοσίευσηαπό simosx » 07 Μάιος 2012, 13:28

Ilias95 έγραψε:
Δοκίμασα να κάνω ένα Project στο Anjuta όπως είπες, αλλά χάθηκα τελείως. Οκ, δημιουργήθηκαν κάποια αρχεία αυτόματα. Μετά;
Κάποιος οδηγός; (Θυμάμαι ότι ανέφερες πως έχεις γράψει κάποιον οδηγό στο LinuxInside. Υπάρχει διαθέσιμος online;)


Γενικά τον βάζουν στο www.linuxinside.gr μετά από κάποιο χρονικό διάστημα. Το κείμενο που έγραψα είναι σε μορφή κατάλληλο για στοιχειοθεσία οπότε μάλλον δε θα βοηθήσει ως έχει.
Θα πρότεινα να ξεκινούσες μια νέα δημοσίευση με τίτλο π.χ. «Υποστήριξη autotools στο πρόγραμμά μου;»
όπου θα βοηθήσουμε όλοι να απαντήσουμε σε ερωτήματα. Και θα μπορούν και άλλα μέλη να μάθουν ταυτόχρονα.

Γενική περιγραφή, http://en.wikipedia.org/wiki/GNU_build_system
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: C99: Hunt

Δημοσίευσηαπό migf1 » 07 Μάιος 2012, 16:23

Προσωπικά θεωρώ πιο βασική γνώση τη δημιουργία προγραμμάτων απελευθερωμένων από εξαρτήσεις, ο κώδικας των οποίων μπορεί να γίνει compile ανεξαρτήτως πλατφόρμας. Ομοίως και την παραγωγή εκτελέσιμων που είναι μεν αναγκαστικά platform-specific, αλλά είναι απελευθερωμένα από εξαρτήσεις άλλων προγραμμάτων. Πάντα μια και μιλάμε για στάδιο εκμάθησης και αποκόμισης γνώσεων προγραμματισμού.

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

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

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

Ένα απλό παραδειγμα, αντί για ...

Μορφοποιημένος Κώδικας: Επιλογή όλων
...
puts( "string1 string2 string3");

κάτι σαν...

Μορφοποιημένος Κώδικας: Επιλογή όλων
char *messages[MAX_MESSAGES];
enum LangId lang = LANG_EN;
...
if ( LANG_EL == lang )
load_messages( messages, el_fname ); /* load strings from el_file into messages*/
else if ( LANG_DE == lang)
load_messages( messages, de_fname ); /* load strings from de_file into messages*/
...

for (i=0; i < MAX_MESSAGES; i++)
printf( "%s ", messages[i] );
puts("\b\n");
...


Αυτό είναι κατά την άποψή μου πολύ πιο ενδιαφέρον προγραμματιστικά. Καθώς και η αυτονόμηση εν γένει. Κατόπιν, μπορεί να περάσει σε shared libraries, κλπ.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι