Le langage de programmation Roc tire son nom d'un oiseau mythique, ce qui se reflète dans son logo - un oiseau en origami rendant hommage au symbole du tangram d'Elm. Roc est, par essence, un successeur direct d'Elm, présentant des similitudes avec ce dernier tout en conservant des caractéristiques distinctes. À l'instar des ressemblances entre l'origami et le tangram, les deux langages impliquent la création de diverses structures à partir de primitives simples, la programmation fonctionnelle soulignant le caractère commun des plis.
Roc est un langage rapide
Le code Roc est conçu pour être construit et exécuté rapidement... mais qu'entend-on par "rapide" ? Et dans quelle mesure l'implémentation actuelle de Roc est-elle proche de cet objectif ?
Roc est un langage convivial
En plus d'avoir une communauté amicale, Roc se veut aussi un langage convivial. Cela a un impact sur la syntaxe, la sémantique et les outils livrés avec Roc.
Roc est un langage fonctionnel
Roc est conçu pour avoir un petit nombre de primitives de langage simples. Cet objectif fait de Roc un langage fonctionnel à paradigme unique, tandis que ses objectifs de performance conduisent à des choix de conception peu courants dans les langages fonctionnels.
- Mutation opportuniste
- Tout est immuable (sémantiquement)
- Pas de réaffectation ou de shadowing
- Effets gérés plutôt qu'effets secondaires
- Fonctions pures
Essayer Roc
Vous pouvez essayer Roc en utilisant cette boucle lecture-évaluation-impression (REPL), qui s'exécute dans votre navigateur en WebAssembly.
Exemples
Roc est un jeune langage. Il n'a même pas encore de version numérotée, juste des nightly builds ! Cependant, il peut déjà être utilisé pour plusieurs choses si vous êtes prêt à être un early adopter - avec tous les bugs et les fonctionnalités manquantes qui viennent avec ce territoire.
Voici quelques exemples d'utilisations possibles aujourd'hui.
Interfaces de ligne de commande
Code : | Sélectionner tout |
1 2 | main = Stdout.line "Hello!" |
Vous pouvez utiliser Roc pour créer des scripts et des interfaces de ligne de commande (CLI). Le compilateur produit des exécutables binaires, de sorte que les programmes Roc peuvent être exécutés sur des appareils qui n'ont pas Roc lui-même installé.
À titre d'exemple, le code HTML du site web du langage Roc est généré à l'aide d'un simple script Roc. Vous pouvez voir le code de ce script dans le dépôt principal du code Roc.
Si vous cherchez un point de départ pour construire un programme en ligne de commande dans Roc, basic-cli est une plateforme populaire à consulter.
Serveurs web
Code : | Sélectionner tout |
1 2 | handleReq = \request -> Task.ok { body: … } |
Vous pouvez également construire des serveurs web en Roc. basic-webserver est une plateforme avec une interface simple : vous écrivez une fonction qui prend une requête, faites quelques E/S, et renvoie une réponse.
En coulisse, il utilise les bibliothèques hyper et tokio de Rust pour exécuter votre fonction Roc sur les requêtes entrantes.
Pour l'accès à la base de données, roc-pg vous permet d'accéder à une base de données PostgreSQL - avec vos types Roc vérifiés par rapport aux types du schéma de votre base de données.
Intégration
Code : | Sélectionner tout |
1 2 | fn = require("foo.roc"); log(`Roc says ${fn()}`); |
Vous pouvez appeler des fonctions Roc à partir d'autres langages. Il existe plusieurs exemples de base sur la façon d'appeler des fonctions Roc depuis Python, Node.js, Swift, WebAssembly et les langages JVM.
Tout langage qui supporte l'interopérabilité avec le C peut appeler des fonctions Roc, en utilisant des techniques similaires à celles trouvées dans ces exemples.
La plupart de ces exemples sont des preuves de concept minimales, mais roc-esbuild est un travail en cours qui est utilisé chez Vendr pour appeler des fonctions Roc depuis Node.js.
Exemple de code avec explications
Voici un exemple de code qui montre quelques aspects différents de Roc :
- E/S de fichiers et requêtes HTTP
- Correspondance de motifs pour la gestion des erreurs
- Désérialisation JSON par inférence de type
- Sucre syntaxique commun : interpolation de chaînes, pipelines, et backpassing
Le tutoriel introduit ces éléments progressivement et plus en profondeur, mais ceci donne un bref aperçu.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # Click anything here to see an explanation. Comments in Roc begin with a # and go to the end of the line. main = Path.fromStr "url.txt" |> storeEmail |> Task.onErr handleErr storeEmail = \path -> url <- File.readUtf8 path |> Task.await user <- Http.get url Json.codec |> Task.await dest = Path.fromStr "\(user.name).txt" _ <- File.writeUtf8 dest user.email |> Task.await Stdout.line "Wrote email to \(Path.display dest)" handleErr = \err -> when err is HttpErr url _ -> Stderr.line "Error fetching URL \(url)" FileReadErr path _ -> Stderr.line "Error reading from \(Path.display path)" FileWriteErr path _ -> Stderr.line "Error writing to \(Path.display path)" |
Pour débuter avec le langage, essayez le tutoriel.
Source : Roc : A fast, friendly, functional language
Et vous ?
Que pensez-vous du langage de programmation Roc ?
Trouvez-vous qu'il s'agit d'un langage fiable et utile ?
Voir aussi
Pourquoi la programmation fonctionnelle n'est-elle pas la norme de l'industrie du code ? L'auteur de « Elm in action » s'exprime, « c'est une question de temps avant que la POO soit détrônée »
Faut-il éviter d'utiliser des classes et s'appuyer autant que possible sur une approche fonctionnelle ? Un point de vue d'Andy Peterson basé sur son expérience en entreprise avec Typescript