Opa (software)

Opa
Logo.
Datum první verze 2010 (první citace), 2011 (vydání open source)
Paradigma multiparadigma  : imperativní , funkční
Autor MLstate
Poslední verze 1.1.1 (11. dubna 2015)
Psaní na stroji Silný , statický
Ovlivněno OCaml
Operační systém Linux , MacOSX , Windows
Licence Affero GPL
webová stránka opalang.org

Opa je programovací jazyk pro webové aplikace a služby používané na základě licence Affero GPL nebo na základě soukromé licence.

Filozofie

Opa je technologie vývoje distribuovaných webových aplikací. Je to nový programovací jazyk silně spojený se standardní webovou knihovnou, která plní všechny funkce: od webového aplikačního serveru po databázový server.

Stručně řečeno, Opa nezávisí na aktuálních zásobnících serverů, jako je Apache plus PHP plus MySQL plus Symfony . Zdrojový kód Opa je kompilován do samostatného binárního souboru služby, který ke spuštění potřebuje pouze holou distribuci GNU / Linux (dokonce i MiniLinux ).

Opa je speciálně navržen pro web a specifikuje všechny aspekty aplikace:

Ukázkový kód

Níže uvedený příklad je kompletní kód pro minimální webový chat 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)

externí odkazy