IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

OK ?, le langage de programmation moderne, dynamiquement typé,
élimine la complexité inutile des langages de programmation actuels

Le , par Bruno

23PARTAGES

9  0 
OK ? est présenté comme un langage de programmation moderne, dynamiquement typé, avec une vision pour l'avenir. La mission d'OK ? serait d'éliminer la complexité inutile des langages de programmation actuels et de vous permettre de vous concentrer sur ce qui compte : écrire du code qui fait la différence. Face à la multitude des langages de programmation, quel pourrait être selon vous l'intérêt de ce langage ? Véritable innovation ? ou alors blague étudiante pour faire le buzz ?


Conditionnels

Très tôt dans sa conception, il a été décidé que OK ? ne comporterait pas d'opérateur ternaire. L'opérateur ternaire ressemble à ceci :

let a = isprod ? 'prod' : 'dev' ;
Que signifie le point d'interrogation ? Que signifient les deux points ? Dans OK ?, nous laissons ces questions aux philosophes pour nous concentrer sur l'essentiel : écrire un code propre.

Un langage n'a besoin que d'une seule construction de flux de contrôle conditionnel, et dans OK ?, cette construction est l'instruction switch. Les instructions switch sont plus polyvalentes et expressives que les opérateurs ternaires et les instructions if, et après un certain temps, vous oublierez l'existence de ces autres constructions. Voici l'instruction ci-dessus en langage idiomatique OK ?

Code OK ? : Sélectionner tout
1
2
3
4
let a = switch isprod { 
case true : "prod" ; 
case false : "dev" ; 
}


La forme switch, bien que plus longue, est incontestablement plus claire. Comprendre la valeur de la simplicité par rapport à la complexité est la première étape de l'apprentissage de OK ?

Des Switches lisibles

Étant donné que les Switches sont si centraux dans OK ?, les responsables du langage voulaient éviter certains pièges communs autour des Switches trouvés dans d'autres langages. Dans d'autres langages, il est courant qu'une seule instruction de switch prenne plusieurs pages d'un éditeur avec une logique gonflée qui est poussée dans chaque cas de switch, donc dans OK ? il est question que l'utilisateur ne puisse avoir qu'une seule instruction par cas :

Si l'utilisateur veut exécuter plusieurs instructions par switch case, il suffit de les intégrer dans une fonction :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// INVALID: 
switch x { 
  case true: 
    z = z + 2 
  case false: 
    x = x + 1; 
    y = y - 1; // <-- ERROR: switch blocks can only contain a single statement 
} 
 
// VALID: 
let onfalse = fn() { 
  x = x + 1; 
  y = y - 1; 
}; 
 
switch x { 
  case true: z = z + 2; 
  case false: onfalse(); 
}
Cela garantit la séparation des préoccupations : la logique spécifique à chaque cas est supprimée et les cas eux-mêmes sont mis au premier plan.

Les valeurs nulles ne sont pas acceptables

Null implicite est une épine dans le pied de tout développeur qui se respecte et c'est pourquoi dans OK ? les valeurs nulles ne sont PAS OK, OK ?

Les valeurs nulles auraient pu être dans OK ?, « mais vous auriez alors oublié à quel point elles sont mauvaises, alors nous les avons incluses, représentées non pas par nil ou null mais par NO !, qui est la seule réponse sensée à la question Are nulls OK ? », déclarent les responables du langage. Pour faire passer le message, ils ont également ajouté une fonction intégrée appelée ayok ? qui prend une valeur et retourne si cette valeur est OK.

Code : Sélectionner tout
1
2
3
4
5
let x = NO! 
puts(ayok?(x)) // prints 'false' 
 
let y = 10 
puts(ayok?(y)) // prints 'true'
Gestion des erreurs

Dans OK ?, les erreurs sont simplement des valeurs, comme n'importe quelle autre valeur. Une valeur à laquelle elles ressemblent particulièrement est la chaîne de caractères, car par convention, elles sont en fait des chaînes de caractères. Par exemple :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
let divide = fn(a, b) { 
  return switch b { 
    case 0: [NO!, "cannot divide by zero"]; 
    default: [a / b, ""]; 
  }; 
}; 
 
result = divide(5, 0) 
switch result[1] { 
  case "": puts(result[0]) 
  default: puts(result[1]) // prints "cannot divide by zero" 
}
Seulement les tableaux et les chaînes de caractères.

Opérateurs logiques lisibles

Dans le cas d'une instruction conditionnelle qui enchaîne un tas de longues expressions booléennes.

Code : Sélectionner tout
1
2
3
switch p.isactive() && p.credits() >= reqcreds && p.nottype("Admin") { 
  ... 
}
Dans OK ?, les opérateurs && et || ne peuvent agir que sur des variables, afin que le lecteur puisse comprendre ce qui se passe.

Code : Sélectionner tout
1
2
3
4
// ERROR: '&&' operator must act on variables 
switch p.isactive() && p.credits() >= reqcreds && p.nottype("Admin") { 
  ... 
}
Voici comment l'instruction de commutation ci-dessus serait effectuée dans OK ?

Code : Sélectionner tout
1
2
3
4
5
6
let isactive = p.isactive() 
let enoughcr = p.credits() >= reqcreds 
let notadmin = p.nottype("Admin") 
switch isactive && enoughcr && notadmin { 
  ... 
}
Cela reflète un principe central de OK ? : être gentil avec le lecteur. Si l'utilisateur a besoin de raccourcir les conditionnels, il peut utiliser le mot-clé lazy :

Code : Sélectionner tout
1
2
3
4
5
6
let isactive = p.isactive() 
let enoughcr = lazy p.credits() >= reqcredits 
let notadmin = lazy p.nottype("Admin") 
switch isactive && enoughcr && notadmin { 
  ... 
}
Prépondérance des opérateurs simple

Dans OK ?, 5 + 2 * 3 donne 21 et non 11, car l'addition et la multiplication ont la même préséance d'opérateur. Si l'utilisateur souhaite évaluer son expression dans un autre ordre, il suffit d'utiliser des parenthèses : 5 + (2 * 3).

Ce simple ordre par défaut de gauche à droite évite d'avoir à chercher sur Internet une table de précédence des opérateurs et permet de garder les yeux sur le code.

MLes classes

Les auteurs de OK ? ont assisté à l'explosion de la popularité des langages orientés objet (OO), pour les voir bientôt crouler sous leur propre poids. Au cœur de cette obésité clinique se trouve la classe.

« Une classe reprend une idée sensée, à savoir la définition de données et de méthodes qui agissent sur ces données, puis la pousse du haut d'une falaise en ajoutant l'héritage et le polymorphisme des sous-types », déclare Jesse Duffield, Créateur de lazygit, lazydocker, horcrux, et du langage OK ?. « Il n'est pas surprenant qu'un groupe de vieux aristocrates obsédés par les classes dans les années 60, qui passaient probablement tout leur temps à décider quel enfant devait hériter de la plupart des biens, aient décidé d'ajouter une construction appelée "classe" qui tourne autour de l'héritage », poursuit-il.

Jesse Duffield précis : « Eh bien, la révolution est enfin arrivée ! Il n'y a pas d'héritage dans OK ? en solidarité avec tous ceux qui se sont battus contre la bourgeoisie dans le passé. D'autres langages ont opté pour les structures au lieu des classes, mais malgré le fait que leurs développeurs dénoncent honorablement l'OO, les vieilles habitudes ont la vie dure et certains prononcent accidentellement "classe" alors qu'ils veulent dire "structure". Certains développeurs disent même "class" délibérément, un moyen de revenir à l'époque où l'aristocratie OO tenait encore la profession de développeur par la gorge. »

Afin de lever toute ambiguïté et de garantir un engagement total en faveur de la mort des classes, l'équipe de OK ? a décidé d'utiliser sa propre terminologie : notaclass, ou nac en abrégé.

Code : Sélectionner tout
1
2
3
4
notaclass person { 
  field name 
  field email 
}
Tous les champs sont privés

Il n'est pas possible de marquer un champ comme public dans OK ? parce que l'API publique d'un nac doit décrire un comportement, pas un état.

Code : Sélectionner tout
1
2
let p = new person() 
p.name = "Jesse" // <-- ERROR: access of private field 'name'
Pour des circonstances exceptionnelles, vous pouvez définir une reconnaissance de confidentialité avec le mot-clé pack, permettant au code externe d'accéder aux champs d'un nac s'il inclut la reconnaissance dans un commentaire, précédé de I acknowledge that :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
notaclass person { 
  pack "I am a stupid piece of shit who should not be doing this" 
 
  field name 
  field email 
} 
 
let p = new person() 
// I acknowledge that I am a stupid piece of shit who should not be doing this 
p.name = "Jesse"  // <-- No error

Pas de constructeurs

Les constructeurs sont une chose basée sur les classes, et OK ? n'a pas de classes. Le mot Constructeur contient également le mot struct, et OK ? n'a pas de structs. Si vous voulez définir l'état initial d'un nac, il suffit de l'ajouter comme une méthode distincte :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
notaclass person { 
  field name 
  field email 
 
  public init fn(selfish, name, email) { 
    selfish.name = name; 
    selfish.email = email; 
  } 
} 
 
let p = new person() 
p.init("Jesse", "jesse@test.com")
L'évolution plutôt que la composition

Selon Jesse Duffield, la composition corrige le problème fragile de la classe de base introduit par l'héritage, pour ensuite introduire son propre problème de composant de base, où vous ne pouvez pas vous défaire du sentiment que vous vous êtes en fait un peu handicapé en dépendant de la composition pour la réutilisation du code, surtout lorsque le composant n'a pas la capacité d'interagir avec son parent.

Pour activer l'évolution, il suffit de définir une méthode evolve dans votre nac. La méthode evolve est invoquée après l'exécution de toute autre méthode du nac et détermine si les conditions préalables ont été remplies pour faire évoluer l'instance du nac vers un nouveau type de nac.

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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
notaclass brgousie { 
  public whoami fn(selfish) { 
    return "a good-for-nothing aristocrat who likes classes" 
  } 
} 
 
notaclass person { 
  field name 
  field email 
  field likeclas 
 
  ... 
 
  public whoami fn(selfish) { 
    return selfish.name; 
  } 
 
  public makeold fn(selfish) { 
    selfish.likeclas = true; 
  } 
 
  evolve fn(selfish) { 
    switch selfish.likeclas { 
      case true: 
        return new brgousie(); 
      default: 
        return NO!; 
    } 
  } 
} 
 
let p = new person(); 
p.init("John", "") 
puts(p.whoami()); // prints "John" 
p.makeold(); // evolve() method is called behind the scenes 
puts(p.whoami()); // prints "a good-for-nothing aristocrat who likes classes"
Source : GitHub

Et vous ?

Quel est votre avis sur le langage OK ? ?

Face à la multitude des langages de programmation, quel pourrait être selon vous l'intérêt du langage OK ? ?

Véritable innovation ? ou alors blague étudiante pour faire le buzz ?

Voir aussi :

80 % des technologies pourraient être créées par des professionnels extérieurs à l'informatique d'ici 2024, grâce aux outils low-code, selon Gartner

Forrester : l'utilisation des plateformes de développement low-code gagne du terrain dans les processus de transformation numérique des entreprises

Le marché mondial des technologies de développement low-code va augmenter de 23 % en 2021, selon les prévisions de Gartner

Microsoft lance Power Fx, un nouveau langage de programmation low-code open source basé sur Excel

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Leruas
Membre éclairé https://www.developpez.com
Le 30/08/2022 à 19:18
Encore un langage qui va finir dans les poubelles de l'histoire
29  0 
Avatar de sevyc64
Modérateur https://www.developpez.com
Le 30/08/2022 à 21:25
J'adore tous ces nouveaux langages qui prétendre (ré)inventer le fil à couper le beurre,
qui, sous prétexte de simplifie ceci, complexifie cela,
qui, sous prétexte de dénoncer le diable dans certains autres langages s'emploie méthodiquement à faire moins bien que ces mêmes langages....

De ce que j'en vois là, je me croirais revenu 15 à 20 ans en arrière

Il ne reste plus qu'à interdire le procédural et (ré)imposer la programmation linéaire et inventer une instruction magique, GOTO, pour se déplacer dans le code, et ce langage sera parfait.
21  0 
Avatar de Shepard
Membre expérimenté https://www.developpez.com
Le 31/08/2022 à 8:29
Haha j'adore

Le meilleur passage est le "6 opérateurs de comparaison, c'est trop compliqué, alors on n'a mis que >=, et si vous voulez vérifier que deux valeurs sont différentes, vous n'avez qu'à écrire let x = !(a >= b); let y = !(b >= a); x || y"
12  0 
Avatar de abriotde
Membre chevronné https://www.developpez.com
Le 31/08/2022 à 7:35
On est au tout début du language et rien que le switch est complexe avec plein de règles dans tout les sens. Déjà le nom est tordu, il ne simplifie pas la recherche dans un moteur de recherche...
9  0 
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 31/08/2022 à 0:14
Citation Envoyé par Bruno Voir le message

Quel est votre avis sur le langage OK ? ?

Face à la multitude des langages de programmation, quel pourrait être selon vous l'intérêt du langage OK ? ?
En soi je n'ai rien contre de nouveaux langages a condition de comprendre ce qu'ils apportent, et la pour le coup je comprend pas quel est l'objectif sauf peut être la blague, mais dans ce cas là aussi c'est loupé, car d'autres on fait bien mieux avant.
Simplifier peut être intéressant, encore faut il voir une vision claire. La j'ai juste l'impression qu'ils on sabré au hasard, on a l'impression d'un langage blague mal assumé.

Citation Envoyé par OrthodoxWindows Voir le message
Je renvoie une autre question : quel sont les performances de OK ?, à l'heure des économies d'énergies ?
Je n'en sait rien, mais je pense que cet élément est un des plus importants, si ce n'est pas le plus important.
Sur un tel langage, je ne suis pas certain que ça soit une préoccupation majeure, il semble plutôt vouloir concurrencer les langages de script comme Python, que les langages orientés performance comme C, C++, Rust, ... ou même Go ou Java

Citation Envoyé par Jeff_67 Voir le message
L'interpréteur du langage Ok est écrit en Go, un très mauvais choix.

En effet, dans les conditions générales d'utilisation du compilateur Go, il est clairement écrit qu'il est interdit d'écrire sa propre implémentation du langage sans l'accord de Google, et que cela constituerait une violation des brevets. Le compilateur Go est pour l'instant libre, mais qu'en sera-t-il pour les futures versions ?
Tu as des sources précises qui détaillent ça ? Car je n'ai rien vu de tel. Et d’ailleurs ça parait juste impossible car de telles restrictions seraient en complète contradiction avec la licence libre du compilateur qui ajoute même une clause d'exclusion des brevets.
7  0 
Avatar de totozor
Membre expert https://www.developpez.com
Le 31/08/2022 à 7:37
J'ai l'impression que ce langage s'adresse aux "développeurs du dimanche" ou autres "gars qui fait son petit truc dans son coin" parce qu'ils simplifient des fonctions qui font trembler les débutants.
Mais soyons honnêtes tout débutant est capable de gérer un if then else ou un switch très vite. C'est en général abordé dans la première demie journée de formation.

Ce langage semble s'attaquer aux premiers obstacles du débutant, sauf que le débutant est capable de les comprendre et de s'y adapter vite.
Et supprimer ces obstacles c'est aussi en ajouter de la complexité dans la conception de l'algo.

Bref, si ni vous ni moi trouvent ça pertinent, je ne vois pas bien qui va y adhérer... A part le marketeux qui risque de venir me voir avec les belles phrases de type
les valeurs nulles ne sont PAS OK, OK ?
représentées non pas par nil ou null mais par NO !, qui est la seule réponse sensée à la question Are nulls OK ?
PS : Ma réponse à Are nulls OK? et OUI et elles ma facilitent parfois bien la vie.

Dans OK ?, 5 + 2 * 3 donne 21 et non 11, car l'addition et la multiplication ont la même préséance d'opérateur
Alors en CE2 (je penses) on m'a expliqué que la multiplication est prioritaire sur l'addition.
Casser cette norme ,ne ressemble pas à une simplification de mon point de vue...
6  0 
Avatar de petitours
Membre chevronné https://www.developpez.com
Le 02/09/2022 à 10:49
Rien que le nom ne fait pas sérieux, n'est ce pas Jacouille ?

et plus sérieusement "éliminer la complexité inutile des langages de programmation actuels" sur le typage est un faux objectif pour moi tellement je considère le typage dynamique comme la plait de l'informatique.
6  0 
Avatar de yahiko
Rédacteur/Modérateur https://www.developpez.com
Le 31/08/2022 à 8:48
Langage divertissant. A prendre plutôt comme une blague un peu trollesque je pense.
Un seul opérateur de comparaison, des identificateurs limités à 8 caractères, ou encore le notaclass.
Le gars a voulu s'amuser et pourquoi pas.
5  0 
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 03/09/2022 à 17:17
Je pense pas que la langue soit vraiment un problème, j'ai appris le Basic et le Logo à 8 ans sur MO5 alors que je ne parlais pas un mot d'anglais a l'époque. Le Logo avait ses commandes traduites en français, mais il ne m'a pas paru plus simple pour autant. On a vite appris les quelques mots clé d'un langage même si on ne le parle pas, ce qu'il faut surtout, c'est une bonne documentation en français.
5  0 
Avatar de
https://www.developpez.com
Le 31/08/2022 à 8:43
Citation Envoyé par Uther Voir le message
Tu as des sources précises qui détaillent ça ? Car je n'ai rien vu de tel. Et d’ailleurs ça parait juste impossible car de telles restrictions seraient en complète contradiction avec la licence libre du compilateur qui ajoute même une clause d'exclusion des brevets.
C'est écrit noir sur blanc dans les conditions d'utilisation qu'il faut demander une licence spécifique à Google pour développer sa propre implémentation de Go en accord avec les brevets déposés. La page wikipédia française du langage Go a un lien qui pointe directement vers le paragraphe en question.

Tu est libre de modifier et redistribuer le compilateur existant, mais pas d'en écrire un totalement nouveau sans l'accord de Google.
4  0