Skip to content

Compile time vs. Verification time vs. Runtime #32

@ePaul

Description

@ePaul

In the language specification it is not clearly mentioned that there are three phases, and how they depend on each other.

This is what I gathered (e.g. from the description of the assert and assume and fail statements):

  • Compile time is when the compiler parses and analyzes the source code, does some type checking, and emits code suitable for verification and for running.
  • Verification time is when a verifier takes the compiled code (maybe in a different representation than the one which is run) and checks that it actually does what it pretends to do.
  • Run time is when an interpreter takes the compiled code and executes it.

I first assumed those phased happen always in this order, and only verified code is actually run. But the description of fail tells me that it throws a fault at runtime, while the verifier makes sure it is not reachable. How can it then throw a fault? Same for assert (which is basically if (! condition): fail).

Does this mean verification is optional?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions