Array operations
Andy Valencia
dont at spam.me
Sat May 3 14:23:00 UTC 2025
On Saturday, 3 May 2025 at 11:18:00 UTC, Nick Treleaven wrote:
>> Second, in assigning from arrays of differing sizes, Phobos
>> causes an illegal instruction, rather than the sort of
>> exception I'd have expected. I'm curious why they stepped
>> away from D's exception architecture?
> It throws a RangeError rather than an Exception. One advantage
> is that allows indexing an array to be used in `nothrow` code.
> Also, bounds checks can be turned off, in which case nothing
> would be thrown, and code attempting to catch this occurence
> would never be called.
At least on 1.40.1 of the ldc2 distro for x86-64, uses the
"illegal instruction" instruction. But it does make sense that
array operations want to be outside the "nothrow" guarantee, as
that would make nothrow almost useless.
Thanks,
Andy
```
(gdb) r
Starting program: /home/vandys/dlang/tst41
[Thread debugging using libthread_db enabled]
Using host libthread_db library
"/lib/x86_64-linux-gnu/libthread_db.so.1".
[2, 2, 2, 2, 1, 1, 1, 1]
[2, 2, 2, 2, 1, 1, 1, 1]
Program received signal SIGILL, Illegal instruction.
0x00007ffff7f5a9e8 in
core.internal.util.array._enforceSameLength(const(char[]),
const(ulong), const(ulong)) ()
from
/home/vandys/ldc2-1.39.0-linux-x86_64/bin/../lib/libdruntime-ldc-shared.so.109
(gdb) x/i $pc
=> 0x7ffff7f5a9e8
<_D4core8internal4util5array18_enforceSameLengthFNbNfxAaxmxmZv+168>: ud2
(gdb)
```
More information about the Digitalmars-d-learn
mailing list