Opa | ||
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.
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:
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)