X-Git-Url: http://plrg.eecs.uci.edu/git/?p=cdsspec-compiler.git;a=blobdiff_plain;f=notes%2Fimpl.txt;h=ea90727bee36c3458bc0d2bc5de0bcbc12ff0fb9;hp=12e364bda1758a4c9fb0e9405a887cb2cb17cf03;hb=35f1ebf0d072566ac94d9cef7db16e59f9fe371b;hpb=efe3f6d7242a505f593c8535c7c1339ccc1bd11a diff --git a/notes/impl.txt b/notes/impl.txt index 12e364b..ea90727 100644 --- a/notes/impl.txt +++ b/notes/impl.txt @@ -31,3 +31,20 @@ is used for the interface declaration and @Interface_define is for the interface definition. This is redundant information, but it makes the implementation much easier because we don't need to parse the C/C++ program. + +6. Checking at runtime or check with complete trace analysis can have the + follwing concerns. Checking at runtime, HB might not be established yet (we + can leave it at trace analysis though). More importantly, we have potential + commit point and commit point check, which might be preempted by another + commit point. We can't decide whether to execute the commit point actions or + not since we can't decide if it's really a commit point at that time. Checking + with complete execution can be more clear and better designed, but it has a + tough challenge. Some data structure may check their predicate with pointers, + however, we can't guarantee those pointers are still valid (the object they + are pointing to may be changed or even deleted). To tackle this, we provide an + alternative which requires users to define the snapshot function for the + pointers if they are about to check with pointers that might change. In the + current data structure, it's not a problem because they only return reference + or pointers, which we can do simple equality check. We decided to take the + trace analysis approach because it's still more flexible and easier to + implement.