sqlite3 library which can read class instances (not structs)?

2025-03-06 Thread Andy Valencia via Digitalmars-d-learn
Is there a sqlite3 interface library which can correctly read 
into instances?  sqlite3-d will let me compile with a class, but 
it segv's when run.  ddbc seems to support only structs, and I 
can use it to punch in one value at a time out of each row 
result.  But that feels clunky, and I'd avoid it if I could.


Thanks,
Andy



Re: Issue with struct invariants

2025-03-06 Thread Kirill Kryukov via Digitalmars-d-learn
Thanks for checking. Looks like it works with DMD, LDC, and older 
GDC, so this could be a GDC regression. I'll try to post it in 
GDC (GCC) Bugzilla if I can get an account there.


Re: What are the pointer aliasing rules in D?

2025-03-06 Thread Paul Backus via Digitalmars-d-learn

On Thursday, 6 March 2025 at 10:46:20 UTC, tmp wrote:
I come from a C/C++ background where the pointer aliasing rules 
make an assumption that pointers to different types cannot 
alias each other (with the exception of a pointer to char). 
This is known as the strict aliasing rule and while it can 
increase optimizations it makes it quite hard to write some low 
level code such as allocators or writing efficient memory 
copying functions.


Do the same rules exist in D? If they do, do workarounds exist?


No, D does not have strict aliasing rules. Pointers of different 
types are allowed to refer to the same memory location. However, 
there are still cases where *dereferencing* those pointers can 
lead to undefined behavior.


Some relevant sections of the language spec:

* [Memory Model][1]
* [Pointers][2]
* [Type Qualifiers][3]

[1]: https://dlang.org/spec/intro.html#memory-model
[2]: https://dlang.org/spec/type.html#pointers
[3]: https://dlang.org/spec/const3.html


Re: What are the pointer aliasing rules in D?

2025-03-06 Thread Ali Çehreli via Digitalmars-d-learn

On 3/6/25 6:34 AM, Paul Backus wrote:

> are allowed to refer to the same memory location. However, there are
> still cases where *dereferencing* those pointers can lead to undefined
> behavior.

This topic came up among colleagues recently. I think such restrictions 
come from CPU architectures where, as I remember reading on C++ forums 
years ago, the mere act of loading a misaligned pointer value into a 
pointer register would cause an error (trap?).


I cast any odd pointer value to any sized integer (and in one case to a 
struct pointer) from a void* buffer area and it works on the Intel CPU 
that I am working on.


Will this work on all or most modern CPUs?

Ali



Re: What are the pointer aliasing rules in D?

2025-03-06 Thread Dmitry Olshansky via Digitalmars-d-learn

On Thursday, 6 March 2025 at 16:11:37 UTC, Ali Çehreli wrote:

On 3/6/25 6:34 AM, Paul Backus wrote:

> are allowed to refer to the same memory location. However,
there are
> still cases where *dereferencing* those pointers can lead to
undefined
> behavior.

This topic came up among colleagues recently. I think such 
restrictions come from CPU architectures where, as I remember 
reading on C++ forums years ago, the mere act of loading a 
misaligned pointer value into a pointer register would cause an 
error (trap?).


ARM is like that, but I think you really must make a load out of 
that pointer.




I cast any odd pointer value to any sized integer (and in one 
case to a struct pointer) from a void* buffer area and it works 
on the Intel CPU that I am working on.


As long as pointer is properly aligned for the data in question 
eg 4 bytes for int* pointer it should still work.



Will this work on all or most modern CPUs?

Ali


—
Dmitry Olshansky
dmitry at olshansky.me
https://olshansky.me