digitalmars.D.learn - BetterC unexpected results
- DLearner (29/29) Jan 08 2023 I thought dynamic arrays were unavailable under -betterC.
- Richard (Rikki) Andrew Cattermole (6/6) Jan 08 2023 Dynamic arrays are not.
- areYouSureAboutThat (4/6) Jan 08 2023 See the 'Retained Features' section, and the 'Unavailable
- ryuukk_ (3/32) Jan 08 2023 That example is working for me
- DLearner (21/40) Jan 11 2023 ```
- Richard (Rikki) Andrew Cattermole (7/7) Jan 11 2023 Makes sense, you wrote a main function which only applies to having a
I thought dynamic arrays were unavailable under -betterC. Example_02: ``` extern(C) void main() { import core.stdc.stdio : printf; int[] A; printf("Hello betterC\n"); } ``` ``` dmd -betterC -run Example_02 ``` Expected result: Failure at compilation stage, owing to presence of dynamic array A, when -betterC set. Actual result: Ran to completion, dislaying the message. Example_03: ``` void main() { import core.stdc.stdio : printf; int[] A; printf("Hello betterC\n"); } ``` ``` dmd -betterC -run Example_03 ``` Expected result: Failure at compilation stage, owing to presence of dynamic array A, when -betterC set. Actual result: Failed at link (not compilation) stage.
Jan 08 2023
Dynamic arrays are not. Slices are. A slice is a pointer + length pair; it requires no runtime infrastructure to manipulate. A dynamic array, has slices that reference internal state in the GC which is where all the manipulation takes place (like appending).
Jan 08 2023
On Sunday, 8 January 2023 at 13:49:22 UTC, DLearner wrote:I thought dynamic arrays were unavailable under -betterC. .. ...See the 'Retained Features' section, and the 'Unavailable Features' section https://dlang.org/spec/betterc.html
Jan 08 2023
On Sunday, 8 January 2023 at 13:49:22 UTC, DLearner wrote:I thought dynamic arrays were unavailable under -betterC. Example_02: ``` extern(C) void main() { import core.stdc.stdio : printf; int[] A; printf("Hello betterC\n"); } ``` ``` dmd -betterC -run Example_02 ``` Expected result: Failure at compilation stage, owing to presence of dynamic array A, when -betterC set. Actual result: Ran to completion, dislaying the message. Example_03: ``` void main() { import core.stdc.stdio : printf; int[] A; printf("Hello betterC\n"); } ``` ``` dmd -betterC -run Example_03 ``` Expected result: Failure at compilation stage, owing to presence of dynamic array A, when -betterC set. Actual result: Failed at link (not compilation) stage.That example is working for me What's the exact code you wrote?
Jan 08 2023
On Sunday, 8 January 2023 at 23:59:21 UTC, ryuukk_ wrote: [...]``` void main() { import core.stdc.stdio : printf; int[] A; printf("Hello betterC\n"); } ``` Result: ``` C:\Users\SoftDev\Documents\BDM\D\BetterC>dmd -betterC -run Example_03 lld-link: error: undefined symbol: __d_run_mainExample_03: ``` void main() { import core.stdc.stdio : printf; int[] A; printf("Hello betterC\n"); } ``` ``` dmd -betterC -run Example_03 ``` Expected result: Failure at compilation stage, owing to presence of dynamic array A, when -betterC set. Actual result: Failed at link (not compilation) stage.That example is working for me What's the exact code you wrote?Error: linker exited with status 1 ``` Compiler version: ``` C:\Users\SoftDev\Documents\BDM\D\BetterC>dmd --version DMD32 D Compiler v2.100.2-dirty ```referenced by Example_03.obj:(_main)
Jan 11 2023
Makes sense, you wrote a main function which only applies to having a druntime. For -betterC, use the libc's main function: ```d extern(C) void main() { } ```
Jan 11 2023