Thread overview | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
April 15, 2008 Module name compile time constant? | ||||
---|---|---|---|---|
| ||||
module abc.super.long.pack.awesome.mod; what if i need the string of "abc.super.long.pack.awesome.mod" generally and don't want to copy paste differently in all my modules? -- 使用 Opera 革命性的电子邮件客户程序: http://www.opera.com/mail/ |
April 15, 2008 Re: Module name compile time constant? | ||||
---|---|---|---|---|
| ||||
Posted in reply to davidl | davidl wrote: > > module abc.super.long.pack.awesome.mod; > > what if i need the string of "abc.super.long.pack.awesome.mod" generally and don't want to copy paste differently in all my modules? alias abc.super.long.pack.awesome.mod foo; |
April 15, 2008 Re: Module name compile time constant? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Walter Bright | Walter Bright wrote: > davidl wrote: >> >> module abc.super.long.pack.awesome.mod; >> >> what if i need the string of "abc.super.long.pack.awesome.mod" generally and don't want to copy paste differently in all my modules? > > alias abc.super.long.pack.awesome.mod foo; I think he wants that full module name as a char[], though. Is that what you want, Davidl? Or do you just want to be able to say import short.awesome; // aka "import abc.super.long.pack.awesome.mod" If that's what you want you can create a module in short/awesome.d that contains just: module short.awesome; public import abc.super.long.pack.awesome.mod; But somehow I'm thinking you actually want to automatically get that module name as a string. How about going the other way around? Start with a string? string foo = "abc.super.long.pack.awesome.mod"; mixin(import_module(foo)); where import_module is string import_module(string name) { return "import " ~ name ";" ; } If those don't answer your question you're gonna have to be more specific. --bb |
April 15, 2008 Re: Module name compile time constant? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Bill Baxter | 在 Tue, 15 Apr 2008 13:00:57 +0800,Bill Baxter <dnewsgroup@billbaxter.com> 写道: > Walter Bright wrote: >> davidl wrote: >>> >>> module abc.super.long.pack.awesome.mod; >>> >>> what if i need the string of "abc.super.long.pack.awesome.mod" generally and don't want to copy paste differently in all my modules? >> alias abc.super.long.pack.awesome.mod foo; > > I think he wants that full module name as a char[], though. > > Is that what you want, Davidl? > > Or do you just want to be able to say > > > import short.awesome; // aka "import abc.super.long.pack.awesome.mod" > > If that's what you want you can create a module in short/awesome.d that contains just: > > module short.awesome; > public import abc.super.long.pack.awesome.mod; > > But somehow I'm thinking you actually want to automatically get that module name as a string. > > How about going the other way around? Start with a string? > > string foo = "abc.super.long.pack.awesome.mod"; > mixin(import_module(foo)); > > where import_module is > > string import_module(string name) { > return "import " ~ name ";" ; > } > > If those don't answer your question you're gonna have to be more specific. > > > --bb Yes, i want the string. But I don't want to modify the module part to manually defined strings I want some magic of module.name to get the current module name in compile time string form. -- 使用 Opera 革命性的电子邮件客户程序: http://www.opera.com/mail/ |
April 15, 2008 Re: Module name compile time constant? | ||||
---|---|---|---|---|
| ||||
Posted in reply to davidl | On 15/04/2008, davidl <davidl@126.com> wrote: > I want some magic of module.name to get the current module name in compile > time string form. Yeah, basically you want to add __MODULE__ to the list of "special tokens" in http://digitalmars.com/d/2.0/lex.html I think it would be easy for Walter to add, and I don't think it's particularly controversial, so why not just go ahead and add an enhancement request to Bugzilla. |
April 15, 2008 Re: Module name compile time constant? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Janice Caron | 在 Tue, 15 Apr 2008 15:12:13 +0800,Janice Caron <caron800@googlemail.com> 写道: > On 15/04/2008, davidl <davidl@126.com> wrote: >> I want some magic of module.name to get the current module name in compile >> time string form. > > Yeah, basically you want to add __MODULE__ to the list of "special tokens" in > http://digitalmars.com/d/2.0/lex.html > > I think it would be easy for Walter to add, and I don't think it's > particularly controversial, so why not just go ahead and add an > enhancement request to Bugzilla. I'm looking for a cleaner solution. __SPEC_TOKEN__ for me looks like a hack. and it's not so well defined if my app doesn't have a module declaration section? should the compiler stop the compilation? -- 使用 Opera 革命性的电子邮件客户程序: http://www.opera.com/mail/ |
April 15, 2008 Re: Module name compile time constant? | ||||
---|---|---|---|---|
| ||||
Posted in reply to davidl | davidl wrote:
> 在 Tue, 15 Apr 2008 15:12:13 +0800,Janice Caron <caron800@googlemail.com> 写道:
>
>> On 15/04/2008, davidl <davidl@126.com> wrote:
>>> I want some magic of module.name to get the current module name in compile
>>> time string form.
>>
>> Yeah, basically you want to add __MODULE__ to the list of "special tokens" in
>> http://digitalmars.com/d/2.0/lex.html
>>
>> I think it would be easy for Walter to add, and I don't think it's
>> particularly controversial, so why not just go ahead and add an
>> enhancement request to Bugzilla.
>
> I'm looking for a cleaner solution.
> __SPEC_TOKEN__ for me looks like a hack.
>
> and it's not so well defined if my app doesn't have a module declaration section?
> should the compiler stop the compilation?
>
>
__MODULE__ seems reasonable to me. It's in line with __FILE__ and __LINE__ and __FUNC__ (which seems absent, from dmd 1 anyway)
If you have no module definition, then presumably it could be "" or whatever module the compiler considers it is when that happens according to the current rules.
They look a bit like C preprocessor type macros, but really they aren't so much, at any rate there is none of the problems you get with C style macros and so they don't seem like a hack to me.
What alternative did you have in mind?
|
April 15, 2008 Re: Module name compile time constant? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Spacen Jasset | On Tue, 15 Apr 2008 17:56:32 +0200, Spacen Jasset <spacenjasset@yahoo.co.uk> wrote:
> davidl wrote:
>> 在 Tue, 15 Apr 2008 15:12:13 +0800,Janice Caron <caron800@googlemail.com> 写道:
>>
>>> On 15/04/2008, davidl <davidl@126.com> wrote:
>>>> I want some magic of module.name to get the current module name in compile
>>>> time string form.
>>>
>>> Yeah, basically you want to add __MODULE__ to the list of "special tokens" in
>>> http://digitalmars.com/d/2.0/lex.html
>>>
>>> I think it would be easy for Walter to add, and I don't think it's
>>> particularly controversial, so why not just go ahead and add an
>>> enhancement request to Bugzilla.
>> I'm looking for a cleaner solution.
>> __SPEC_TOKEN__ for me looks like a hack.
>> and it's not so well defined if my app doesn't have a module declaration section?
>> should the compiler stop the compilation?
>>
> __MODULE__ seems reasonable to me. It's in line with __FILE__ and __LINE__ and __FUNC__ (which seems absent, from dmd 1 anyway)
>
> If you have no module definition, then presumably it could be "" or whatever module the compiler considers it is when that happens according to the current rules.
>
> They look a bit like C preprocessor type macros, but really they aren't so much, at any rate there is none of the problems you get with C style macros and so they don't seem like a hack to me.
>
> What alternative did you have in mind?
One could argue that a more D-style way to do it would be along the lines
of preprocessor.line, preprocessor.file, and so on. It looks less like a
hack and more like a real part of the language. One could possibly add
other things to this preprocessor object as well, for instance a list of
version statements, and I'm sure there are other ideas floating around.
-- Simen
|
April 15, 2008 Re: Module name compile time constant? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Simen Kjaeraas | Simen Kjaeraas wrote:
> On Tue, 15 Apr 2008 17:56:32 +0200, Spacen Jasset <spacenjasset@yahoo.co.uk> wrote:
>
>> davidl wrote:
>>> 在 Tue, 15 Apr 2008 15:12:13 +0800,Janice Caron <caron800@googlemail.com> 写道:
>>>
>>>> On 15/04/2008, davidl <davidl@126.com> wrote:
>>>>> I want some magic of module.name to get the current module name in compile
>>>>> time string form.
>>>>
>>>> Yeah, basically you want to add __MODULE__ to the list of "special tokens" in
>>>> http://digitalmars.com/d/2.0/lex.html
>>>>
>>>> I think it would be easy for Walter to add, and I don't think it's
>>>> particularly controversial, so why not just go ahead and add an
>>>> enhancement request to Bugzilla.
>>> I'm looking for a cleaner solution.
>>> __SPEC_TOKEN__ for me looks like a hack.
>>> and it's not so well defined if my app doesn't have a module declaration section?
>>> should the compiler stop the compilation?
>>>
>> __MODULE__ seems reasonable to me. It's in line with __FILE__ and __LINE__ and __FUNC__ (which seems absent, from dmd 1 anyway)
>>
>> If you have no module definition, then presumably it could be "" or whatever module the compiler considers it is when that happens according to the current rules.
>>
>> They look a bit like C preprocessor type macros, but really they aren't so much, at any rate there is none of the problems you get with C style macros and so they don't seem like a hack to me.
>>
>> What alternative did you have in mind?
>
>
> One could argue that a more D-style way to do it would be along the lines
> of preprocessor.line, preprocessor.file, and so on. It looks less like a
> hack and more like a real part of the language. One could possibly add
> other things to this preprocessor object as well, for instance a list of
> version statements, and I'm sure there are other ideas floating around.
+1
Good point! Maybe it should still have a preprocessor macro feel though, with underscores, like
__ID(line) or __ID__(file), etc. (akin to __traits(...))
I guess pretending it's an object and using . access would be ok too.
__ID.line or __ID__.file, etc.
--bb
|
April 16, 2008 Re: Module name compile time constant? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Bill Baxter | Bill Baxter wrote:
> Simen Kjaeraas wrote:
>> On Tue, 15 Apr 2008 17:56:32 +0200, Spacen Jasset <spacenjasset@yahoo.co.uk> wrote:
>>
>>> davidl wrote:
>>>> 在 Tue, 15 Apr 2008 15:12:13 +0800,Janice Caron <caron800@googlemail.com> 写道:
>>>>
>>>>> On 15/04/2008, davidl <davidl@126.com> wrote:
>>>>>> I want some magic of module.name to get the current module name
>>>>>> in compile
>>>>>> time string form.
>>>>>
>>>>> Yeah, basically you want to add __MODULE__ to the list of "special
>>>>> tokens" in
>>>>> http://digitalmars.com/d/2.0/lex.html
>>>>>
>>>>> I think it would be easy for Walter to add, and I don't think it's particularly controversial, so why not just go ahead and add an enhancement request to Bugzilla.
>>>> I'm looking for a cleaner solution.
>>>> __SPEC_TOKEN__ for me looks like a hack.
>>>> and it's not so well defined if my app doesn't have a module
>>>> declaration section?
>>>> should the compiler stop the compilation?
>>>>
>>> __MODULE__ seems reasonable to me. It's in line with __FILE__ and __LINE__ and __FUNC__ (which seems absent, from dmd 1 anyway)
>>>
>>> If you have no module definition, then presumably it could be "" or whatever module the compiler considers it is when that happens according to the current rules.
>>>
>>> They look a bit like C preprocessor type macros, but really they aren't so much, at any rate there is none of the problems you get with C style macros and so they don't seem like a hack to me.
>>>
>>> What alternative did you have in mind?
>>
>>
>> One could argue that a more D-style way to do it would be along the
>> lines
>> of preprocessor.line, preprocessor.file, and so on. It looks less like a
>> hack and more like a real part of the language. One could possibly add
>> other things to this preprocessor object as well, for instance a list of
>> version statements, and I'm sure there are other ideas floating around.
>
> +1
>
> Good point! Maybe it should still have a preprocessor macro feel though, with underscores, like
>
> __ID(line) or __ID__(file), etc. (akin to __traits(...))
>
> I guess pretending it's an object and using . access would be ok too.
>
> __ID.line or __ID__.file, etc.
>
>
>
> --bb
+2 for the idea, -infinity for the name. D does not have a preprocessor. IMO, the best way to implement it is to have a defined API for the compiler and use a Compiler object (just like you have a GC object) insead of adding various symbols to the language. This way, you can remove __traits(...) as well as all those __Line__, __File__, etc from the language as they would become regular methods.
--Yigal
PS - Isn't there something like a stringof property for symbols that returns a string representation?
|
Copyright © 1999-2021 by the D Language Foundation