Comme le faisait remarquer Richard P. Gabriel dans un de ses articles, un débutant en CL écrira des programmes plus lents qu'un débutant en C. Pourquoi? Parce que le C est bas niveau et qu'il faut tenir le compilateur par la main; et il est donc difficile d'écrire des programmes lents en C.
Par contre en Lisp, on utilise d'habitude l'approche suivante:
- on code une version naïve (plus ou moins rapide selon le compilateur) avec des fonctionnalités de haut niveau.
- on teste la perf. Généralement c'est acceptable donc on s'arrête là et on gagne 90% de temps sur le même projet en C.
- si les perfs sont insuffisantes on commence par saupoudrer le code de déclarations de types, et on laisse le compilo faire notre boulot à notre place.
- On peut ensuite demander au compilo de ne pas faire certaines vérifications de sécurité sur les types (avec (safety 0)).
- Si ça ne suffit pas on réécrit les routines critiques dans un style proche du C.
- Dans le pire des cas, on écrit les routines critiques en C et on les appelle de Lisp.
Le dernier point est celui qui a été utilisé par ITA software (pour mapper quelques gigas de données sans le charger dans Lisp directement).
Donc pour résumer, du lisp idiomatique est plus lent que du C idiomatique, mais plus succint et de plus haut niveau. En cas de lenteur on peut passer en "mode C" (bas niveau) directement en Lisp.
Sinon le temps d'implémenter une solution en C, on a le temps d'en implémenter et tester plusieurs en CL pour choisir un meilleur algo.
[^] # Re: pourquoi le lip
Posté par Thomas . En réponse à la dépêche Sortie de SBCL 1.0. Évalué à 1.
Par contre en Lisp, on utilise d'habitude l'approche suivante:
- on code une version naïve (plus ou moins rapide selon le compilateur) avec des fonctionnalités de haut niveau.
- on teste la perf. Généralement c'est acceptable donc on s'arrête là et on gagne 90% de temps sur le même projet en C.
- si les perfs sont insuffisantes on commence par saupoudrer le code de déclarations de types, et on laisse le compilo faire notre boulot à notre place.
- On peut ensuite demander au compilo de ne pas faire certaines vérifications de sécurité sur les types (avec (safety 0)).
- Si ça ne suffit pas on réécrit les routines critiques dans un style proche du C.
- Dans le pire des cas, on écrit les routines critiques en C et on les appelle de Lisp.
Le dernier point est celui qui a été utilisé par ITA software (pour mapper quelques gigas de données sans le charger dans Lisp directement).
Donc pour résumer, du lisp idiomatique est plus lent que du C idiomatique, mais plus succint et de plus haut niveau. En cas de lenteur on peut passer en "mode C" (bas niveau) directement en Lisp.
Sinon le temps d'implémenter une solution en C, on a le temps d'en implémenter et tester plusieurs en CL pour choisir un meilleur algo.