Some work to look at, if you are curious: Event-B, Trillium, IronFleet
37 karma · joined October 11, 2017
PhD student in Rust verification at ETH Zurich. Rust enthusiast, gamejammer, CTF player and author, occasionally drawing surrealist pictures.
https://www.thenet.sk/
Some work to look at, if you are curious: Event-B, Trillium, IronFleet
If you set up a Node script where e.g. Express talks directly to the clients, then yes, the script crashing or hanging means the server becomes unavailable or unresponsive. However, you can also set up a layer in front of Node. See cgi-node for replicating the CGI workflow you might be used to.
There are some advantages to the standard Node model though: the program can manage its own resources, such as keeping a database connection open; it can run asynchronous maintenance tasks; it can see and report the current server load; it can easily combine HTTP(S) communication and Web socket streams; etc.
http://www.mcgov.co.uk/zahada.html
There were also some similar games/clones that never quite hit the spot for me.
In the long term we might investigate a full integration with external verifiers, e.g. to check that the specifications declared on external methods in Rust is justified by their actual implementation, say in C. This is tricky because the specification language/level of abstraction might differ. It might be necessary to prove program refinement, for example.
From what I have seen LH focuses on integrating into the type system (it is Liquid as in the 2008 Liquid Types paper). Generally it is possible to rewrite properties attached to a type to contracts, e.g. a non-zero Int input becomes a precondition that says that argument is non-zero. Checking termination with Prusti is also something we are working on.
- Prusti is doing _modular_ verification: every method is verified in isolation, and all calls in that method's code only use the contracts declared on the call targets. This is good for scalability and caching and it means that a method's signature + contract is the entire API (you don't depend on its internals).
- Methods without a contract are assumed to have the precondition `true` and postcondition `true` (in other words, such a method can always be called and makes no guarantees at all about what it did to its mutable arguments or result). For methods declared within the current project, this is fine: if they could panic, Prusti would identify this when verifying them and the user would have to declare a precondition. For external methods (whose implementation is not verified), this is potentially unsound.
- However, we are in the process of creating a library of specifications for stdlib methods. We use a large-scale analysis framework (rust-corpus/qrates) to evaluate which methods are used most often. We try to specify such methods first to cover real-world Rust code usages.
Making the default precondition for external functions "false" (unless specified otherwise) would be sound but would be quite restrictive. One goal of Prusti is also incremental verification: you should be able to start using Prusti for basic checks then gradually introduce more specifications to get stronger and stronger guarantees about the program's behaviour.
If I had to point out its biggest flaw, it would be a lack of in-depth documentation - the API reference is understandable, the manual explains the language features quite well, but if you want to do some more specific things with a less-used platform, for example, you might have to experiment a little bit. I think this is a consequence of having a smaller community for a project which targets such a large number of targets simultaneously. However, since you asked about games, Haxe is great for gamedev. There are multiple frameworks which allow you to develop cross-platform games very smoothly. There are many games popular on Steam that were written in Haxe: Papers, Please (NME); Evoland (OpenFL? not sure); Rymdkapsel (OpenFL); the upcoming Northgard (http://northgard.net/, using the new Hashlink target).
I am also playing around with writing a framework, though it's nowhere near completion. I've written many gamejam games in Haxe (http://www.thenet.sk/), with source code, if that interests you.
If you want to try something new – I recommend Haxe wholeheartedly, even if you decide not to use it, I think writing code in it is just fun.