控制Dafny命名约定和使用常量

时间:2017-07-17 16:33:40

标签: dafny

有没有办法控制Dafny用于目标代码的命名约定?

是否可以全局使用符号常量?像这样:

? global const MaxValue = 10000; ?

method Method1 (a : int) returns (b : int)
  requires a < MaxValue

有没有办法将数值表达式转换为字符串?

1 个答案:

答案 0 :(得分:2)

是的,是的。

要控制Dafny在目标代码中使用的各种实体的名称,请使用{:extern "ThisIsTheNameIWant"}属性。大多数声明都支持此属性。例如,您可以将一个放在类中,将另一个放在类中的方法上。有关更多示例,请参阅Dafny测试套件中的Test/dafny0/Extern.dfy文件。如果要查看生成的内容,请使用命令行中的/spillTargetCode:1标志。

对于常数,请使用:

const MaxValue := 10000

(注意,直到最近,你必须明确提供常量类型,所以你必须写

const MaxValue: int := 10000

如果您从源代码构建最新版本的Dafny,则从右侧表达式推断出类型。)

借用Ada语言的一个漂亮的功能是,您可以在数字文字中的任意两位数字之间插入下划线。如果你使用大量文字,其中包含一堆零,那么这使你的眼睛更容易看到你写了正确的数字。例如:

const MaxValue := 10_000
const PhoneNumber := 512_555_1212
const SignedInt32Limit := 0x8000_0000

Rustan