java - 将 dafny 编译为 java
问题描述
我正在尝试将一个简单的 max 示例(permalink)编译为 java:
$ Scripts/dafny /compileTarget:java /compile:3 max.dfy
Dafny program verifier finished with 3 verified, 0 errors
Wrote textual form of target program to max-java/max.java
Additional target code written to max-java/_System/nat.java
Additional target code written to max-java/_System/__default.java
Additional target code written to max-java/dafny/Tuple0.java
Running...
max element of [7, 4, 2, 9, 6, 3] is 9
所以我可以编译+运行它作为一个整体,但不能独立这样做:
$ Scripts/dafny /compileTarget:java /compile:1 /spillTargetCode:1 /out:main.java max.dfy
$ javac -cp Binaries/DafnyRuntime.jar main-java/main.java
main-java/main.java:3: error: package _System does not exist
import _System.*;
^
main-java/main.java:18: error: package _System does not exist
dafny.Helpers.withHaltHandling(_System.__default::__Main);
^
2 errors
另一个尝试:
$ javac -cp Binaries/DafnyRuntime.jar -cp main-java/ main-java/main.java
main-java/main.java:18: error: cannot find symbol
dafny.Helpers.withHaltHandling(_System.__default::__Main);
^
symbol: class Helpers
location: package dafny
1 error
我想我一定是错过了什么。
解决方案
您需要将 dafny 编译器创建的“附加目标代码”文件添加到编译中。你可以这样做:
$ javac -cp Binaries/DafnyRuntime.jar main-java/main.java main-java/*/*.java
然后,您可以使用类似的东西运行
$ cd main-java
$ java -cp ../Binaries/DafnyRuntime.jar:. Main
通过在 Dafny 源的测试文件中查找 javac 用法的示例找到了这一点 - 但即使在那里它也失败了,并且-cp
您使用的开关是缺失的部分。
推荐阅读
- google-apps-script - RangecopyFormat(仅限)使用谷歌脚本从一个电子表格到另一个电子表格
- r - 替换列表元素中的值
- reactjs - 使用 Jasmine 对已导入 SVG 的 Typescript/React 进行单元测试
- c# - 查看函数执行时间的最佳方法
- haskell - 如何在 Template Haskell 中“应用”类型变量?
- python - Python中的特定选择和排列
- c# - 更改属性内的值后,PropertyChanged 事件为空
- javascript - 看不到 Date1 中元素的日期值
- java - 当每个面板都在 Gridlayout 中时,如何将两个面板添加到单个 JFrame?
- c# - 将 ac# winform 移植到 linux?