Λίγες σκέψεις για τις γλώσσες προγραμματισμού

...ασύγχρονα μαθήματα από τους guru της κοινότητας

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

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό migf1 » 02 Δεκ 2011, 13:10

lucinos έγραψε:
migf1 έγραψε:
Μίλησες για παράδειγμα για numeric systems, δηλώνοντας εντυπωσιασμένος από τη διαθεσιμότητα του NumPy στην Python. Κατά βάση σε τι διαφέρει ας πούμε από το να είσαι C programmer και για εξειδικευμένους μαθηματικούς υπολογισμούς να χρησιμοποιείς μια από τις πολλές, εξωτερικές, μαθηματικές βιβλιοθήκες για C;

Πίστεψέ με διαφέρει πάρα πολύ.


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

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό migf1 » 02 Δεκ 2011, 13:29

migf1 έγραψε:
lucinos έγραψε:
Πίστεψέ με διαφέρει πάρα πολύ.

Πάνω σε τι υπόβαθρο να σε πιστέψω; Απλά επειδή το λες;


Απλά προς χάρη της ενημέρωσης, δες για παράδειγμα την NymPy σε αντιπαράθεση χαρακτηριστικών με την επίσης free και πολύ δημοφιλή GSL για C/C++:

Προφανώς πρόκειται για τη νύχτα με τη μέρα :P
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό lucinos » 02 Δεκ 2011, 16:19

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

Επαναλαμβάνω ότι σε μένα (και έχω κάποια εμπειρία σε αυτό) είναι προφανές ότι είναι λάθος να επιλέξεις C παρά μόνο όταν ξέρεις πολύ καλά τι κάνεις. Αν ξέρεις τι κάνεις τότε ξέρεις τι κάνεις και κάνε το, αλλά συνήθως όταν κάνεις σοβαρή δουλειά και δεν λύνεις ασκησούλες θέλεις μια γλώσσα με την οποία να πιάνεις συζήτηση με το μηχάνημα. Δεν μπορείς να το κάνεις αυτό με την C.
Spoiler: show
Γνώσεις → Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Μέτριος
Λειτουργικό → Ubuntu 11.04 natty 64-bit (el_GR.UTF-8)
Προδιαγραφές → CPU: 4x Intel Core i5 CPU 750 2.67GHz ‖ RAM 3953 MiB ‖ ASRock P55DE3
Κάρτες γραφικών: nVidia G92 [GeForce GTS 250] ⎨10de:0615⎬ (rev a2)
Δίκτυα: eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller ⎨10ec:8168⎬ (rev 03)
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό migf1 » 02 Δεκ 2011, 17:02

lucinos έγραψε:Προσωπικά πιστεύω ότι μόνο ένας που δεν έχει κάνει αυτήν την δουλειά μπορεί να απορεί σε τι διαφέρει. Διαφέρει στο ότι τον κώδικα που γράφεις σε Python ή Matlab ή κάτι αντίστοιχο, μπορείς να τον αναπτύξεις πολύ πιο γρήγορα και εύκολα, μπορείς να τον τεστάρεις πολύ πιο εύκολα, μπορείς να τον βελτιώσεις πολύ πιο εύκολα, μπορείς να τον συντηρήσεις πολύ πιο εύκολα, μπορείς να τον διαβάσεις πολύ πιο εύκολα, μπορείς να τον δώσεις σε κάποιον άλλον να τον διαβάσει πολύ πιο εύκολα.

Να υποθέσω λοιπόν πως έχεις δουλέψει σε C με libraries και C specific RAD tools (ή ακόμα καλύτερα έχεις φτιάξει δικές σου που κατόπιν τις χρησιμοποιείς στα νέα σου πρότζεκτ) είτε σε γραφικό περιβάλλον είτε σε command line, οπότε είσαι σε θέση να κρίνεις και να συγκρίνεις; Π.χ. θεωρείς κώδικα γραμμένο σε glib δυσανάγνωστο, δύσχρηστο, δυσκολο-συντήρητο. Οπότε είναι πραγματικά απορίας άξιο το ότι οι περισσότερες γλώσσες, frameworks, rad tools, λειτουργικά, games, κλπ είναι γραμμένα σε C ή C++

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

To κοκκινισμένο (από μένα) είναι πραγματικά για HIGHLIGHT !!!!!!!
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό lucinos » 03 Δεκ 2011, 10:14

Από ένα σημείο και μετά είναι δύσκολο να υποστηρίξω το αυτονόητο. Και ξαναρωτάω. Έχεις ποτέ επιχειρήσει να λύσεις ένα επιστημονικό πρόβλημα ή όποτε κάθεσαι να προγραμματίσεις ξέρεις με απόλυτη ακρίβεια τον αλγόριθμο που θέλεις να δώσεις στον υπολογιστή; Γιατί αν συμβαίνει το δεύτερο τότε ζούμε σε διαφορετικούς κόσμους.
Spoiler: show
Γνώσεις → Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Μέτριος
Λειτουργικό → Ubuntu 11.04 natty 64-bit (el_GR.UTF-8)
Προδιαγραφές → CPU: 4x Intel Core i5 CPU 750 2.67GHz ‖ RAM 3953 MiB ‖ ASRock P55DE3
Κάρτες γραφικών: nVidia G92 [GeForce GTS 250] ⎨10de:0615⎬ (rev a2)
Δίκτυα: eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller ⎨10ec:8168⎬ (rev 03)
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό migf1 » 03 Δεκ 2011, 12:59

lucinos έγραψε:Από ένα σημείο και μετά είναι δύσκολο να υποστηρίξω το αυτονόητο. Και ξαναρωτάω. Έχεις ποτέ επιχειρήσει να λύσεις ένα επιστημονικό πρόβλημα ή όποτε κάθεσαι να προγραμματίσεις ξέρεις με απόλυτη ακρίβεια τον αλγόριθμο που θέλεις να δώσεις στον υπολογιστή; Γιατί αν συμβαίνει το δεύτερο τότε ζούμε σε διαφορετικούς κόσμους.

Δεν ξέρω πως εκλαμβάνεις το αυτονόητο. Όπως έγραψα και παραπάνω, αν είσαι ήδη C programmer (κάτι που ίσως το παρέβλεψες) και θέλεις να ασχοληθείς με numeric computations τότε το αυτονόητο δεν είναι να μάθεις Python + NumPy ή Matlab ή κάτι άλλο, αλλά να χρησιμοποιήσεις μια εξωτερική βιβλιοθήκη για C. Από τα έως τώρα γραφόμενα σου διαφαίνεται (έως είναι προφανές) πως δεν είσαι εξοικειωμένος με αυτό το concept ( για τη C + libraries εννοώ ). Ανάλογα το αντικείμενο, η παραγωγικότητα πλησιάζει ακόμα και ξεπερνάει την αντίστοιχη μιας HL γλώσσας (διότι επαναλαμβάνω, στη βάση τους αυτές οι γλώσσες είναι ισοδύναμες με τη χρήση μιας LL γλώσσας + χρήση βιβλιοθηκών).

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

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

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό Dimitris » 03 Δεκ 2011, 14:01

@migf1, δεν είναι μόνο οι βιβλιοθήκες. Επειδή γενικολογούμε χάνοντας ίσως την ουσία, θα σου ζητήσω να γράψεις σε C ένα bullet-proof πρόγραμμα που να υπολογίζει το παραγοντικό ενός αριθμού που διαβάζει από τη γραμμή εντολών. Τι έννοω με bullet-proof; να τρέχει ό,τι και να του δώσεις, να μην επιστρέφει bus-error, segmentation fault, κλπ. Μη ξεχνάς ότι το παραγοντικό ορίζεται και για πραγματικούς αριθμούς με τη βοήθεια της συνάρτησης Γ καί ότι για μεγάλους αριθμούς υπάρχει ο προσεγγιστικός τύπος του sterling. Είμαι σίγουρος ότι υπάρχει σε κάποια βιβλιοθήκη. Και έπειτα θα κάτσουμε να το συγκρίνουμε με το αντίστοιχο σε python όσο το δυνατό πιο αντικειμενικά γίνεται ώστε να καταλήξουμε σε ένα συμπέρασμα με την ελπίδα ότι στη διαδρομή θα μάθουμε όλοι κάτι καινούριο.

To παραγοντικό είναι το πλέον απλό παράδειγμα και θα υποθέσω πώς οι διαφορές σε δυσκολότερους αλγόριθμους πολλαπλασιάζονται.
Τελευταία επεξεργασία από Dimitris και 03 Δεκ 2011, 14:18, έχει επεξεργασθεί 2 φορά/ες συνολικά
Άβαταρ μέλους
Dimitris
saintTUX
saintTUX
 
Δημοσιεύσεις: 1357
Εγγραφή: 13 Μάιος 2008, 13:57
Τοποθεσία: Θεσσαλονίκη
Εκτύπωση

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό Dimitris » 03 Δεκ 2011, 14:13

Επίσης, παράλληλα με το προηγούμενο, προσπάθησε να υλοποιήσεις σε C τη δυνατότητα που περιγράφω στο παρακάτω νήμα: https://forum.ubuntu-gr.org/viewtopic.p ... sp#p206890
Άβαταρ μέλους
Dimitris
saintTUX
saintTUX
 
Δημοσιεύσεις: 1357
Εγγραφή: 13 Μάιος 2008, 13:57
Τοποθεσία: Θεσσαλονίκη
Εκτύπωση

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό migf1 » 03 Δεκ 2011, 14:50

Προσωπικά δεν γενικολογώ και θέλω να πιστεύω πως επίσης δεν χάνω την ουσία. Θα σου δώσω 2 links για να βγάλεις τα συμπεράσματά σου:

GNU MP Bignum Library προφανώς για C (αλλά με wrappers/bindings και για άλλες γλώσσες )
GMP bignums vs. Python bignums: performance and code examples

Ερώτηση κρίσεως τώρα: ποια είναι η ουσία; η ταχύτητα παραγωγής, η ταχύτητα εκτέλεσης, η ακρίβεια στους υπολογισμούς, κάποιος ή κάποιοι συνδυασμοί τους; Αν η απάντηση είναι θετική για οποιονδήποτε συνδυασμό δεν περιλαμβάνει την ταχύτητα παραγωγής, τότε η χρήση της GNU MP Bignum Library φαντάζει μονόδρομος. Αν είσαι ήδη C programmer δεν έχεις απολύτως κανένα λόγο να πας σε Python μόνο και μόνο για να φτιάξεις μέσα στην Python wrapper σε C που θα χρησιμοποιεί την gmplib για να κατεβάσεις το execution time (στο παράδειγμα του 2ου link κατέβασε τον χρόνο εκτέλεσης κατά 86% ... συγκριτικά με NumPy δεν ξέρω αν και τι gain υπάρχει, δεν ξέρω καν αν η NymPy έχει όριο στο precision... στην gmplib το ορίζεις εσύ όσο θέλεις, με όριο τη διαθέσιμη μνήμη του συστήματός σου).

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

Btw, η τυπική διαδικασία καλέσματος μιας οποιασδήποτε βιβλιοθήκης, π.χ. libmine.a είναι...

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

...
#include "mylib.h"
...
/* κάλεσμα οποιασδήποτε συνάρτησης, τύπου, σταθεράς, κλπ της βιβλιοθήκης */
...


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

gcc myprog.c -o myprog.out -lmine
Τελευταία επεξεργασία από migf1 και 03 Δεκ 2011, 15:20, έχει επεξεργασθεί 1 φορά/ες συνολικά
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό migf1 » 03 Δεκ 2011, 15:11

Dimitris έγραψε:Επίσης, παράλληλα με το προηγούμενο, προσπάθησε να υλοποιήσεις σε C τη δυνατότητα που περιγράφω στο παρακάτω νήμα: viewtopic.php?f=6&t=19578&p=200254&hilit=lisp#p206890

Θα σου πω κάτι απλώς ενημερωτικά, κι αν θες το κρατάς, αν δεν θες το πετάς! Δεν υπάρχει ΤΙΠΟΤΑ που να μην μπορεί να το κάνει η C... αντίθετα υπάρχουν αρκετά έως πολλά που μπορείς να κάνεις με τη C αλλά όχι με άλλες γλώσσες.

έγραψε:Αυτό που μόλις υλοποιήσαμε είναι ένα closure. H μεταβλητή $message, αν θα μπορούσα να την περιγράψω σε C έννοιες, είναι μια static μεταβλητή της συνάρτησης print_hello, η οποία όμως print_hello δημιουργήθηκε δυναμικά. (κάτι τέτοιο δεν είναι δυνατό στη C)

Μην βάλεις στοίχημα :) ... http://www.hokstad.com/how-to-implement-closures.html


Και 2 δικά μου νήματα σε άλλα φόρουμς, που δεν είναι αποκλειστικά για closures, αλλά για OOp, virtual functions και generic data types σε C:
1. OOP & virtual functions
2. Generic data types

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

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

Επιστροφή στο Το Σχολείο του Φόρουμ - Ασύγχρονα Μαθήματα

cron