Skip to content

Devronium/ConceptApplicationServer

Repository files navigation

Concept Application Server

A scalable webserver, a fast with small footprint programming language, a framework, a masterless multi-server document oriented with a SQL subset database engine (TinDB). It runs on FreeBSD, Linux, Windows and OS X, tested on x86, amd64 and ARM.

The programing language

Concept is a simple javascript-like language, with a small difference: it is strict object-oriented. Also, all the code is compiled. Additionally it has a JIT compiler based on sljit. It is designed to be friendly and easy to use.

A simple console hello world app:

#!/usr/local/bin/concept class Main { Main() { echo "Hello world!"; } } 

The function keyword is optional.

The simplest form-based application it looks like this:

include Application.con include RForm.con include RLabel.con class HelloForm extends RForm { private var labelHello; HelloForm(Parent) { super(Parent); labelHello = new RLabel(this); labelHello.Caption = "Hello world!"; labelHello.Show(); } } class Main { Main() { try { var Application = new CApplication(new HelloForm(null)); Application.Init(); Application.Run(); Application.Done(); } catch (var Exception) { echo "Didn’t catch $Exception"; } } } 

The simplest async cgi application looks like this:

include async.con class app { app(req) { req.header("Content-Type", "text/html; charset=utf-8"); // req.usesession(); // req.session.data["x"] = "test"; // Using mustache templates: // req.template = "tpl/template.html"; // req.put([ // "title" => "Hello world!", // "content" => "Hello !" // ]); // or, no templates: req << "Hello world!"; } } 

The webserver

A full HTTP2 asynchronous webserver, written in Concept with a websocket application model.

The framework

A rich framework, covering lots of protocols, controls, functions and classes.

TinDB

TinDB is an asynchronous database engine written entirely in Concept. It features:

  • Document-based objects stored in collections
  • Indexes, including fulltext based on BM25 built-in support or Apache Lucy
  • Stored procedures written in JavaScript(spidermonkey or duktape) or Concept
  • Triggers
  • Masterless replication in a ring configuration

A great thing about TinDB objects is that circular references are safe.

Javascript Client (ConceptClient.js)

A webclient for websocket-driven extremely responsive, single-page web applications.

Native C modules

Lots of wrappers for various library (over 7000 functions) starting from libxml2 and libcurl to Sphinx and WebKit.