================
@@ -0,0 +1,943 @@
+# Introduction
+
+This is a high level design documentation for Contracts implementation in 
Clang.
+This summarized experiences from several implementors in seperate branches.
+
+This is also tend to be some developer policy/guide of contracts for how 
should clang
+developers continue working on this.
+
+## High Level Developing Style
+
+We plan to implement contracts in different small PRs. We don't want to 
implement
+contracts in a single PR. Smaller PR helps reviewers to understand the patch 
and give
+higher quality reviewers. Samller PR is also easier for testers to test and 
find the
+problems.
+
+The implementation contracts is marked as experimental before we announce it 
is 
+implemented completely.
+
+### ABI
+
+We'd like to keep ABI unstable during the experimental process. We all 
understand
+ABI's importance. But getting consensus for ABI needs a long time. We prefer to
+move faster instead of waiting the consensus for ABI consensus.
+
+For GCC/libstdc++ interoperability, we need to identify the ABI revision
+which a toolchain targets. We shouldn't assume that one experimental GCC ABI
+will remain unchanged.
+
+### Driver flags
+
+Before we think the support of contracts are minimal usable, users are unable
+to get access to contracts unless users pass `-Xclang` explicitly. 
----------------
EricWF wrote:

We should settle the flag names now. Whatever the first Sema PR adds is going 
to stick.

I'd use `-fcontracts` as the experimental gate. Making it cc1-only to start is 
fine if you prefer. The doc should say whether `contract_assert` is a keyword 
in `-std=c++26` without the flag.

For the evaluation semantic, I'd use 
`-fcontract-evaluation-semantic={ignore,observe,enforce,quick_enforce}`, 
defaulting to `enforce`. That matches GCC's P2900 implementation and Josh's 
P3850 branches.

I wouldn't use `-fcontract-mode=`. GCC 13 uses that spelling as an on/off 
switch. "Mode" is overloaded across the papers, and we'll want P3595-style 
per-kind configuration later without renaming the flag.


https://github.com/llvm/llvm-project/pull/229978
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to