Jump to page: 1 2
Thread overview
Module name compile time constant?
Apr 15, 2008
davidl
Apr 15, 2008
Walter Bright
Apr 15, 2008
Bill Baxter
Apr 15, 2008
davidl
Apr 15, 2008
Janice Caron
Apr 15, 2008
davidl
Apr 15, 2008
Spacen Jasset
Apr 15, 2008
Simen Kjaeraas
Apr 15, 2008
Bill Baxter
Apr 16, 2008
Yigal Chripun
Apr 16, 2008
Bill Baxter
Apr 16, 2008
Yigal Chripun
Apr 25, 2008
Bruno Medeiros
Apr 26, 2008
Don
Apr 27, 2008
Bill Baxter
Apr 28, 2008
Don
Apr 28, 2008
Bill Baxter
April 15, 2008
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
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
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
在 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
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
在 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
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
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
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
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