Skip to content
This repository

Vigil, the eternal morally vigilant programming language

branch: master

Merge pull request #12 from DanLovesProofs/master

Fixes a lapsus calami.
latest commit 38d7ced577
Bob Nystrom authored
Octocat-spinner-32 example Creatio ex nihilo. January 03, 2013
Octocat-spinner-32 README.md Fixes a lapsus calami. January 03, 2013
Octocat-spinner-32 vigil Creatio ex nihilo. January 03, 2013
README.md

Vigil is a very safe programming language, and an entry in the January 2013 PLT Games competition.

Many programming languages claim to take testing, contracts and safety seriously, but only Vigil is truly vigilant about not allowing code that fails to pass programmatic specifications.

Syntax and semantics

Vigil is very similar to Python with the minor proviso that you must provide a main() function which will be automatically called for you.

Infinitely more important than mere syntax and semantics are its addition of supreme moral vigilance. This is similar to contracts, but less legal and more medieval.

The implore statement to beseech your needs

Often, a function will require that parameters have certain desireable properties. A function in Vigil can state what it requires by using implore:

def square_root(n):
    implore n >= 0
    return math.sqrt(n)

If a caller fails to provide valid arguments, it is wrong and must be punished.

The swear statement to state what you provide in return

If a good caller meets its obligations, the onus is thus on you to fulfill your end of the bargain. You can state the oaths that you promise to uphold using swear:

def fib(n):
    if n < 2:
        result = n
    else:
        result = fib(n - 1) + fib(n - 2)

    # fib() never returns negative number.
    swear result >= 0
    return result

If a function fails to uphold what it has sworn to do, it is wrong and must be punished.

Unhandled exceptions

It goes without saying that any function that throws an exception which isn't caught is wrong and must be punished.

Runtime vigilance

This is where Vigil sets itself apart from weaker languages that lack the courage of their convictions. When a Vigil program is executed, Vigil itself will monitor all oaths (implorations and swears) that have been made. If an oath is broken, the offending function (the caller in the case of implore and the callee in the case of swear) will be duly punished.

How?

Simple: it will be deleted from your source code.

The only way to ensure your program meets its requirements to absolutely forbid code that fails to do so. With Vigil, it will do this for you automatically. After enough runs, Vigil promises that all remaining code meets its oaths.

Usage

Vigil is a command-line executable. Pass it the path to a file to run:

$ ./vigil example/hello.vg

The "example" directory has some to get you started.

FAQ

Is this serious?

Eternal moral vigilance is no laughing matter.

But isn't a language that deletes code crazy?

No, wanting to keep code that demonstrably has bugs according to its own specifications is crazy. What good could it possibly serve? It is corrupted and must be cleansed from your codebase.

Vigil will do this for you automatically.

Vigil deleted a function. Won't that cause the functions that call it to fail?

It would seem that those functions appear to be corrupted as well. Run Vigil again and it will take care of that for you. Several invocations may be required to fully excise all bugs from your code.

Something went wrong with that request. Please try again.