digitalmars.D.bugs - [Issue 1541] New: std.bind is broken?
- d-bugmail puremagic.com (27/28) Sep 29 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1541
- d-bugmail puremagic.com (63/65) Oct 03 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1541
- d-bugmail puremagic.com (83/83) Oct 04 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1541
- d-bugmail puremagic.com (6/6) Oct 17 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1541
- d-bugmail puremagic.com (5/5) Dec 09 2008 http://d.puremagic.com/issues/show_bug.cgi?id=1541
- d-bugmail puremagic.com (105/105) Dec 18 2008 http://d.puremagic.com/issues/show_bug.cgi?id=1541
- d-bugmail puremagic.com (9/9) Jan 22 2009 http://d.puremagic.com/issues/show_bug.cgi?id=1541
- d-bugmail puremagic.com (7/7) Jan 22 2009 http://d.puremagic.com/issues/show_bug.cgi?id=1541
- d-bugmail puremagic.com (12/12) Jan 08 2011 http://d.puremagic.com/issues/show_bug.cgi?id=1541
- d-bugmail puremagic.com (8/9) Jan 08 2011 http://d.puremagic.com/issues/show_bug.cgi?id=1541
http://d.puremagic.com/issues/show_bug.cgi?id=1541 Summary: std.bind is broken? Product: D Version: 2.004 Platform: PC OS/Version: Windows Status: NEW Severity: normal Priority: P2 Component: Phobos AssignedTo: bugzilla digitalmars.com ReportedBy: rayerd.wiz gmail.com import std.bind, std.stdio; bool less(int a, int b) { return a < b; } void main() { writefln("10 < 20 =? ", less(10, 20)); auto less10 = bind(&less, _0, 10); writefln(" 5 < 10 =? ", less10(5)); }dmd a.dC:\D\dmd\bin\..\src\phobos\std\bind.d(839): declaration _D3std4bind9EmptySlot6__ initZ forward declaration -- Thank you for your works! --
Sep 29 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1541 Hi. I propose to apply a patch to "dmd\src\phobos\std\bind.d" file for this problem. --- bind.d Wed Oct 03 20:39:18 2007 +++ ~bind.d Wed Oct 03 20:38:20 2007 -263,7 +263,7 } - string toString() { + char[] toString() { return "()"; } } -657,7 +657,7 bind(&foo, tuple(23, 45)) --- */ -typeof(new BoundFunc!(FT, EmptySlot, Tuple!(ArgList))) bind(FT, ArgList...)(FT fp, ArgList args) { +typeof(new BoundFunc!(FT, NullAlias, Tuple!(ArgList))) bind(FT, ArgList...)(FT fp, ArgList args) { auto res = new DerefFunc!(ReturnType!(bind)); res.fp = fp; extractBoundArgs!(0, 0, ArgList)(res.boundArgs, args); ========= main.d for experimental code import std.stdio, std.bind; void main() { writefln("-less"); bool less(int a, int b){return a<b;} auto less5 = bind(&less, _0, 5); foreach (i; 0..7) { writefln(i, "<5 ", less5(i)); } writefln("-greater"); auto greater = bind(&less, _1, _0); auto greater3 = bind(greater.ptr, _0, 3); foreach (i; 0..7) { writefln(i, ">3 ", greater3(i)); } } =============dmd mainC:\D\dmd\bin\..\..\dm\bin\link.exe main,,,user32+kernel32/noi;main-less 0<5 true 1<5 true 2<5 true 3<5 true 4<5 true 5<5 false 6<5 false -greater 0>3 false 1>3 false 2>3 false 3>3 false 4>3 true 5>3 true 6>3 true --
Oct 03 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1541 Created an attachment (id=188) --> (http://d.puremagic.com/issues/attachment.cgi?id=188&action=view) For std.bind in dmd2.004 Hi. I am Haruki Shigemori. Because I fixed std.bind for dmd2.004, please apply this patch to bind.d! ========================================= I:\D\projects\bind>type main.d import std.stdio, std.bind; void main() { writefln("-less (bind)"); bool less(int a, int b){return a<b;} auto less5 = bind(&less, _0, 5); foreach (i; 0..7) { writefln(i, "<5 ", less5(i)); } writefln("-greater (bind)"); auto greater = bind(&less, _1, _0); auto greater3 = bind(greater.ptr, _0, 3); foreach (i; 0..7) { writefln(i, ">3 ", greater3(i)); } writefln("-less (bindAlias)"); auto less2 = bindAlias!(less)(_0, 2); foreach (i; 0..7) { writefln(i, "<2 ", less2(i)); } writefln("-greater (bindAlias)"); auto greater4 = bindAlias!(greater)(_0, 4); foreach (i; 0..7) { writefln(i, ">4 ", greater4(i)); } writefln("-function composition"); int foo(int i) {return i*2;} int bar(int i) {return i*3;} auto fooBar = bind(&foo, bind(&bar, _0)); writefln(fooBar(5)); } I:\D\projects\bind>dmd main C:\D\dmd\bin\..\..\dm\bin\link.exe main,,,user32+kernel32/noi; I:\D\projects\bind>main -less (bind) 0<5 true 1<5 true 2<5 true 3<5 true 4<5 true 5<5 false 6<5 false -greater (bind) 0>3 false 1>3 false 2>3 false 3>3 false 4>3 true 5>3 true 6>3 true -less (bindAlias) 0<2 true 1<2 true 2<2 false 3<2 false 4<2 false 5<2 false 6<2 false -greater (bindAlias) 0>4 false 1>4 false 2>4 false 3>4 false 4>4 false 5>4 true 6>4 true -function composition 30 --
Oct 04 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1541 Created an attachment (id=195) --> (http://d.puremagic.com/issues/attachment.cgi?id=195&action=view) Fixed std.bind for dmd2.006 --
Oct 17 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1541 When I apply the patches then try compiling the example code, I get: std\bind.d(991): Error: EmptySlot is not an lvalue --
Dec 09 2008
http://d.puremagic.com/issues/show_bug.cgi?id=1541 rayerd.wiz gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- obsolete| | obsolete| | Created an attachment (id=283) --> (http://d.puremagic.com/issues/attachment.cgi?id=283&action=view) Fixed std.bind for dmd2.022 within limitations import std.stdio, std.bind; void main() { writefln("(bind(&less, _0, 5))"); bool less(int a, int b){return a<b;} auto less5 = bind(&less, _0, 5); for (int i=0; i<7; ++i) { writefln(i, "<5 ", less5(i)); } writefln("(bind(&less, 5, _0))"); auto not_less5 = bind(&less, 5, _0); for (int i=0; i<7; ++i) { writefln(i, ">=6 ", not_less5(i)); } writefln("(bind(&less, 3, 5))"); auto less_3_5 = bind(&less, 3, 5); writefln("3<5 ", less_3_5()); writefln("(bind(&less, 5, 3))"); auto less_5_3 = bind(&less, 5, 3); writefln("5<3 ", less_5_3()); writefln("(bind(bind(&less, _1, _0).ptr, _0, 3)"); auto greater = bind(&less, _1, _0); auto greater3 = bind(greater.ptr, _0, 3); for (int i=0; i<7; ++i) { writefln(i, ">3 ", greater3(i)); } writefln("(bindAlias!(less)(_0, 2))"); auto less2 = bindAlias!(less)(_0, 2); for (int i=0; i<7; ++i) { writefln(i, "<2 ", less2(i)); } writefln("(bind(&foo, bind(&bar, _0)))"); int foo(int i) {return i*2;} int bar(int i) {return i*3;} auto fooBar = bind(&foo, bind(&bar, _0)); writefln(fooBar(5)); // // Limitations // // writefln("(bindAlias!(greater)(_0, 4))"); // auto greater4 = bindAlias!(greater)(_0, 4); // for (int i=0; i<7; ++i) // { // writefln(i, ">4 ", greater4(i)); // } // auto fooFooBar = bindAlias!(foo)(bindAlias!(fooBar)(_0)); // auto fooFooBar = bindAlias!(foo)(bind(fooBar.ptr, _0)); // writefln(fooFooBar(5)); } I:\bind_repair>main (bind(&less, _0, 5)) 0<5 true 1<5 true 2<5 true 3<5 true 4<5 true 5<5 false 6<5 false (bind(&less, 5, _0)) 0>=6 false 1>=6 false 2>=6 false 3>=6 false 4>=6 false 5>=6 false 6>=6 true (bind(&less, 3, 5)) 3<5 true (bind(&less, 5, 3)) 5<3 false (bind(bind(&less, _1, _0).ptr, _0, 3) 0>3 false 1>3 false 2>3 false 3>3 false 4>3 true 5>3 true 6>3 true (bindAlias!(less)(_0, 2)) 0<2 true 1<2 true 2<2 false 3<2 false 4<2 false 5<2 false 6<2 false (bind(&foo, bind(&bar, _0))) 30 --
Dec 18 2008
http://d.puremagic.com/issues/show_bug.cgi?id=1541 rayerd.wiz gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |site.puremagic.com brianguer | |tin.com *** Bug 2602 has been marked as a duplicate of this bug. *** --
Jan 22 2009
http://d.puremagic.com/issues/show_bug.cgi?id=1541 rayerd.wiz gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- description|within limitations |within limitations --
Jan 22 2009
http://d.puremagic.com/issues/show_bug.cgi?id=1541 Andrei Alexandrescu <andrei metalanguage.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |andrei metalanguage.com Resolution| |WONTFIX 14:34:46 PST --- std.bind has been eliminated from Phobos. Sorry, Haruki! -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jan 08 2011
http://d.puremagic.com/issues/show_bug.cgi?id=1541 PST ---std.bind has been eliminated from Phobos. Sorry, Haruki!Don't worry, we have closure. std.bind is already unnecessary one! -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jan 08 2011