## digitalmars.D - Another kind of pointer arithmetic

- Ianis Vasilev (7/7) Jun 26 Somebody joked yesterday on Twitter about how pointer levels of
- welkam (4/11) Jun 26 This reminded me when one person heard that mov instruction is
- Igor Shirkalin (6/20) Jun 26 The task from the school:
- Stanislav Blinov (3/6) Jun 26 int******
- Superstar64 (3/10) Jun 27 This appears to be a form of peano numbers. See
- Ianis Vasilev (18/31) Jun 27 Yes, the whole point was implementing the corresponding semigroup
- Ianis Vasilev (2/7) Jun 27 I meant semiring operations, sorry.

Somebody joked yesterday on Twitter about how pointer levels of indirection can be used to represent natural numbers and how we can do arithmetic with them (I can't find the post right now). I decided to try and implement adding and multiplying levels of indirection: https://gist.github.com/v--/5cbd0046be6fc5dbff9a9ad2f1717cde I think it turned out fairly trivial.

Jun 26

On Friday, 26 June 2020 at 14:00:27 UTC, Ianis Vasilev wrote:Somebody joked yesterday on Twitter about how pointer levels of indirection can be used to represent natural numbers and how we can do arithmetic with them (I can't find the post right now). I decided to try and implement adding and multiplying levels of indirection: https://gist.github.com/v--/5cbd0046be6fc5dbff9a9ad2f1717cde I think it turned out fairly trivial.This reminded me when one person heard that mov instruction is turing complete so he implemented c compiler that emitted only mov instructions

Jun 26

On Friday, 26 June 2020 at 18:18:34 UTC, welkam wrote:On Friday, 26 June 2020 at 14:00:27 UTC, Ianis Vasilev wrote:The task from the school: Say, we have six intel 8086 cpu registers: ax, bx, cx, dx, si, di. Our task is to make the rotation: ah->al->bh->bl->ch->cl->dh->dl->ah. We can only use "move reg, reg" command. The si and di registers are undefined.Somebody joked yesterday on Twitter about how pointer levels of indirection can be used to represent natural numbers and how we can do arithmetic with them (I can't find the post right now). I decided to try and implement adding and multiplying levels of indirection: https://gist.github.com/v--/5cbd0046be6fc5dbff9a9ad2f1717cde I think it turned out fairly trivial.This reminded me when one person heard that mov instruction is turing complete so he implemented c compiler that emitted only mov instructions

Jun 26

On Friday, 26 June 2020 at 14:00:27 UTC, Ianis Vasilev wrote:I decided to try and implement adding and multiplying levels of indirection: https://gist.github.com/v--/5cbd0046be6fc5dbff9a9ad2f1717cdeint****** 99 indirections on the wall...

Jun 26

On Friday, 26 June 2020 at 14:00:27 UTC, Ianis Vasilev wrote:

Jun 27

On Saturday, 27 June 2020 at 20:03:30 UTC, Superstar64 wrote:On Friday, 26 June 2020 at 14:00:27 UTC, Ianis Vasilev wrote:Yes, the whole point was implementing the corresponding semigroup operations. The nice thing is that D templates allow mapping combinations of types and values to other types and values, which allows for a lot of flexibility (this is not specific to D, but it is nice nonetheless). For example, the defined templates can be viewed as mappings (or morphisms, or whatever) with the following signatures: IndirectionCounter: Types -> Values Add: Types × Types -> Types Mul: Types × Types -> Types You can map types to values via IndirectionCounter, but you can also create types from values by implementing the inverse of the IndirectionCounter template. I remember somebody talking about compile-time metaclasses some time ago, however I think that the type system is rich enough as it is right now.

Jun 27

On Saturday, 27 June 2020 at 23:16:37 UTC, Ianis Vasilev wrote:On Saturday, 27 June 2020 at 20:03:30 UTC, Superstar64 wrote:I meant semiring operations, sorry.[...]Yes, the whole point was implementing the corresponding semigroup operations. [...]

Jun 27