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

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

Δημοσ.

Εδώ και ένα χρόνο περίπου ο Jonathan Blow φτιάχνει τη δική του γλώσσα προγραμματισμού.
 
Στο youtube έχει αρκετά video που δείχνει διάφορα παραδείγματα χρήσης κτλ, αλλά κάποιος έγραψε ένα βολικό primer που περιγράφει στοιχεία που έχει ήδη και μερικά που θα αποκτήσει η γλώσσα εδώ 
 
 
Εμένα μου φαίνεται αρκετά ενδιαφέρουσα, με αρκετά ωραία features. Βέβαια δεν έχω αρκετή εμπειρία για να κρίνω με αυτοπεποίθηση το αν όντως είναι καλύτερη απο την C/C++ ή αν θα μπορέσει να τις αντικαταστήσει (πράγματα που υποστηρίζει ο Blow). Εσείς τι λέτε;

Δημοσ.

Δεν είναι ωραία η εμφάνιση...

// A function that accepts 3 floats as parameters and returns a float
sum := (x: float, y: float, z: float) -> float {
    return x + y + z;
};

print("Sum: %\n", sum(1, 2, 3)); 

 

Μ2000 εξ ορισμού έχουμε double :

 

Function sum {
Read x, y, z
    =x + y + z
}
print format$("Sum: {0}", sum(1, 2, 3))

 

Μ2000 πιο απλή:

def sum(x, y, z)=x + y + z
print "Sum: ";sum(1, 2, 3)
 


Δοκίμασα και με τις ομάδες (Group στα αγγλικά εδώ)

Κάνω μάλιστα Benchmark...

Βέβαια η Jai είναι compiler άρα θα είναι γρηγορότερη, αλλά εδώ μας ενδιαφέρει αν δουλεύει πιο γρήγορα μια συνάρτηση εντός αντικειμένου ή εκτός. Στη Μ2000 δεν μπορούμε να περάσουμε με αναφορά στοιχείο πίνακα, αλλά όλο μαζί.

Εδώ στα αγγλικά.

 

 Module A1 {
      Module update_position {
            read &v1(), k
            For v1(k) {
                  .x++ : .y++ : .z++
            }
      }
      Class Vector {
            x,y,z
      }
      Class Orientation {
            any1, any2
      }
      Group Entity {
            Dim .positions(1024)=Vector()
            Dim .orientations(1024)=Orientation()
      }
      For i=0 to 1023 {
            update_position &Entity.Positions(), i
      }
      Print Entity.Positions(512).x
}
Module A2 {
      Class Vector {
            x,y,z
      }
      Class Orientation {
            any1, any2
      }
      Group Entity {
            Dim .positions(1024)=Vector()
            Dim .orientations(1024)=Orientation()
            Module update_position {
            read i
                  For .positions(i) {
                        .x++ : .y++ : .z++
                  }
            }
      }
      For i=0 to 1023 {
      Entity.update_position i
      }
      Print Entity.Positions(512).x
}
Profiler
A1
Print Timecount
Profiler
A2
Print Timecount

  • Moderators
Δημοσ.

Γιατί νιώθεις την ανάγκη να γράφεις random πράγματα από τη γλώσσα σου σε ΚΑΘΕ thread; Δηλαδή σοβαρά τώρα.

Δημοσ.

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

 

FWIW και εγώ βρίσκω κουραστικό το κόλλησε-η-βελόνα promotion, ειδικά σε συνδυασμό με το ότι δε βγαίνει άκρη στην κουβέντα γιατί η απάντηση στο "πόσο κάνει 1 + 1" μοιάζει λίγο με πεντάλεπτο λόγο Ζουράρι.

Δημοσ.

Δεν είναι random...διάβασε για την Jai, 

Data-Oriented Structures

SOA AND AOS

struct Entity {
    Vector3 position;
    Quaternion orientation;
    // ... many other members here
};
 
Entity all_entities[1024]; // An array of structures
 
for (int k = 0; k < 1024; k++)
    update_position(&all_entities[k].position);
 
for (int k = 0; k < 1024; k++)
    update_orientation(&all_entities[k].orientation);
 
................................
struct Entity {
Vector3 positions[1024];
Quaternion orientations[1024];
// ... many other members here
};

Entity all_entities; // A structure of arrays

for (int k = 0; k < 1024; k++)
update_position(&all_entities.positions[k]);

for (int k = 0; k < 1024; k++)
update_orientation(&all_entities.orientations[k]);
 
και η παραλλαγή SOA
Entity :: struct SOA {
position : Vector3;
orientation : Quaternion
// .. many other members here
}

all_entities : [4] Entity;

for k : 0..all_entities.count-1
update_position(&all_entities[k].position);

for k : 0..all_entities.count-1
update_orientation(&all_entities[k].orientation);
 
Είναι ενδιαφέρον το θέμα και στο δικό μου πρόγραμμα υπάρχει διαφορά στην εκτέλεση. Απλά εδώ ο τύπος μπορεί να περνάει με αναφορά στοιχείο πίνακα, πράγμα που δεν το κάνει η Μ2000. 
Ασφαλώς στο παράδειγμα αναφέρεται στην αναδιοργάνωση των δεδομένων για διαφορετικό διάβασμα, αλλά σημασία σε κάθε γλώσσα έχει ότι πάντα θα πρέπει κανείς να έχει μια ιδέα για το πόσο γρήγορα γίνεται κάτι.
Ο κώδικάς του έχει τρομερές διαφορές και σε καμία περίπτωση δεν συμπίπτει στο δικό μου! Παρόλα αυτά το κοινό είναι ότι έχουμε ομάδες στη Μ2000 και struct στη jai και σε κάθε περίπτωση μπορεί κανείς να χρησιμοποιήσει διαφορετικό τρόπο προσπέλασης με κέρδος ή χασούρα! Αυτό το βρίσκει κανείς με μέτρηση!

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

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

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

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

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

Σύνδεση

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

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