16 points par alstjr7375 2022-09-01 | 1 commentaires | Partager sur WhatsApp
  • Un nouveau modèle de calcul appelé Interaction Net, qui combine la machine de Turing et le lambda-calcul
  • Utilise une primitive de clonage paresseux (lazy clone primitive), proche du mode d’évaluation de Haskell, au lieu du modèle d’emprunt complexe de Rust
  • Comme il est lazy, le coût de duplication est quasiment nul, et contrairement à Haskell, il est possible de partager le calcul à l’intérieur des lambdas (un avantage important pour le traitement parallèle)
  • Choisit un modèle mémoire fondé sur SIC (Symmetric Interaction Calculus), ce qui élimine en grande partie le coût d’indirection des pointeurs requis par l’approche appelée Graph Reduction dans Haskell et d’autres langages (avantageux lorsqu’on peut trouver l’optimal)
  • En d’autres termes, par rapport aux runtimes de langages généralistes, il n’a pas de GC et se distingue par ses points forts en traitement parallèle et en exécution optimale

1 commentaires

 
alstjr7375 2022-09-01

Voici une implémentation de Quicksort.
Comme elle utilise activement le lambda-calcul, elle ressemble un peu à Lisp, non ?

// QuickSort  
(QSort p s Nil)          = Empty  
(QSort p s (Cons x Nil)) = (Single x)  
(QSort p s (Cons x xs))  =  
  (Split p s (Cons x xs) Nil Nil)  
  
// Splits list in two partitions  
(Split p s Nil min max) =  
  let s   = (>> s 1)  
  let min = (QSort (- p s) s min)  
  let max = (QSort (+ p s) s max)  
  (Concat min max)  
(Split p s (Cons x xs) min max) =  
  (Place p s (< p x) x xs min max)  
  
// Sorts and sums n random numbers  
(Main n) =  
  let list = (Randoms 1 (* 100000 n))  
  (Sum (QSort Pivot Pivot list))