JAVA n'a plus de secret pour vous. Créer un projet, le passer de maven à graddle, enlever Spring, remplacer Guava par les API de Java 8 vous le faites sans même réfléchir. Vous avez essayé Python et la ce n'est plus la même affaire. Passé le "Hello World", quand il a fallu faire un projet de la vrai vie le courage vous a quitté. Cette conférence donnera les clefs pour bien débuter en Python quand on est un dev JAVA. Python 2 ou Python 3, choix d'un IDE, outils de build, contrôle de code, gestion des dépendances, choix des librairies, documentation, ressources indispensables à connaitre...
Decouvrez les particularités de JavaScript qui vous aideront à débogguer sans craindre ce langage aujourd'hui indispensable.
- la portée des variables et comment ne pas polluer l'espace global
- comprendre le mot clé this
- les particularités des fonctions
- introduction aux namespaces
Loin de la théorie vous aurez des explications pratiques et des démos de code ainsi que les bonnes pratiques.
JavaScript est désormais omniprésent et rend possible l'écriture d'applications complexes et riches. Mais il est souvent mal connu des développeurs orientés objets classiques comme ceux pratiquant le C#, le Java ou le PHP. Cette session passera donc en revue les bases du langage JavaScript, ses spécificités comme les portées, les closures, le this différent de ce que vous pouvez connaître. Bref, vous verrez qu'il y a des pièges à éviter et qu'il ne faut pas négliger JavaScript. Il est très puissant mais potentiellement différent de ce vous connaissez déjà. Venez apprendre à le respecter avant de le maitriser!
JAVA n'a plus de secret pour vous. Créer un projet, le passer de maven à graddle, enlever Spring, remplacer Guava par les API de Java 8 vous le faites sans même réfléchir. Vous avez essayé Python et la ce n'est plus la même affaire. Passé le "Hello World", quand il a fallu faire un projet de la vrai vie le courage vous a quitté. Cette conférence donnera les clefs pour bien débuter en Python quand on est un dev JAVA. Python 2 ou Python 3, choix d'un IDE, outils de build, contrôle de code, gestion des dépendances, choix des librairies, documentation, ressources indispensables à connaitre...
Decouvrez les particularités de JavaScript qui vous aideront à débogguer sans craindre ce langage aujourd'hui indispensable.
- la portée des variables et comment ne pas polluer l'espace global
- comprendre le mot clé this
- les particularités des fonctions
- introduction aux namespaces
Loin de la théorie vous aurez des explications pratiques et des démos de code ainsi que les bonnes pratiques.
JavaScript est désormais omniprésent et rend possible l'écriture d'applications complexes et riches. Mais il est souvent mal connu des développeurs orientés objets classiques comme ceux pratiquant le C#, le Java ou le PHP. Cette session passera donc en revue les bases du langage JavaScript, ses spécificités comme les portées, les closures, le this différent de ce que vous pouvez connaître. Bref, vous verrez qu'il y a des pièges à éviter et qu'il ne faut pas négliger JavaScript. Il est très puissant mais potentiellement différent de ce vous connaissez déjà. Venez apprendre à le respecter avant de le maitriser!
Rust sans (trop) roter du sang — Touraine Tech 2023 — par Édouard Siha & Ale...Horgix
Talk presented at Touraine Tech (https://touraine.tech/) on the 19th January 2023, with the following (FR) abstract:
S'il y a bien un langage de programmation qui a le vent en poupe, c'est Rust. Les arguments en sa faveur ne manquent pas : programmation sûre, performance d'exécution, écosystème vivant, etc. Il n'est même pas nécessaire d'y ajouter l'argument d'autorité "Linus Torvalds approuve" !
Comme toute personne curieuse, nous nous sommes lancés… pour se prendre de plein fouet la courbe d'apprentissage rude qui fait aussi la réputation du langage. Mais bon, nous sommes utilisateurs de Vi au quotidien depuis des années, il n'y a pas de raison qu'on n'arrive pas à coder en Rust !
Dans cette présentation, nous proposons une approche visuelle pour illustrer le plus simplement possible les points d'achoppement de la montée en compétence sur Rust… et vous verrez qu'en fait, c'est pas compliqué, on a juste été très mal habitués par les autres langages depuis des années. Notre but ? Que vous repartiez avec les bons outils pour écrire vos premiers petits programmes en Rust et ne paniquiez pas face à la volubilité du compilateur.
Comme des millions de développeurs, vous utilisez C# quotidiennement … mais en maitrisez-vous les subtilités ? Cette session ludique vous plongera au cœur de votre langage de prédilection au travers programmes et exemples de code qui ne cesseront de vous surprendre. Avec en prime quelques (petits) lots à gagner pour les développeurs les plus perspicaces !
Rust sans (trop) roter du sang — Touraine Tech 2023 — par Édouard Siha & Ale...Horgix
Talk presented at Touraine Tech (https://touraine.tech/) on the 19th January 2023, with the following (FR) abstract:
S'il y a bien un langage de programmation qui a le vent en poupe, c'est Rust. Les arguments en sa faveur ne manquent pas : programmation sûre, performance d'exécution, écosystème vivant, etc. Il n'est même pas nécessaire d'y ajouter l'argument d'autorité "Linus Torvalds approuve" !
Comme toute personne curieuse, nous nous sommes lancés… pour se prendre de plein fouet la courbe d'apprentissage rude qui fait aussi la réputation du langage. Mais bon, nous sommes utilisateurs de Vi au quotidien depuis des années, il n'y a pas de raison qu'on n'arrive pas à coder en Rust !
Dans cette présentation, nous proposons une approche visuelle pour illustrer le plus simplement possible les points d'achoppement de la montée en compétence sur Rust… et vous verrez qu'en fait, c'est pas compliqué, on a juste été très mal habitués par les autres langages depuis des années. Notre but ? Que vous repartiez avec les bons outils pour écrire vos premiers petits programmes en Rust et ne paniquiez pas face à la volubilité du compilateur.
Comme des millions de développeurs, vous utilisez C# quotidiennement … mais en maitrisez-vous les subtilités ? Cette session ludique vous plongera au cœur de votre langage de prédilection au travers programmes et exemples de code qui ne cesseront de vous surprendre. Avec en prime quelques (petits) lots à gagner pour les développeurs les plus perspicaces !
Game camp 2017 - "Pesto, un langage pour coder les IAs" - Pastagames
1. Pesto
Un langage pour coder des IAs.
Fabrice Kocik
CTO Pastagames
fabrice@pastagames.net
http://www.pastagames.com
2. Pesto, en résumé
2 applications: ExploRobots (Pastagames) et Wild (Wild Sheep Studio).
Pesto est un langage de scripts, dédié au développement de
comportements des PNJ dans les jeux vidéo.
Les étapes de l’exposé
Il intègre primitivement le principe de continuation avec l’instruction
yield et l’instruction exec.
Il introduit de nouvelles constructions (do/onResume).
Il permet d’implémenter simplement des Automates à états (finally).
5. Trouver la princesse
Scripts & instructions
Chercher un cheval
Monter le cheval
Tuer le troll
Sauver la
princesse
Pesto
… …
… …
● Le script
○ dans une classe
○ séquence d’instructions
○ instructions de contrôle (if,
while),
○ appel de procédures,
affectation de variables…
● L’instruction exec
○ exécution d’un sous-script
7. Do-onResume (la supervision) : la force de Pesto
do
{
< 1- actions supervisées >
}
onResume
{
< 2- actions de supervision >
}
Pesto
● Un yield est déclenché dans < 1 >.
● La main est rendue au C++.
● Le retour dans le script se fait dans le
onResume. < 2 > est exécuté d’abord.
● Le déroulement normal reprend après
le yield déclencheur dans < 1 >.
8. Pesto, do-onResume
Trouver la princesse
Chercher un cheval
Monter le cheval
Tuer le troll
Sauver la
princesse
Désarçonné
du cheval
Interrompre & recommencer un script
9. Pesto, do-onResume
Trouver la princesse
Chercher un cheval
Monter le cheval
Tuer le troll
Sauver la
princesse
Désarçonné
du cheval
Mort du
cheval
do-onResume imbriqués
on reprend en partant du onResume le plus haut.
10. ● Extension de la séquentialité
○ Plus générale
○ Plus flexible
○ Écriture plus lourde (surtout
texte, id d’état, id de super-
états...)
● Repose sur l’interruption
○ Changement d’état
Problématique
Automate à états finis
Combattre
Attaquer
au corps
à corps
Se
cacher
Fuir
Attaquer
à
distance
12. Un état
Pesto & FSM
finally { <instructions> }
Exécutées quoi qu’il arrive
Même si le script est
interrompu par l’appelant
(break, retry, return)
Libération des ressources
allouées pour le script
14. Pesto, do-onResume
Trouver la princesse
Se lamenter
Mort de
princesse
Interruption d’un script par
un autre script
dans le onResume
○ Exécution d’un script temporaire
○ Suivi d’un éventuel break
manger
Avoir
faim
17. L’instruction “as” (à venir)
…
as (<condition>) { <instructions> }
⟺
do { while (condition) { <instructions> } } onResume { if (not <condition>) { break; } }
Pesto
Un emploi du temps
18. Les outils, l’implémentation
Le compilateur
● Un script Pesto ⟶ une classe C++
○ une méthode execute
○ La classe est un automate à état (state = id de l’instruction en cours)
○ Les variables ⟶ champs
○ Appel à un sous-script = instanciation d’un sous-automate à état (autre classe c++)
○ Utilisation d’une resume stack pour gérer l’ordre d’exécution des onResume, onYield,
finally
● Le code obtenu est proche du script Pesto
○ Lisible
○ debuggable
Pesto
20. Extraction de l’automate à états à partir des scripts Pesto
○ Création d’un fichier texte définissant le graphe
○ Utilisation GraphViz (vieux projet MIT) pour générer un png
Pesto, outils et implémentation
21. L’interpréteur
● Mini IDE basé sur ImGui (https://github.com/ocornut/imgui)
● Le do-onResume n’utilise qu’une seule stack,
○ Mais effectue des déplacements des data dans cette stack.
● Utilisation d’une “resume stack” pour gérer l’ordre d’exécution des
onResume, finally
● Hot reload de scripts
Pesto, les outils, l’implémentation
22. D‘autres trucs
● Classe / Objet
○ Champs, Fonction, Procédure, script
○ Utilisation d’un pool d’objets
○ Manipulation des objets par des refs
○ Référence null typée ( Creature#null )
● Struct
○ Manipulation par valeur sur la stack ou comme champs
○ Passage de paramètre par référence
● Les classes externes
○ L’allocation, l’itération et la représentation interne et celle du pointeur sont gérées
par le C++
Pesto
23. ● for ( creature : Creature; creature.isDangerous ) { … }
○ itération sur tous le pool d’objets d’une classe
○ pas de liste
● do { } onYield { }
○ exécution des onYield avant de rendre la main au c++
○ du bas vers le haut si imbrication des onYield
● do for ()
○ = parallelFor
● Syntaxes : regroupement fonction/champs
Pesto, d’autres trucs
if (isDead[creature]) { … }
field bool isDead [Creature creature]
func bool isDead [Creature creature]
24. Conclusion
● Evolution progressive du code
○ Procedure -> script
○ Séquence d’instructions -> automate à états
○ Séquence d’instructions -> emploi du temps
○ Ajout de condition d’interruptions
● Lisibilité, concision
○ Pas de code technique
● Modularité & réutilisabilité
○ Grâce au do-onResume
● Performant
○ Grâce au compilateur
● Sérialisation possible de l’état d’un pnj
○ Pour la persistence
○ Transmission réseau -> multi
Pesto
http://www.pastagames.com
fabrice@pastagames.net
25. ● Inconvénients
○ Encore des trous d’implem, constructions manquantes (switch/case)
○ Une syntaxe à améliorer (elseif)
○ IDE encore trop sommaire
● Retour d’XP
○ Le compilateur est nécessaire.
○ Et c’est beaucoup plus facile et plus léger à coder !
○ ⇒ commencer par le compilateur.
Pesto, conclusion
http://www.pastagames.com
fabrice@pastagames.net
26. Se passer de Pesto ?
● En C++ (langage performant),
○ mélange code technique / fonctionnel
○ automates à micro-états gigantesques
○ Beaucoup de classes, beaucoup de code...
une complexité difficile à assumer
● Lua
○ Continuation = la co-routine = technique
○ interprété : pas aussi efficace que C++
○ pas typé, pas de classe, peu structurant
○ La supervision est possible mais pas lisible