Opa | ||
Data da primeira versão | 2010 (primeira citação), 2011 (lançamento de código aberto) | |
---|---|---|
Paradigma | multiparadigma : imperativo , funcional | |
Autor | MLstate | |
Última versão | 1.1.1 (11 de abril de 2015) | |
Digitando | Forte , estático | |
Influenciado por | OCaml | |
Sistema operacional | Linux , MacOSX , Windows | |
Licença | Affero GPL | |
Local na rede Internet | opalang.org | |
Opa é uma linguagem de programação para aplicativos e serviços da Web usados sob licença Affero GPL ou sob licença privada.
Opa é uma tecnologia de desenvolvimento de aplicativos da web distribuída. É uma nova linguagem de programação fortemente acoplada a uma biblioteca padrão da Web que cumpre todas as funções: do servidor de aplicativos da Web ao servidor de banco de dados.
Resumindo, o Opa não depende de pilhas de servidores atuais, como Apache mais PHP mais MySQL mais Symfony . O código-fonte Opa é compilado em um binário de serviço autônomo, que só precisa de uma distribuição GNU / Linux nua (até mesmo MiniLinux ) para execução.
Opa é especialmente projetado para a web e especifica todos os aspectos do aplicativo:
O exemplo abaixo é o código completo para um Opa webchat mínimo.
/** * 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)