{"size": 2391, "ext": "scrbl", "max_stars_repo_path": "racket/com-spacetimecat/rackbol/about.scrbl", "max_stars_repo_name": "edom/work", "max_stars_repo_stars_event_min_datetime": null, "max_stars_repo_stars_event_max_datetime": null, "max_issues_repo_path": "racket/com-spacetimecat/rackbol/about.scrbl", "max_issues_repo_name": "edom/work", "max_issues_repo_issues_event_min_datetime": "2020-12-02T18:37:37.000Z", "max_issues_repo_issues_event_max_datetime": "2022-02-16T00:55:32.000Z", "max_forks_repo_path": "racket/com-spacetimecat/rackbol/about.scrbl", "max_forks_repo_name": "edom/work", "max_forks_repo_forks_event_min_datetime": "2018-10-02T15:20:22.000Z", "max_forks_repo_forks_event_max_datetime": "2018-10-02T15:20:22.000Z"}
{"max_stars_count": null, "max_issues_count": 4, "max_forks_count": 1, "avg_line_length": 37.9523809524, "max_line_length": 114, "alphanum_fraction": 0.7294019239}
#lang stc-racket/scribble-manual

@title{About Rackbol}

Rackbol stands for "Racket-based Business-Oriented Language".

@section{Key ideas}

The key ideas are:

@itemlist[
    @item{
        The syntax should capture the programmer's intention.
        If the intention does not change, then the model should not change,
        although the translator may change.
    }
    @item{
        Similar intentions should have similar forms.
    }
    @item{
        Programmers should specialize into language designers and language users, not into back-end and front-end.
        Programmers should specialize into layers of lasagna, not into pieces of cake.
        Back-end/front-end specialization adds productivity,
        but language-designer/language-user specialization @emph{multiplies} productivity.
        The trade off is... it also multiplies complexity? :(
    }
]

@section{Before you marry us}

Check that your requirements are compatible with our @emph{fundamental assumptions}:

@itemlist[
    @item{The output is a Web application using Racket's "Continue" Web framework.}
    @item{The only supported DBMS is PostgreSQL 9.5 or later.}
    @item{The application is developed on and is deployed to a GNU/Linux installation, especially Debian 9.}
    @item{We may change our tech stack and stop supporting our previous tech stacks.}
    @item{
        We act in our self-interest:
        We do what interests us, the Rackbol developers, not you.
        If it works for us, we are not going to fix it for you.
    }
    @item{Rackbol comes with no support and no warranty. Use it at your own risk.}
    @item{Rackbol is opinionated and inflexible. It is not a general-purpose programming language.}
]

Those fundamental assumptions are hard to change.
If your requirements conflict or will conflict with them,
then do not use this language, unless you are willing to develop the language yourself.

After you make sure that you can afford the fundamental assumptions,
check the user guide and see whether you like this language.
If you don't like it, don't use it.

If you decide to marry us, you will eventually find something you don't like.
When that time comes, you have three choices:

@itemlist[
    @item{accept our shortcomings, and learn to live with the pain; or}
    @item{join us, and help develop Rackbol; or}
    @item{divorce us, and find another language.}
]
