From d9fcad8cd6ec6f0469d25a1c6ad640d60a485d1c Mon Sep 17 00:00:00 2001 From: Melody Horn Date: Sun, 25 Oct 2020 11:26:30 -0600 Subject: add fragile keyword --- safety.md | 4 ++++ syntax.md | 1 + vs-c.md | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/safety.md b/safety.md index 8a03652..b8a2303 100644 --- a/safety.md +++ b/safety.md @@ -1,5 +1,9 @@ Each item in Wikipedia's [list of types of memory errors](https://en.wikipedia.org/wiki/Memory_safety#Types_of_memory_errors) and what Crowbar does to prevent them. +In general, Crowbar does its best to ensure that code will not exhibit any of the following memory errors. +However, sometimes the compiler knows less than the programmer, and so code that looks dangerous is actually fine. +Crowbar allows programmers to suspend the memory safety checks with the `fragile` keyword. + # Access errors ## Buffer overflow diff --git a/syntax.md b/syntax.md index 89c1c49..6413f8a 100644 --- a/syntax.md +++ b/syntax.md @@ -36,6 +36,7 @@ A *keyword* is one of the following literal words: - `extern` - `float` - `for` +- `fragile` - `function` - `if` - `include` diff --git a/vs-c.md b/vs-c.md index bceaab1..b6cbcd5 100644 --- a/vs-c.md +++ b/vs-c.md @@ -45,7 +45,7 @@ Some type modifiers in C only apply in very specific circumstances and so aren't Some C features are footguns by default, so Crowbar ensures that they are only used correctly. - Unions are not robust by default. - Crowbar only supports unions when they are [tagged unions](tagged-unions.md). + Crowbar only supports unions when they are [tagged unions](tagged-unions.md) (or declared and used with the `fragile` keyword). C's syntax isn't perfect, but it's usually pretty good. However, sometimes it just sucks, and in those cases Crowbar makes changes. -- cgit v1.2.3