Opa (programvare)

Opa
Logo.
Dato for første versjon 2010 (første sitering), 2011 (utgivelse av åpen kildekode)
Paradigme multiparadigm  : viktig , funksjonell
Forfatter MLstate
Siste versjon 1.1.1 (11. april 2015)
Skrive Sterk , statisk
Påvirket av OCaml
Operativsystem Linux , MacOSX , Windows
Tillatelse Affero GPL
Nettsted opalang.org

Opa er et programmeringsspråk for applikasjoner og tjenester som brukes under lisens Affero GPL eller under privat lisens.

Filosofi

Opa er en distribuert teknologi for utvikling av webapplikasjoner. Det er et nytt programmeringsspråk sterkt kombinert med et standard nettbibliotek som oppfyller alle funksjonene: fra webapplikasjonsserver til databaseserver.

Kort sagt, Opa er ikke avhengig av nåværende serverstabler, som Apache pluss PHP pluss MySQL pluss Symfony . Opa-kildekoden er samlet i en frittstående tjenestebinær, som bare trenger en bare GNU / Linux-distribusjon (til og med MiniLinux ) for kjøring.

Opa er spesialdesignet for nettet og spesifiserer alle aspekter ved applikasjonen:

Eksempelkode

Eksemplet nedenfor er den komplette koden for en minimal Opa webchat.

/** * 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)

Eksterne linker