November 02, 2006 Re: DMD 0.173 release | ||||
---|---|---|---|---|
| ||||
Posted in reply to Walter Bright | Walter Bright wrote: > Major new stuff! But please, let's discuss that over in the digitalmars.D group. > > http://www.digitalmars.com/d/changelog.html > > http://ftp.digitalmars.com/dmd.173.zip The reference links to "A Deeper Look at Signals and Slots" and "Boost Signals" appear to be broken. -- ~John Demme me@teqdruid.com http://www.teqdruid.com/ |
November 02, 2006 Re: DMD 0.173 release | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Demme | John Demme wrote:
> The reference links to "A Deeper Look at Signals and Slots" and "Boost
> Signals" appear to be broken.
Fixed.
|
November 02, 2006 Re: DMD 0.173 release | ||||
---|---|---|---|---|
| ||||
Posted in reply to Walter Bright | "Walter Bright" <newshound@digitalmars.com> wrote in message news:eicbn3$2qba$1@digitaldaemon.com... > Major new stuff! But please, let's discuss that over in the digitalmars.D group. > > http://www.digitalmars.com/d/changelog.html > > http://ftp.digitalmars.com/dmd.173.zip Un. Be. Liev. A. Ble. Not only are variadic templates _amazing_ things, they're also _exactly_ what I'll need to do the MiniD binding library (and Kirk is understandably happy as well!). |
November 02, 2006 Re: DMD 0.173 release | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jarrett Billingsley | "Jarrett Billingsley" <kb3ctd2@yahoo.com> wrote in message news:eidi8o$11o4$2@digitaldaemon.com... > Un. Be. Liev. A. Ble. > > Not only are variadic templates _amazing_ things, they're also _exactly_ what I'll need to do the MiniD binding library (and Kirk is understandably happy as well!). Waaahaha! This is so cool. A variadic "call" function for MiniD which used to look like: public void easyCall(MDClosure func, uint numReturns, ...) { uint funcReg = push(func); for(int i = 0; i < _arguments.length; i++) { TypeInfo ti = _arguments[i]; if(ti == typeid(bool)) push(cast(bool)va_arg!(bool)(_argptr)); else if(ti == typeid(byte)) push(cast(int)va_arg!(byte)(_argptr)); else if(ti == typeid(ubyte)) push(cast(int)va_arg!(ubyte)(_argptr)); else if(ti == typeid(short)) push(cast(int)va_arg!(ushort)(_argptr)); else if(ti == typeid(ushort)) push(cast(int)va_arg!(ushort)(_argptr)); else if(ti == typeid(int)) push(cast(int)va_arg!(int)(_argptr)); else if(ti == typeid(uint)) push(cast(int)va_arg!(uint)(_argptr)); else if(ti == typeid(long)) push(cast(int)va_arg!(long)(_argptr)); else if(ti == typeid(ulong)) push(cast(int)va_arg!(ulong)(_argptr)); else if(ti == typeid(float)) push(cast(float)va_arg!(float)(_argptr)); else if(ti == typeid(double)) push(cast(float)va_arg!(double)(_argptr)); else if(ti == typeid(real)) push(cast(float)va_arg!(real)(_argptr)); else if(ti == typeid(char[])) push(new MDString(va_arg!(char[])(_argptr))); else if(ti == typeid(wchar[])) push(new MDString(va_arg!(wchar[])(_argptr))); else if(ti == typeid(dchar[])) push(new MDString(va_arg!(dchar[])(_argptr))); else if(ti == typeid(MDObject)) push(cast(MDObject)va_arg!(MDObject)(_argptr)); else if(ti == typeid(MDUserdata)) push(cast(MDUserdata)va_arg!(MDUserdata)(_argptr)); else if(ti == typeid(MDClosure)) push(cast(MDClosure)va_arg!(MDClosure)(_argptr)); else if(ti == typeid(MDTable)) push(cast(MDTable)va_arg!(MDTable)(_argptr)); else if(ti == typeid(MDArray)) push(cast(MDArray)va_arg!(MDArray)(_argptr)); else throw new MDRuntimeException(this, "MDState.easyCall(): invalid parameter ", i); } call(funcReg, _arguments.length, numReturns); } Has now become: public void easyCall(T...)(MDClosure func, uint numReturns, T params) { uint funcReg = push(func); foreach(param; params) push(param); call(funcReg, params.length, numReturns); } Not only is it magnitudes easier to read, it's also far more efficient. Amazing, amazing, amazing. Thank you so much, again and again. |
November 02, 2006 Re: DMD 0.173 release | ||||
---|---|---|---|---|
| ||||
Posted in reply to Walter Bright | Walter Bright wrote:
> Major new stuff! But please, let's discuss that over in the digitalmars.D group.
>
> http://www.digitalmars.com/d/changelog.html
>
> http://ftp.digitalmars.com/dmd.173.zip
Excellent! I would love to check out the Signal and Slot implementation. Too bad I am tied up in other projects using other languages.
Bastiaan.
|
November 02, 2006 Re: DMD 0.173 release | ||||
---|---|---|---|---|
| ||||
Posted in reply to Bastiaan Veelo | Bastiaan Veelo wrote:
> Too bad I am tied up in other projects using other languages.
Resistance is futile.
|
November 03, 2006 Re: DMD 0.173 release | ||||
---|---|---|---|---|
| ||||
Posted in reply to Walter Bright | Walter Bright wrote:
> Major new stuff! But please, let's discuss that over in the digitalmars.D group.
>
> http://www.digitalmars.com/d/changelog.html
>
> http://ftp.digitalmars.com/dmd.173.zip
Variadic templates, and tuples... badass.
|
November 03, 2006 Re: DMD 0.173 release | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jarrett Billingsley | Jarrett Billingsley wrote:
> "Jarrett Billingsley" <kb3ctd2@yahoo.com> wrote in message news:eidi8o$11o4$2@digitaldaemon.com...
>
>>Un. Be. Liev. A. Ble.
>>
>>Not only are variadic templates _amazing_ things, they're also _exactly_ what I'll need to do the MiniD binding library (and Kirk is understandably happy as well!).
>
>
> Waaahaha! This is so cool. A variadic "call" function for MiniD which used to look like:
>
> public void easyCall(MDClosure func, uint numReturns, ...)
> {
> uint funcReg = push(func);
>
> for(int i = 0; i < _arguments.length; i++)
> {
> TypeInfo ti = _arguments[i];
>
> if(ti == typeid(bool)) push(cast(bool)va_arg!(bool)(_argptr));
> else if(ti == typeid(byte)) push(cast(int)va_arg!(byte)(_argptr));
> else if(ti == typeid(ubyte)) push(cast(int)va_arg!(ubyte)(_argptr));
> else if(ti == typeid(short)) push(cast(int)va_arg!(ushort)(_argptr));
> else if(ti == typeid(ushort)) push(cast(int)va_arg!(ushort)(_argptr));
> else if(ti == typeid(int)) push(cast(int)va_arg!(int)(_argptr));
> else if(ti == typeid(uint)) push(cast(int)va_arg!(uint)(_argptr));
> else if(ti == typeid(long)) push(cast(int)va_arg!(long)(_argptr));
> else if(ti == typeid(ulong)) push(cast(int)va_arg!(ulong)(_argptr));
> else if(ti == typeid(float)) push(cast(float)va_arg!(float)(_argptr));
> else if(ti == typeid(double)) push(cast(float)va_arg!(double)(_argptr));
> else if(ti == typeid(real)) push(cast(float)va_arg!(real)(_argptr));
> else if(ti == typeid(char[])) push(new MDString(va_arg!(char[])(_argptr)));
> else if(ti == typeid(wchar[])) push(new MDString(va_arg!(wchar[])(_argptr)));
> else if(ti == typeid(dchar[])) push(new MDString(va_arg!(dchar[])(_argptr)));
> else if(ti == typeid(MDObject)) push(cast(MDObject)va_arg!(MDObject)(_argptr));
> else if(ti == typeid(MDUserdata)) push(cast(MDUserdata)va_arg!(MDUserdata)(_argptr));
> else if(ti == typeid(MDClosure)) push(cast(MDClosure)va_arg!(MDClosure)(_argptr));
> else if(ti == typeid(MDTable)) push(cast(MDTable)va_arg!(MDTable)(_argptr));
> else if(ti == typeid(MDArray)) push(cast(MDArray)va_arg!(MDArray)(_argptr));
> else throw new MDRuntimeException(this, "MDState.easyCall(): invalid parameter ", i);
> }
>
> call(funcReg, _arguments.length, numReturns);
> }
>
> Has now become:
>
> public void easyCall(T...)(MDClosure func, uint numReturns, T params)
> {
> uint funcReg = push(func);
>
> foreach(param; params)
> push(param);
>
> call(funcReg, params.length, numReturns);
> }
>
> Not only is it magnitudes easier to read, it's also far more efficient.
>
> Amazing, amazing, amazing. Thank you so much, again and again.
>
>
That has to be about as significant an example as one could ask for. Also, the new code makes it much more future-compatable, as it can be made ready for new datatypes without ever editing easyCall itself! (So long as push() supports the type, you're good to go.)
-- Chris Nicholson-Sauls
|
November 03, 2006 Re: DMD 0.173 release [Name mangling] | ||||
---|---|---|---|---|
| ||||
Posted in reply to Walter Bright | Walter Bright wrote: > Major new stuff! But please, let's discuss that over in the digitalmars.D group. > > http://www.digitalmars.com/d/changelog.html One of the 'minor things' is also "Template instantiations can now accept alias parameters for local variables and nested functions." which is of great interest to me, since now meta.prettynameof!() can work with local variables; this will be significant for DDL and probably things like PyD as well. But, the name mangling is really weird. It's totally different to the name mangling for static variables, for example. Maybe this is intentional, and needs to be that way; but it's a bit tricky to parse, so I'd like confirmation that it's not a mistake. Below is an example, taken from my meta.nameof file. ----------- template inner(alias F) { class inner { } } template outer(alias B) { void function( inner!(B) ) outer; } template rawmanglednameof(alias A) { const char [] rawmanglednameof = typeof(&outer!(A)).mangleof; } void wolf() { static int proto; int quark; static assert(rawmanglednameof!(proto)== "PPFC" ~ "4meta6nameof42__T5inner" ~ "S29_D4meta6nameof4wolfFZv" ~ "5protoi" ~ "Z5innerZv"); static assert(rawmanglednameof!(quark)== "PPFC" ~ "_D4meta6nameof4wolfFZv54__T16rawmanglednameof" ~ "S29_D4meta6nameof4wolfFZv5quarkiZ42__T5outer" ~ "S29_D4meta6nameof4wolfFZv5quarkiZ42__T5inner" ~ "S29_D4meta6nameof4wolfFZv" ~ "5quarki" ~ "Z5innerZv"); /* Why isn't it just: "PPFC" ~ "4meta6nameof42__T5inner" ~ "S29_D4meta6nameof4wolfFZv" ~ "5quarki" ~ "Z5innerZv" ? */ } |
November 03, 2006 Re: DMD 0.173 release [Name mangling] | ||||
---|---|---|---|---|
| ||||
Posted in reply to Don Clugston | Don Clugston wrote:
> "Template instantiations can now accept alias parameters for local variables and nested functions."
>
> which is of great interest to me, since now meta.prettynameof!() can work with local variables; this will be significant for DDL and probably things like PyD as well.
> But, the name mangling is really weird. It's totally different to the name mangling for static variables, for example.
What happens is when one of the parameters is an alias to a local, the template becomes a *nested* class/function, and is mangled like one.
|
Copyright © 1999-2021 by the D Language Foundation