Aller au contenu

« Opa (logiciel) » : différence entre les versions

Un article de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
Manu1400 (discuter | contributions)
m - lien rouge
IlannHydra72 (discuter | contributions)
Fonctionnalité de suggestions de liens : 2 liens ajoutés.
 
(16 versions intermédiaires par 15 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
{{voir homonymes|OPA}}
{{voir homonymes|OPA}}
{{ébauche|logiciel libre}}
{{Infobox Langage de programmation
{{Infobox Langage de programmation
| nom = Opa
| nom = Opa
| logo = [[Fichier:Opa-logo-orange.png]]
| logo = Opa-logo-orange.png
| paradigme = [[Paradigme (programmation)|multiparadigme]] : [[Programmation impérative|impérative]], [[Programmation fonctionnelle|fonctionnelle]]
| paradigme = [[Paradigme (programmation)|multiparadigme]] : [[Programmation impérative|impérative]], [[Programmation fonctionnelle|fonctionnelle]]
| année = 2010 (Première citation), 2011 (Release open source)
| date de première version = 2010 (Première citation), 2011 (Release open source)
| auteur = [[MLstate]]
| auteur = [[MLstate]]
| dernière version stable= Build 28888
| dernière version = 1.1.1
| date de dernière version stable = {{Date|6|juin|2011|en informatique}}
| date de dernière version = {{Date|11|avril|2015|en informatique}}
| typage = [[Typage fort|Fort]], [[Typage statique|statique]]
| typage = [[Typage fort|Fort]], [[Typage statique|statique]]
| implémentations =
| implémentations =
| influencé par = [[OCaml]]
| influencé par = [[OCaml]]
| système d'exploitation = [[Linux]], [[MacOSX]]
| système d'exploitation = [[Linux]], [[MacOSX]], [[Windows]]
| licence = [[Affero GPL]]
| licence = [[Affero GPL]]
| site web = [http://opalang.org opalang.org]
| site web = [http://opalang.org opalang.org]
Ligne 22 : Ligne 21 :
Opa est une technologie de développement d’applications Web distribuées. C’est un nouveau langage de programmation fortement couplé à une bibliothèque Web standard qui remplit toutes les fonctions : de serveur d’applications Web, à serveur de base de données.
Opa est une technologie de développement d’applications Web distribuées. C’est un nouveau langage de programmation fortement couplé à une bibliothèque Web standard qui remplit toutes les fonctions : de serveur d’applications Web, à serveur de base de données.


En un mot, Opa ne dépend pas des piles serveurs actuelles, comme par exemple [[Apache]] plus [[PHP]] plus [[MySQL]] plus [[Symfony]]. Un code source Opa est compilé en un binaire autonome du service, qui se contente d’une distribution GNU/Linux nue (même [[MiniLinux]]) pour l’exécution.
En un mot, Opa ne dépend pas des piles serveurs actuelles, comme [[Apache HTTP Server|Apache]] plus [[PHP]] plus [[MySQL]] plus [[Symfony]]. Un [[code source]] Opa est compilé en un binaire autonome du service, qui se contente d’une distribution GNU/Linux nue (même [[MiniLinux]]) pour l’exécution.


Opa est spécialement conçu pour le Web et spécifie l’ensemble des aspects de l’application :
Opa est spécialement conçu pour le Web et spécifie l’ensemble des aspects de l’application :
Ligne 30 : Ligne 29 :


== Exemple de code ==
== Exemple de code ==
L'exemple ci-dessous est le code complet d'un webchat minimal en Opa.
L'exemple ci-dessous est le code complet d'un [[webchat]] minimal en Opa.


<source lang = "c">
<syntaxhighlight lang = "c">
/**
/**
* Le type des messages échangés sur la chatroom
* Le type des messages échangés sur la chatroom
Ligne 95 : Ligne 94 :
[@static_resource_directory("resources")],
[@static_resource_directory("resources")],
["resources/css.css"], start)
["resources/css.css"], start)
</syntaxhighlight>
</source>


== Liens externes ==
== Liens externes ==
*[http://www.infoworld.com/d/developer-world/infoworld-review-tools-rapid-web-development-297 Article comparatif de nouvelles technologies web, dont une pré-version d'Opa, sur InfoWorld ] (inscription requise)
* [http://www.infoworld.com/d/developer-world/infoworld-review-tools-rapid-web-development-297 Article comparatif de nouvelles technologies web, dont une pré-version d'Opa, sur InfoWorld ] (inscription requise)
*[http://linuxfr.org/news/opa-un-nouveau-langage-pour-le-développement-d’applications-web Discussion sur linuxfr]
* [http://linuxfr.org/news/opa-un-nouveau-langage-pour-le-développement-d’applications-web Discussion sur linuxfr]
*[http://www.slideshare.net/IamYoric/opa-owasp-2010 Slides de la présentation à OWASP 2010]
* [http://www.slideshare.net/IamYoric/opa-owasp-2010 Slides de la présentation à OWASP 2010]
*[https://www.owasp.org/index.php/Opa Page du projet à OWASP]
* [https://www.owasp.org/index.php/Opa Page du projet à OWASP]
*[https://github.com/MLstate/opalang Dépôt sur github]
* [https://github.com/MLstate/opalang Dépôt sur github]


[[Catégorie:Langage de programmation]]
{{Palette Langages de programmation|JavaScript}}
{{Portail|logiciels libres|programmation informatique}}


[[Catégorie:Langage de script]]
[[en:Opa (programming language)]]
[[Catégorie:Langage pour pages Web dynamiques]]
[[Catégorie:Logiciel libre sous licence AGPL]]
[[Catégorie:Logiciel pour Windows]]
[[Catégorie:Logiciel pour Unix]]
[[Catégorie:Langage de programmation]]

Dernière version du 24 janvier 2024 à 22:08

Opa
Logo.
Date de première version 2010 (Première citation), 2011 (Release open source)
Paradigme multiparadigme : impérative, fonctionnelle
Auteur MLstate
Dernière version 1.1.1 ()
Typage Fort, statique
Influencé par OCaml
Système d'exploitation Linux, MacOSX, Windows
Licence Affero GPL
Site web opalang.org

Opa est un langage de programmation d'applications et services web utilisable sous licence Affero GPL ou sous licence privée.

Philosophie

[modifier | modifier le code]

Opa est une technologie de développement d’applications Web distribuées. C’est un nouveau langage de programmation fortement couplé à une bibliothèque Web standard qui remplit toutes les fonctions : de serveur d’applications Web, à serveur de base de données.

En un mot, Opa ne dépend pas des piles serveurs actuelles, comme Apache plus PHP plus MySQL plus Symfony. Un code source Opa est compilé en un binaire autonome du service, qui se contente d’une distribution GNU/Linux nue (même MiniLinux) pour l’exécution.

Opa est spécialement conçu pour le Web et spécifie l’ensemble des aspects de l’application :

  • le code client comme le code serveur sont écrits en Opa : le compilateur détermine automatiquement les parties client et serveur (des annotations existent pour lui forcer la main), traduit le code client en JavaScript et automatise les échanges entre client et serveur ;
  • la structure de la base de données et les requêtes sont également écrites en Opa : là aussi, le compilateur analyse les requêtes pendant la compilation et génère le code d’accès aux données.

Exemple de code

[modifier | modifier le code]

L'exemple ci-dessous est le code complet d'un webchat minimal en Opa.

/**
 * Le type des messages échangés sur la chatroom
 */
type message = 
  { author: string // Le nom de l'auteur
  ; text: string }   // Le texte du message

/**
 * Le principal "objet" : la room des messages
 */
@publish room = Network.cloud("room"): Network.network(message)

/**
 * Mise à jour de l'interface d'un utilisateur lors de l'arrivée d'un nouveau message
 *
 * @param x Le message
 */
user_update(x: message) =
  line = <div class="line">
            <div class="user">{x.author}:</div>
            <div class="message">{x.text}</div>
         </div>
  do Dom.transform([#conversation +<- line ])
  Dom.scroll_to_bottom(#conversation)

/**
 * Broadcast un message sur la room
 *
 * Lit le contenu de [#entry], envoie le message à [room] puis efface [#entry].
 *
 * @param author
 */
broadcast(author) =
   do Network.broadcast({~author text=Dom.get_value(#entry)}, room)
   Dom.clear_value(#entry)

/**
 * Construit l'interface client
 *
 * Choisit aléatoirement un nom d'auteur qui sera utilisé dans le chat
 *
 * @return L'interface utilisateur, envoyée par le serveur lors de la connexion d'un client.
 */
start() =
   author = Random.string(8)
   <div id=#header><div id=#logo></div></div>
   <div id=#conversation onready={_ -> Network.add_callback(user_update, room)}></div>
   <div id=#footer>
        <input id=#entry  onnewline={_ -> broadcast(author)}/>
        <div class="button" onclick={_ -> broadcast(author)}>Post</div>
   </div>

/**
 * Programme principal
 *
 * Construit une application "Chat" (sera également le titre de la page),
 * inclut statiquement le répertoire "resources" qui contient CSS et images du style
 * et appelle la fonction [start] définie précédemment dès qu'un client se connecte.
 */
server = Server.one_page_bundle("Chat",
       [@static_resource_directory("resources")],
       ["resources/css.css"], start)

Liens externes

[modifier | modifier le code]
  1. « Release 1.1.1 », (consulté le )