Seulement, pour peu qu'on aie à travailler avec des types différents (par exemple, de taille différente), se retrouver avec des +, +., +!, ++, +/, etc. n'est pas ce qu'il se fait de plus commode et de plus lisible.
Depuis OCaml 3.12 (et avant avec des extensions syntaxiques) on peut faire des "open" de modules dans un contexte local. Avec (encore une fois) du bon support du côté des bibliothèques, tu peux écrire:
open Batteries
let rec fibo n = Big_int.(match n with
| 0 -> of_int 1
| n -> fibo Int.(n - 1) + fibo Int.(n - 2)
)
(Et tu as fibo : int -> Big_int.t)
Du coup au lieu d'utiliser des opérateurs différents, tu utilises la construction Module.(expression) pour préciser le contexte local. C'est un peu plus lourd, mais c'est agréable à utiliser en pratique car plus explicite. Ça ne vaut pas des type-classes bien sûr, mais là il s'agit d'une fonctionnalité syntaxique simple et pas d'un concept complexe à ajouter au langage.
Pour en avoir fait un peu, c'est assez mal documenté et nécessite de repasser toutes les fonctions à la main en convertissant chaque argument avec les macros qui vont bien.
Tu as raison pour les bindings C, c'est pas facile, mais ça c'est la vie, pour peu qu'un langage s'éloigne un peu du support runtime C c'est vite difficile de faire des ponts (cf. ce billet qui compare les FFI de différents langages). On pourrait vouloir des techniques de bindings mieux vérifiées statiquement et donc moins à la merci des erreurs humaines, mais c'est vite un peu compliqué. Cf. le travail de l'excellent langage ATS.
Après, on peut rester minimal sans forcément utiliser des tas de symboles. Par exemple, Python fait ça très bien, tout en étant différent du C.
Je ne vois pas trop en quoi la grammaire Python serait plus "minimale" que celle de OCaml. À vue de nez elles sont du même ordre de grandeur de complexité. Il y a la question de l'indentation significative ou pas, c'est un sujet de troll, ce qui est vrai c'est que ça évite d'écrire explictement certains délimiteurs (begin/end et in/;), mais à part ça je ne vois pas trop la différence.
[^] # Re: ocaml...
Posté par gasche . En réponse au journal Votre langage idéal ?. Évalué à 2.
Depuis OCaml 3.12 (et avant avec des extensions syntaxiques) on peut faire des "open" de modules dans un contexte local. Avec (encore une fois) du bon support du côté des bibliothèques, tu peux écrire:
(Et tu as
fibo : int -> Big_int.t)Du coup au lieu d'utiliser des opérateurs différents, tu utilises la construction
Module.(expression)pour préciser le contexte local. C'est un peu plus lourd, mais c'est agréable à utiliser en pratique car plus explicite. Ça ne vaut pas des type-classes bien sûr, mais là il s'agit d'une fonctionnalité syntaxique simple et pas d'un concept complexe à ajouter au langage.Tu as raison pour les bindings C, c'est pas facile, mais ça c'est la vie, pour peu qu'un langage s'éloigne un peu du support runtime C c'est vite difficile de faire des ponts (cf. ce billet qui compare les FFI de différents langages). On pourrait vouloir des techniques de bindings mieux vérifiées statiquement et donc moins à la merci des erreurs humaines, mais c'est vite un peu compliqué. Cf. le travail de l'excellent langage ATS.
Je ne vois pas trop en quoi la grammaire Python serait plus "minimale" que celle de OCaml. À vue de nez elles sont du même ordre de grandeur de complexité. Il y a la question de l'indentation significative ou pas, c'est un sujet de troll, ce qui est vrai c'est que ça évite d'écrire explictement certains délimiteurs (begin/end et in/;), mais à part ça je ne vois pas trop la différence.