Bug 5109 – some advise

Status
RESOLVED
Resolution
FIXED
Severity
enhancement
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
Other
OS
All
Creation time
2010-10-23T18:55:00Z
Last change time
2014-01-09T08:17:23Z
Assigned to
nobody
Creator
galaxylang

Comments

Comment #0 by galaxylang — 2010-10-23T18:55:56Z
I am from china and poor of english,i am sorry you may can't understand what i am meaning. Recently,i am study a lite about haskell,so i think now D's template is some like a functional program evolution form c++. because i find some restrict,i think it's still in a low-level for we still think it in a c++ way.Should we drop more from c++, then go into a high-level template program? now i want to point out what i found which is can't tolerance and some i think should be work out. 1: this code don't work because the name query somelike not a bidirection way,[alias ReturnType!(T) Out],can't resolve the opCall class monad(alias T) { alias ReturnType!(T) Out;//***** } class maybe(T):monad!(maybe!T) { auto opCall(maybe!T) { alias maybe!long R; return R.init; } } there is another sample: struct B(T) { } alias B!(C) BC;//identifier 'C' is not defined! alias B!int C; 2: add parital template feature struct P(A...) { } alias P!int P1; P1 p1;//instance of P!int alias P1!long P2; P2 p2;//intance of P!(int,long) this feature will make D has the power to write a template functional library,and change D into a high-levle program language.
Comment #1 by bearophile_hugs — 2010-10-25T15:51:38Z
(In reply to comment #0) > I am from china and poor of english,i am sorry you may can't > understand what i am meaning. I think we are able to understand what you mean. > this code don't work because the name query somelike not a bidirection > way,[alias ReturnType!(T) Out],can't resolve the opCall > > class monad(alias T) > { > alias ReturnType!(T) Out;//***** > > } > > class maybe(T):monad!(maybe!T) > { > auto opCall(maybe!T) > { > alias maybe!long R; > return R.init; > } > } This seems a valid bug report or enhancement request. > there is another sample: > struct B(T) > { > } > alias B!(C) BC;//identifier 'C' is not defined! > alias B!int C; This is a bug report, and I think it's already present somewhere in Bugzilla. In future I suggest you to put just one bug report (or enhancement request) for each Bugzilla entry. > 2: > add parital template feature > struct P(A...) > { > } > alias P!int P1; > P1 p1;//instance of P!int > alias P1!long P2; > P2 p2;//intance of P!(int,long) > > this feature will make D has the power to write a template functional > library,and change D into a high-levle program language. This is another different enhancement request. I have never seen it before. It looks cute. Are you able to show one or more possible usages of it? I will soon link this bug report in the main D newsgroup.
Comment #2 by galaxylang — 2010-11-04T22:13:55Z
I have not on net for a long time,because i have not a network at home, (network is still very expensive in our country in our country :) and i am now prepare for some examine.so i submit a new issue to attract your notice,and some new i advise. http://d.puremagic.com/issues/show_bug.cgi?id=5067
Comment #3 by christoph — 2014-01-09T03:31:58Z
D is actually able to do something like partial templates. Here is an example that works: struct P(A...) { alias Args = A; } alias P!int P1; P1 p1; // P!int alias P!(P1.Args,long) P2; P2 p2; // P!(int, long) void main() { writeln(typeid(P2)); // Output: main.P!(int, long).P }