Opa (software)

Opa
Logotipo.
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.

Filosofia

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:

Código de amostra

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)

links externos