[SystemSafety] C for OSs
Olwen Morgan
olwen at phaedsys.com
Mon Sep 9 17:15:54 CEST 2019
I'm not sure that's what I would regard as a first-class Boolean type.
And, anyway, I tend AFAP to stick to C90 on my usual paranoid-critical
grounds.
Olwen
On 09/09/2019 12:03, David Crocker wrote:
>
> C does have a first-class Boolean type since the 1999 version. Sadly,
> it's type-convertible to integer; but any MISRA-C checker will take
> care of that.
>
> David Crocker, Escher Technologies Ltd.
> http://www.eschertech.com
> Tel. +44 (0)20 8144 3265 or +44 (0)7977 211486
> On 09/09/2019 11:13, Olwen Morgan wrote:
>>
>>
>> I agree with your point about different compilers. It's a hefty
>> challenge for any C tool developer to come up with retrofitted formal
>> semantics that fit many compilers.
>>
>> As regards the lack of features in C, again I agree. AFAI recall QAC
>> can produce diagnostics that make up for the lack of named type
>> equivalence. Functions can make up to a significant extent for the
>> lack of first-class Boolean and array types. One can program around
>> the lack of user-defined scalar types. But of course, C simply does
>> not have packages.
>>
>> But for all the possibility of workarounds, they remain just that. It
>> takes effort to give yourself anything approaching the convenience of
>> Ada's superior language design.
>>
>> Your comment about an acceptable false-positive rate is illuminating.
>> Very early in my use of QAC, I simply decided to live with a high
>> false-positive rate as the price of getting good diagnostics. Only
>> gradually did I reduce the false positives by adopting the
>> paranoid-critical C programming style that I use today - and here the
>> surrealist overtones are not entirely frivolous.
>>
>> For the avoidance of doubt, _IMO yo__u _*_c_**_annot
>> _**_equal_*_SPARK Ada code quality in C_. I've only ever said that
>> you can approach it (albeit, I'm confident, fairly closely) by using
>> different best-of-breed tools and exercising a severe coding
>> discipline that takes a long time - and perhaps a peculiar mindset -
>> to acquire.
>>
>> And all that hassle really shouldn't be necessary in the first place.
>>
>> Olwen
>>
>>
>> On 09/09/2019 10:29, Roderick Chapman wrote:
>>>
>>> On 08/09/2019 18:23, Olwen Morgan wrote:
>>>> Rod Chapman and I have a long-standing (and exceedingly civilised
>>>> :-) difference of opinion in this area. If you have the right
>>>> tools, and if you are prepared to observe draconian coding
>>>> discipline, then I believe that you can in C approach a SPARK Ada
>>>> level of code quality. Rod, if I am not traducing him, has
>>>> lingering doubts about this. IMO tools are no longer the problem
>>>> since those who write them simply retrofit sensible formal
>>>> semantics to (annotation-extended subsets of) C and then perform
>>>> verifications accordingly.
>>>
>>> I still have reservations. The big challenge is to come up with a
>>> formal semantics that is implemented by both your favourite
>>> verification tool and all versions of all compilers that you might
>>> have to use during the lifetime of a project. If you can "lock in"
>>> to exactly ONE compiler, then things are significantly simpler...
>>> but this is not a good place to be when, in twenty years time, you
>>> really do have to change compiler for a hardware update or some
>>> other reason, but the vendor has long since gone out of business. I
>>> see far too many projects stuck in this particular rut.
>>>
>>> In SPARK, it works by the complete removal of undefined behaviours
>>> and any dependence on unspecified behaviour. This requires
>>> subsetting and forms of analysis, which you need to be demonstrably
>>> sound and efficient enough to scale up to large programs.
>>>
>>> I am currently engaged in writing some highly critical C code, using
>>> the latest Frama-C toolset. I find the experience rather
>>> frustrating... the problem seems to be two-fold:
>>>
>>> 1. C is lacking some fundamental features that make SPARK work. (The
>>> short version: user-defined scalar types, named type equivalence, a
>>> first-class Boolean type, packages, formal parameter modes, and
>>> first-class array types).
>>>
>>> 2. Some very basic things in C are undefined. Worst-offender: signed
>>> integer overflow.
>>>
>>> The upshot is that I find it's very hard to get to an acceptable
>>> false-positive rate from the Frama-C WP tool. On a recent SPARK
>>> project, the "acceptable" false alarm rate for type-safety proof was
>>> ZERO.. so perhaps my expectations are set too high?
>>>
>>> Example: in SPARK, we use user-defined scalar types all over the
>>> place to describe invariants from the problem domain which apply to
>>> every parameter, constant and variable of each type. That info is
>>> used by the VC generator to constrain the values of variables, so
>>> that proving non-overflow becomes tractable. I don't know how to do
>>> that in C... (if anyone does know how, please help me out...)
>>>
>>> - Rod
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> The System Safety Mailing List
>>> systemsafety at TechFak.Uni-Bielefeld.DE
>>> Manage your subscription:
>>> https://lists.techfak.uni-bielefeld.de/mailman/listinfo/systemsafety
>>
>> _______________________________________________
>> The System Safety Mailing List
>> systemsafety at TechFak.Uni-Bielefeld.DE
>> Manage your subscription:https://lists.techfak.uni-bielefeld.de/mailman/listinfo/systemsafety
>
> _______________________________________________
> The System Safety Mailing List
> systemsafety at TechFak.Uni-Bielefeld.DE
> Manage your subscription: https://lists.techfak.uni-bielefeld.de/mailman/listinfo/systemsafety
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.techfak.uni-bielefeld.de/mailman/private/systemsafety/attachments/20190909/9f147587/attachment.html>
More information about the systemsafety
mailing list