On 7/15/2014 9:25 AM, Johannes Pfau wrote:
DIP62 describes how to solve this problem and make embedded programming
a first-class citizen in D:
http://wiki.dlang.org/DIP62

This is a particularly well-written DIP, thank you and the other contributors 
to it.


* Although it's explained in the DIP in detail, I must mention this
   here again: We need _first-class_ support for embedded programming in
   D. Workarounds might be available (peek/poke, inline asm) but it will
   be obvious to most C programmers that C has got the better solution
   with the volatile qualifier. D enthusiasts might be happy if they can
   use workarounds to make D work on microcontrollers. But if we want to
   appeal to outsiders we can't confront them with obvious workarounds
   and hacks as the first thing they see in D. And if they think embedded
   programming is a second class citizen in D, why should they use it
   at all?

1. Volatile has caused a major increase in the complexity of the C++ type system - a complexity far out of proportion to the value it provides. It would have a similar complex and pervasive effect on the D type system.

2. You mention peek/poke here, but not in the DIP. [Background: I've designed and built embedded systems, and written the software for them.] There aren't that many memory-mapped I/O registers. They just aren't worth bending the entire language around them. Peek/poke work just fine:

1. they can be implemented as compiler intrinsics so there is no efficiency cost for using them

2. they make it clear in user code when memory-mapped I/O is accessed

3. if you really hate peek/poke calls appearing in the code, you can use UFCS to make them look like variables

4. they are simple to explain and understand, they do not introduce a numbing complexity to the type system

5. peek/poke will not add to the confusion about the difference between volatile and shared. No sane person would be tempted to use peek/poke to implement concurrency. The semantics of volatile in other languages won't confuse things for D peek/poke.


The one thing peek/poke doesn't offer is transitivity. C/C++ don't offer volatile transitivity either. I'm not at all sure that anyone builds a data structure in memory-mapped registers, so I'm not convinced this is a need.

Reply via email to