View mode: basic / threaded / horizontal-split · Log in · Help
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?
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?
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?
在 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?
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?
在 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?
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?
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?
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?
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?
« First   ‹ Prev
1 2
Top | Discussion index | About this forum | D home