digitalmars.D.learn - Objects(from classes) at Compile time? no gc
- Taylor Hillegeist (20/20) May 15 2014 The subject says it all really. i have this example:
- Tolga Cakiroglu (9/29) May 15 2014 First of all, that "static" keyword is meaningless there. You can
- =?UTF-8?B?QWxpIMOHZWhyZWxp?= (28/47) May 15 2014 Here are two ways of achieving it. Although f0 is constructed by new, I
- Jacob Carlborg (12/31) May 15 2014 If you create an immutable instance it's possible to create it at
- Steven Schveighoffer (3/37) May 16 2014 It will not.
- Taylor Hillegeist (3/50) May 16 2014 Does this work in GDC?
- "Marc =?UTF-8?B?U2Now7x0eiI=?= <schuetzm gmx.net> (4/11) May 17 2014 Can't test in GDC, but it does work in LDC, and I see no reason
- Taylor Hillegeist (16/28) May 19 2014 I've been trying to get a baremetal GDC working for the ARM
- Rikki Cattermole (10/29) May 15 2014 Rules about CTFE, I have:
The subject says it all really. i have this example: import core.memory; class fruit{ int value=5; public int getvalue(){ return value; } } int main(string[] args) { GC.disable; static fruit myfruit; return myfruit.getvalue(); } Most of the smart people will see that i want the program to return 5 but I did something dumb and didn't put in the "new" statement? So my question is in longer words "Can I create instances of objects at compile time?" and if not "why not, i could build something (roughly)equivalent out of structs and functions and have it at compile time?"
May 15 2014
On Friday, 16 May 2014 at 04:59:46 UTC, Taylor Hillegeist wrote:The subject says it all really. i have this example: import core.memory; class fruit{ int value=5; public int getvalue(){ return value; } } int main(string[] args) { GC.disable; static fruit myfruit; return myfruit.getvalue(); } Most of the smart people will see that i want the program to return 5 but I did something dumb and didn't put in the "new" statement? So my question is in longer words "Can I create instances of objects at compile time?" and if not "why not, i could build something (roughly)equivalent out of structs and functions and have it at compile time?"First of all, that "static" keyword is meaningless there. You can remove it. Secondly, the "getvalue" method is not defined as "static". So, it requires a object. It is not bound to class. Thirdly, when you define "fruit myfruit", the variable "myfruit" is still "null". It doesn't point anywhere in memory. Therefore, the variable "value" is no where in memory. And, thereby there is no spoon, I mean 5.
May 15 2014
On 05/15/2014 09:59 PM, Taylor Hillegeist wrote:The subject says it all really. i have this example: import core.memory; class fruit{ int value=5; public int getvalue(){ return value; } } int main(string[] args) { GC.disable; static fruit myfruit; return myfruit.getvalue(); } Most of the smart people will see that i want the program to return 5 but I did something dumb and didn't put in the "new" statement? So my question is in longer words "Can I create instances of objects at compile time?" and if not "why not, i could build something (roughly)equivalent out of structs and functions and have it at compile time?"Here are two ways of achieving it. Although f0 is constructed by new, I don't think that new is executed at run time (because it would conflict with 'static const'). f1 is definitely not using the GC because it is placed on a storage that the module owns: class Fruit { int value; this (int value) { this.value = value; } public int getvalue() const { return value; } } static const f0 = new Fruit(42); ubyte[__traits(classInstanceSize, Fruit)] storage; static const Fruit f1; static this() { import std.conv; f1 = emplace!Fruit(storage[], 43); } void main() { assert(f0.getvalue() == 42); assert(f1.getvalue() == 43); } Ali
May 15 2014
On 16/05/14 06:59, Taylor Hillegeist wrote:The subject says it all really. i have this example: import core.memory; class fruit{ int value=5; public int getvalue(){ return value; } } int main(string[] args) { GC.disable; static fruit myfruit; return myfruit.getvalue(); } Most of the smart people will see that i want the program to return 5 but I did something dumb and didn't put in the "new" statement? So my question is in longer words "Can I create instances of objects at compile time?" and if not "why not, i could build something (roughly)equivalent out of structs and functions and have it at compile time?"If you create an immutable instance it's possible to create it at compile time: int main(string[] args) { GC.disable; immutable fruit myfruit = new immutable(fruit); pragma(msg, myfruit.getvalue); // will print 5 at compile time return myfruit.getvalue(); } Although, I don't know if it will allocate it during runtime as well. -- /Jacob Carlborg
May 15 2014
On Fri, 16 May 2014 02:31:18 -0400, Jacob Carlborg <doob me.com> wrote:On 16/05/14 06:59, Taylor Hillegeist wrote:It will not. -SteveThe subject says it all really. i have this example: import core.memory; class fruit{ int value=5; public int getvalue(){ return value; } } int main(string[] args) { GC.disable; static fruit myfruit; return myfruit.getvalue(); } Most of the smart people will see that i want the program to return 5 but I did something dumb and didn't put in the "new" statement? So my question is in longer words "Can I create instances of objects at compile time?" and if not "why not, i could build something (roughly)equivalent out of structs and functions and have it at compile time?"If you create an immutable instance it's possible to create it at compile time: int main(string[] args) { GC.disable; immutable fruit myfruit = new immutable(fruit); pragma(msg, myfruit.getvalue); // will print 5 at compile time return myfruit.getvalue(); } Although, I don't know if it will allocate it during runtime as well.
May 16 2014
On Friday, 16 May 2014 at 14:13:28 UTC, Steven Schveighoffer wrote:On Fri, 16 May 2014 02:31:18 -0400, Jacob Carlborg <doob me.com> wrote:Does this work in GDC?On 16/05/14 06:59, Taylor Hillegeist wrote:It will not. -SteveThe subject says it all really. i have this example: import core.memory; class fruit{ int value=5; public int getvalue(){ return value; } } int main(string[] args) { GC.disable; static fruit myfruit; return myfruit.getvalue(); } Most of the smart people will see that i want the program to return 5 but I did something dumb and didn't put in the "new" statement? So my question is in longer words "Can I create instances of objects at compile time?" and if not "why not, i could build something (roughly)equivalent out of structs and functions and have it at compile time?"If you create an immutable instance it's possible to create it at compile time: int main(string[] args) { GC.disable; immutable fruit myfruit = new immutable(fruit); pragma(msg, myfruit.getvalue); // will print 5 at compile time return myfruit.getvalue(); } Although, I don't know if it will allocate it during runtime as well.
May 16 2014
On Friday, 16 May 2014 at 22:48:08 UTC, Taylor Hillegeist wrote:Can't test in GDC, but it does work in LDC, and I see no reason why it shouldn't, because this functionality is implemented in the frontend, which DMD, GDC and LDC share.Does this work in GDC?Although, I don't know if it will allocate it during runtime as well.It will not. -Steve
May 17 2014
On Saturday, 17 May 2014 at 13:21:29 UTC, Marc Schütz wrote:On Friday, 16 May 2014 at 22:48:08 UTC, Taylor Hillegeist wrote:I've been trying to get a baremetal GDC working for the ARM cortex-M, I guess it isn't quite ready yet. I'm looking forward to DConf 2014 to seeing, "Tiny, Ubiquitous Machines Powered by D" by Michael V. Franklin. To see how his work on the cortex-M is going. I mostly work on safety critical applications DO-170C,(Nothing with D) but this language looks like it might have a great deal of potential in this area. Not that C isn't good, but there are things that make the code look cleaner. I was looking at the Interactive D compiler and how it associated the assembly code with the lines of D code, I guess you can do that through the link file(-S in gcc). But D has code coverage information, unit test that you don't have to remove from the production code. there is a great deal of good stuff there. more and more tools for various operation seem to pop up every day. good stuff.Can't test in GDC, but it does work in LDC, and I see no reason why it shouldn't, because this functionality is implemented in the frontend, which DMD, GDC and LDC share.Does this work in GDC?Although, I don't know if it will allocate it during runtime as well.It will not. -Steve
May 19 2014
On 16/05/2014 4:59 p.m., Taylor Hillegeist wrote:The subject says it all really. i have this example: import core.memory; class fruit{ int value=5; public int getvalue(){ return value; } } int main(string[] args) { GC.disable; static fruit myfruit; return myfruit.getvalue(); } Most of the smart people will see that i want the program to return 5 but I did something dumb and didn't put in the "new" statement? So my question is in longer words "Can I create instances of objects at compile time?" and if not "why not, i could build something (roughly)equivalent out of structs and functions and have it at compile time?"Rules about CTFE, I have: 1. It must be valid D code 2. Source code must be available during compilation 3. If its not passed to a function, its not available 4. You don't care about performance 5. Templates are your friend I prefer to add pure to any function I intend to be CTFE'd. So yes you can use new for classes at CTFE, just don't expect it to be collected and finalized.
May 15 2014