digitalmars.D - Should we remove int[$] before 2.067?
- Andrei Alexandrescu (30/30) Jan 30 2015 As discussed in this forum, Kenji has authored
- Nick Treleaven (3/6) Jan 30 2015 +1. Also discussed here:
- Kenji Hara via Digitalmars-d (41/42) Jan 30 2015 The new feature, I call it "Partial type deduction", is not only for sta...
- Nick Treleaven (9/23) Jan 30 2015 auto a2 = staticArray!(immutable(int)[])([1,2], [3,4]);
- Kenji Hara via Digitalmars-d (8/10) Jan 30 2015 How the API can replace following declaration with ?
- Nick Treleaven (7/17) Jan 30 2015 alias s = staticArray;
- eles (2/10) Jan 30 2015 That's coding for masochists, sorry.
- Andrei Alexandrescu (36/46) Jan 30 2015 This is interesting, and something we might get behind if it has general...
- Nick Treleaven (10/12) Jan 30 2015 Actually, I'm having trouble implementing staticArray like that, perhaps...
- Foo (26/40) Jan 30 2015 That is such a ugly call. Consider this:
- Andrei Alexandrescu (5/44) Jan 30 2015 The interesting thing is because of the tight overloading rules, "s"
- Nick Treleaven (4/6) Jan 30 2015 Yes, I think the other improvements are useful, but [$] is not strictly
- H. S. Teoh via Digitalmars-d (19/25) Jan 30 2015 If it wasn't a good idea, I don't have a problem with reverting it, but
- Andrei Alexandrescu (10/32) Jan 30 2015 I agree we could and should improve the process here. The way it's been
- Walter Bright (3/27) Jan 30 2015 Sometimes taking action stimulates thinking about it that never would ha...
- Gary Willoughby (9/13) Jan 30 2015 +1
- ketmar (9/13) Jan 30 2015 that is the plan for D? screw the expressiveness, do it One Right Way?=2...
- eles (23/28) Jan 30 2015 You miss one point here. C++ is not despised for being complete,
- Andrei Alexandrescu (6/33) Jan 30 2015 How is anything about specifying the length of a constant array
- eles (7/65) Jan 31 2015 Really? What about the niceness of uniformity in declaration?
- eles (58/71) Feb 01 2015 No. This is not revolutionary, but you are making of it a such
- eles (7/8) Feb 01 2015 Translation of that being:
- eles (3/6) Feb 01 2015 At least for me, this was a valuable English lesson. I had never
- Andrei Alexandrescu (5/11) Feb 01 2015 Well I don't know what to say. I agree with some of your points but not
- "Ola Fosheim =?UTF-8?B?R3LDuHN0YWQi?= (7/9) Feb 01 2015 How about designing the language before implementing it? Then one
- eles (17/24) Feb 01 2015 One thing that the library-auto solution does not provide is the
- ketmar (4/6) Feb 01 2015 this is part of "be smart!" strategy. anyone who is not smart enough=20
- eles (3/9) Feb 01 2015 Well, at least, halving the user base has the definite advantage
- "Ola Fosheim =?UTF-8?B?R3LDuHN0YWQi?= (9/17) Feb 01 2015 It would help if dynamic-array/slice/fixed-size-array and
- ketmar (5/22) Feb 01 2015 i agree with you, but it's really too late to redesign. :-(
- "Ola Fosheim =?UTF-8?B?R3LDuHN0YWQi?= (17/22) Feb 02 2015 I don't agree. D does not have a significant set of libraries
- ketmar (11/23) Feb 02 2015 but to work on D3 people should be interested in D. and it seems that=20
- "Ola Fosheim =?UTF-8?B?R3LDuHN0YWQi?= (21/31) Feb 02 2015 Mmmaybe, but I think more people would be more willing to work on
- ketmar (20/35) Feb 02 2015 so it should have defined niche then. sadly, D hasn't, as it tries to be...
- "Ola Fosheim =?UTF-8?B?R3LDuHN0YWQi?= (11/31) Feb 02 2015 Yeah, I'm not really into all those constraints. I want power,
- ketmar (10/21) Feb 02 2015 it's practically a ".di" file, but in compact binary representation. or=...
- "Ola Fosheim =?UTF-8?B?R3LDuHN0YWQi?= (9/16) Feb 02 2015 Not a portable mess per se, you can have platform support
- eles (10/13) Feb 01 2015 But that everyone is many. Have a look, please, at the comments
- eles (2/10) Feb 01 2015 + bearophile
- eles (6/11) Feb 01 2015 And, for what it matters, 9 years of *indecision*.
- Andrei Alexandrescu (2/11) Feb 01 2015 I agree indecision is bad. -- Andrei
- David Gileadi (2/3) Feb 02 2015 Whereas I'm still on the fence...
- uri (7/15) Feb 01 2015 +1
- eles (3/8) Feb 01 2015 Unfortunately for D, many of the wannabe users reach similar
- Andrei Alexandrescu (2/22) Feb 01 2015 Which feature are you referring to? -- Andrei
- uri (15/46) Feb 01 2015 int[$] a=[1,2,3];
- Andrei Alexandrescu (3/6) Feb 01 2015 Do R, Octave, or Matlab have the ability to define arrays on the stack?
- stewarth (12/20) Feb 01 2015 No they don't, at least not to my knowledge and we use Matlab
- Tobias Pankrath (4/9) Feb 01 2015 Because static arrays are not convenient enough to use, I'll have
- eles (5/11) Feb 01 2015 But they provide other things. Despite what some seem to assume,
- deadalnix (4/7) Feb 01 2015 Kind of OT, but can we drop this static/dynamic/associative array
- Andrej Mitrovic via Digitalmars-d (2/9) Feb 01 2015 Let's call static arrays fixed-size arrays IMO.
- Iain Buclaw via Digitalmars-d (6/14) Feb 01 2015 What I read in that link is:
- "Ola Fosheim =?UTF-8?B?R3LDuHN0YWQi?= (24/27) Jan 30 2015 What management? You mean the process that follow the structure:
- eles (8/11) Feb 01 2015 *these* are very different grounds on which to discuss, accept or
- "Ola Fosheim =?UTF-8?B?R3LDuHN0YWQi?= (6/9) Feb 01 2015 Yeah, I agree that the library solution for what should be
- eles (9/12) Feb 01 2015 Yet, there is such a bias for over-appreciating the library
- weaselcat (4/6) Jan 30 2015 +1
- ixid (2/10) Jan 30 2015 What would you remove?
- Meta (13/37) Jan 30 2015 I'm somewhat neutral on [$], although I think it is useful. I
- Andrei Alexandrescu (17/32) Jan 30 2015 Yah, that's nice but needs appropriate formalization. How about
- Meta (20/40) Jan 30 2015 staticArray!(int, auto) sarray = [1, 2, 3];
- Walter Bright (5/5) Jan 30 2015 Unless a new language feature is a compelling win, we should err on the ...
- eles (4/5) Feb 01 2015 You seem to never measure "win" in terms of "user experience",
- Dicebot (5/5) Jan 30 2015 If it is only a way to infer static array types I am inclined to
- Dicebot (1/1) Jan 30 2015 P.S. does it have a DIP? Is it http://wiki.dlang.org/DIP34 ?
- deadalnix (2/2) Jan 30 2015 Kill it with fire. It add language complexity and is not pulling
- Foo (2/2) Feb 07 2015 Maybe someone should remove this from the Changelog?
As discussed in this forum, Kenji has authored https://github.com/D-Programming-Language/dmd/pull/3615 which has been recently merged. By this I am proposing we revert that decision, and quickly - before 2.067 is released lest we'll need to support it forever. Here's why. One simple litmus test for a new language feature is "it can't be done within the current language". That's a good yardstick; coupled with the importance of the task, it forms a compelling reason for adding the feature. There's nuance to that, e.g. it can be done but it's onerously difficult; or the feature is so frequently needed, dedicated language is warranted. The recent int[$] feature seems to fail that test. That feature, and in fact more, can be done trivially with library code: http://dpaste.dzfl.pl/f49a97e35974. In my opinion these particular features are not frequent enough to warrant dedicated syntax. Furthermore, one other unpleasant aftermath of int[$] is that new syntax merge when a new, new syntax was proposed in this forum, this time for statically-allocated statically-sized arrays. Far as I can tell the main argument is "you have to write longer code" without it. I am not okay with that - at all. D is a great language with many awesome features. Too many, in some people's opinion. We must get into the habit of using D's ample orchestra to create new music, not add a new instrument for every tune. So I am think we should consider reverting https://github.com/D-Programming-Language/dmd/pull/3615 and adding the appropriate functions to std.array. Please advise. Andrei
Jan 30 2015
On 30/01/2015 14:47, Andrei Alexandrescu wrote:The recent int[$] feature seems to fail that test. That feature, and in fact more, can be done trivially with library code: http://dpaste.dzfl.pl/f49a97e35974.+1. Also discussed here: https://issues.dlang.org/show_bug.cgi?id=8008#c8
Jan 30 2015
2015-01-30 23:47 GMT+09:00 Andrei Alexandrescu via Digitalmars-d < digitalmars-d puremagic.com>:Please advise.The new feature, I call it "Partial type deduction", is not only for static array length. Examples: void main() { const[] a1 = [1,2,3]; // a mutable array of const ints static assert(is(typeof(a1) == const(int)[])); a1 ~= 4; // OK static assert(!__traits(compiles, { a1[0] = 10; })); // cannot modify const immutable[][$] a2 = [[1,2], [3,4]]; // a static array of mutable dynamic array of immutable ints static assert(is(typeof(a2) == immutable(int)[][2])); static assert(!__traits(compiles, { a2 ~= [[5,6]]; })); // cannot append to static array a2[0] = [7,8]; // OK assert(a2 == [[7,8], [3,4]]); static assert(!__traits(compiles, { a2[0][0] = 100; })); // cannot modify immutable } The type deduction will provide powerful way to type variables. Yes, ultimately they can be replaced with library function calls, but the call will be ugly and hard to understand. Consider making a2 by using library function. Can you show us a concept design for that? And, staticArray function will not work for the following case: int function(int)[$] funcs = [ a => a + 1, a => a * 2, ]; The template lambdas have no type until they applied to the type `int function(int)`. So auto funcs = staticArray( a => a + 1, a => a * 2, ); is clearly impossible. The core of the feature is a pattern matching for the declared variable type. I believe it will be useful for declarative style programming. Kenji Hara
Jan 30 2015
On 30/01/2015 16:44, Kenji Hara via Digitalmars-d wrote:immutable[][$] a2 = [[1,2], [3,4]]; // a static array of mutable dynamic array of immutable ints static assert(is(typeof(a2) == immutable(int)[][2]));...The type deduction will provide powerful way to type variables. Yes, ultimately they can be replaced with library function calls, but the call will be ugly and hard to understand. Consider making a2 by using library function. Can you show us a concept design for that?auto a2 = staticArray!(immutable(int)[])([1,2], [3,4]); This version of staticArray allows the user to (optionally) specify the element type.And, staticArray function will not work for the following case: int function(int)[$] funcs = [ a => a + 1, a => a * 2, ]; The template lambdas have no type until they applied to the type `int function(int)`. Soauto funcs = staticArray!(int function(int))( a => a + 1, a => a * 2, );
Jan 30 2015
2015-01-31 1:53 GMT+09:00 Nick Treleaven via Digitalmars-d < digitalmars-d puremagic.com>:This version of staticArray allows the user to (optionally) specify the element type.How the API can replace following declaration with ? auto[$][][$] = [ [[1,2]], [[3,4], [5,6]], [[7,8], [9,10], [11,12]], ];
Jan 30 2015
On 30/01/2015 17:01, Kenji Hara via Digitalmars-d wrote:2015-01-31 1:53 GMT+09:00 Nick Treleaven via Digitalmars-d < digitalmars-d puremagic.com>:alias s = staticArray; auto arr = staticArray( [[1,2].s], [[3,4].s, [5,6].s], [[7,8].s, [9,10].s, [11,12].s], );This version of staticArray allows the user to (optionally) specify the element type.How the API can replace following declaration with ? auto[$][][$] = [ [[1,2]], [[3,4], [5,6]], [[7,8], [9,10], [11,12]], ];
Jan 30 2015
On Friday, 30 January 2015 at 17:06:31 UTC, Nick Treleaven wrote:On 30/01/2015 17:01, Kenji Hara via Digitalmars-d wrote:2015-01-31 1:53 GMT+09:00 Nick Treleaven via Digitalmars-d <alias s = staticArray; auto arr = staticArray( [[1,2].s], [[3,4].s, [5,6].s], [[7,8].s, [9,10].s, [11,12].s], );That's coding for masochists, sorry.
Jan 30 2015
On 1/30/15 9:01 AM, Kenji Hara via Digitalmars-d wrote:2015-01-31 1:53 GMT+09:00 Nick Treleaven via Digitalmars-d <digitalmars-d puremagic.com <mailto:digitalmars-d puremagic.com>>: This version of staticArray allows the user to (optionally) specify the element type. How the API can replace following declaration with ? auto[$][][$] = [ [[1,2]], [[3,4], [5,6]], [[7,8], [9,10], [11,12]], ];This is interesting, and something we might get behind if it has general power. I'll note that partial deduction with "auto" is done in C++ and occasionally useful. We should definitely support "const[] a1 = [1, 2, 3];" regardless of the general decision about [$]. Where I have more difficulty is understanding how e.g. matching may help in a function call context, or how it generalizes beyond inferring sizes for statically-sized arrays (which I'd say is a rather dull category of cases). One other aspect is the more complex the array shape, the more awkward it becomes with library functions; however, the frequency of use or even necessity also decrease correspondingly. One extra note - the original feature request https://issues.dlang.org/show_bug.cgi?id=481 was made in November 2006. At that time, common library artifacts such as CommonType did not exist and were at most a dream of the future; with what we have now doing everything needed takes a couple of lines. It looks like we've lost perspective. Walter and I don't feel all too strongly about this so we wanted to gauge good signal from the dlang brass. We have a few roads from here: 1. Convince ourselves that [$] has current and future benefits that are larger than what library code can ensure reasonably, and do nothing - i.e. keep the feature starting with 2.067. 2. Release the feature but consider it experimental; don't document it, or mention it may be removed in future releases. 3. Release the feature and make it opt-in via a DIP (-dip=xxx) that would motivate it properly. 4. Undo the pull request at least for now, and get to the design table to make sure it's worth the added cost. One road I want explicitly not taken is: 5. This feature is the first of a cornucopia of custom annotations for various related cases. I am particularly worried by the near-instant use of this feature as a precedent for proposing more similar ones. We must stop that. Andrei
Jan 30 2015
On 30/01/2015 16:53, Nick Treleaven wrote:This version of staticArray allows the user to (optionally) specify the element type.Actually, I'm having trouble implementing staticArray like that, perhaps there are compiler issues causing problems. Using this: T[len] staticArray(T, size_t len)(T[len] items) { return items; } you would need to call it: staticArray([a, b, c]). UFCS doesn't seem to work, and I can't get the immutable or function array example to compile either (with the extra [brackets])...
Jan 30 2015
On Friday, 30 January 2015 at 17:37:44 UTC, Nick Treleaven wrote:On 30/01/2015 16:53, Nick Treleaven wrote:That is such a ugly call. Consider this: ---- nogc safe T[n] s(T, size_t n)(auto ref T[n] values) pure nothrow { return values; } void main() { pragma(msg, typeof([1, 2, 3].s)); } ---- Something like staticArray([1, 2, 3]) is probably so ugly and way to long so that nobody new would like it or use it. We should consider the usability. int[$] looks nicer and is shorter. Nobody want to type ugly and long names instead. Let look at staticArray([1, 2, 3]) as a new user: "I have to call a function with an array(whereby it is unclear to the new user if [1, 2, 3] is placed on the heap or not) and the result of this call is a static array? Why? Is it worth it? Should I use something cumbersome?" That is why I'm either for the language feature or for something short like '[1, 2, 3].s' And no, nobody want to write 'alias s = staticArray' every time again. Don't come with this counter please.This version of staticArray allows the user to (optionally) specify the element type.Actually, I'm having trouble implementing staticArray like that, perhaps there are compiler issues causing problems. Using this: T[len] staticArray(T, size_t len)(T[len] items) { return items; } you would need to call it: staticArray([a, b, c]). UFCS doesn't seem to work, and I can't get the immutable or function array example to compile either (with the extra [brackets])...
Jan 30 2015
On 1/30/15 10:40 AM, Foo wrote:On Friday, 30 January 2015 at 17:37:44 UTC, Nick Treleaven wrote:The interesting thing is because of the tight overloading rules, "s" will only match statically-sized arrays. So it's okay to simply expose it as std.array.s without fear it might clash with other uses of the "s" symbol. Awesome. -- AndreiOn 30/01/2015 16:53, Nick Treleaven wrote:That is such a ugly call. Consider this: ---- nogc safe T[n] s(T, size_t n)(auto ref T[n] values) pure nothrow { return values; } void main() { pragma(msg, typeof([1, 2, 3].s)); } ---- Something like staticArray([1, 2, 3]) is probably so ugly and way to long so that nobody new would like it or use it. We should consider the usability. int[$] looks nicer and is shorter. Nobody want to type ugly and long names instead. Let look at staticArray([1, 2, 3]) as a new user: "I have to call a function with an array(whereby it is unclear to the new user if [1, 2, 3] is placed on the heap or not) and the result of this call is a static array? Why? Is it worth it? Should I use something cumbersome?" That is why I'm either for the language feature or for something short like '[1, 2, 3].s' And no, nobody want to write 'alias s = staticArray' every time again. Don't come with this counter please.This version of staticArray allows the user to (optionally) specify the element type.Actually, I'm having trouble implementing staticArray like that, perhaps there are compiler issues causing problems. Using this: T[len] staticArray(T, size_t len)(T[len] items) { return items; } you would need to call it: staticArray([a, b, c]). UFCS doesn't seem to work, and I can't get the immutable or function array example to compile either (with the extra [brackets])...
Jan 30 2015
On Friday, 30 January 2015 at 19:07:53 UTC, Andrei Alexandrescu wrote:On 1/30/15 10:40 AM, Foo wrote:Exactly. ;)On Friday, 30 January 2015 at 17:37:44 UTC, Nick Treleaven wrote:The interesting thing is because of the tight overloading rules, "s" will only match statically-sized arrays. So it's okay to simply expose it as std.array.s without fear it might clash with other uses of the "s" symbol. Awesome. -- AndreiOn 30/01/2015 16:53, Nick Treleaven wrote:That is such a ugly call. Consider this: ---- nogc safe T[n] s(T, size_t n)(auto ref T[n] values) pure nothrow { return values; } void main() { pragma(msg, typeof([1, 2, 3].s)); } ---- Something like staticArray([1, 2, 3]) is probably so ugly and way to long so that nobody new would like it or use it. We should consider the usability. int[$] looks nicer and is shorter. Nobody want to type ugly and long names instead. Let look at staticArray([1, 2, 3]) as a new user: "I have to call a function with an array(whereby it is unclear to the new user if [1, 2, 3] is placed on the heap or not) and the result of this call is a static array? Why? Is it worth it? Should I use something cumbersome?" That is why I'm either for the language feature or for something short like '[1, 2, 3].s' And no, nobody want to write 'alias s = staticArray' every time again. Don't come with this counter please.This version of staticArray allows the user to (optionally) specify the element type.Actually, I'm having trouble implementing staticArray like that, perhaps there are compiler issues causing problems. Using this: T[len] staticArray(T, size_t len)(T[len] items) { return items; } you would need to call it: staticArray([a, b, c]). UFCS doesn't seem to work, and I can't get the immutable or function array example to compile either (with the extra [brackets])...
Jan 30 2015
On Friday, 30 January 2015 at 19:07:53 UTC, Andrei Alexandrescu wrote:The interesting thing is because of the tight overloading rules, "s" will only match statically-sized arrays. So it's okay to simply expose it as std.array.s without fear it might clash with other uses of the "s" symbol. Awesome. -- AndreiWith a library method of [1, 2, 3].s, or syntax of [1, 2, 3]s, would this proposed $ syntax really provide any benefit? Since you could already use 'auto a = [1, 2, 3]' for size inference, I don't really see a strong benefit over 'int[$] a = [1, 2, 3]' with the exception that you could specify the type in the latter. More so, I think having .s is a much better alternative if there's no substantial advantage to $, because it can also be used as an expression for purposes such as making function calls with a static array. Example: auto foo = Variant([1, 2, 3].s) rather than auto foo = Variant(cast(int[$])[1, 2, 3])
Jan 30 2015
On Saturday, 31 January 2015 at 05:07:35 UTC, Kapps wrote:On Friday, 30 January 2015 at 19:07:53 UTC, Andrei Alexandrescu wrote:Did you mean 'auto a = [1, 2, 3].s'? auto a = [1, 2, 3]; // int[] auto[$] b = [1, 2, 3]; // int[3]The interesting thing is because of the tight overloading rules, "s" will only match statically-sized arrays. So it's okay to simply expose it as std.array.s without fear it might clash with other uses of the "s" symbol. Awesome. -- AndreiWith a library method of [1, 2, 3].s, or syntax of [1, 2, 3]s, would this proposed $ syntax really provide any benefit? Since you could already use 'auto a = [1, 2, 3]' for size inference,I don't really see a strong benefit over 'int[$] a = [1, 2, 3]' with the exception that you could specify the type in the latter. More so, I think having .s is a much better alternative if there's no substantial advantage to $, because it can also be used as an expression for purposes such as making function calls with a static array. Example: auto foo = Variant([1, 2, 3].s) rather than auto foo = Variant(cast(int[$])[1, 2, 3])
Jan 30 2015
On Saturday, 31 January 2015 at 05:21:08 UTC, an wrote:On Saturday, 31 January 2015 at 05:07:35 UTC, Kapps wrote:Aye, I meant with the .s.With a library method of [1, 2, 3].s, or syntax of [1, 2, 3]s, would this proposed $ syntax really provide any benefit? Since you could already use 'auto a = [1, 2, 3]' for size inference,Did you mean 'auto a = [1, 2, 3].s'?
Jan 30 2015
On Saturday, 31 January 2015 at 05:07:35 UTC, Kapps wrote:On Friday, 30 January 2015 at 19:07:53 UTC, Andrei Alexandrescu wrote:The interesting thing is because of the tight overloading rules, "s" will only match statically-sized arrays. So it's okay to simply expose it as std.array.s without fear it might clash with other uses of the "s" symbol. Awesome. -- AndreiExample: auto foo = Variant([1, 2, 3].s) rather than auto foo = Variant(cast(int[$])[1, 2, 3])The one really bad thing about this is that it forces you to declare it as auto. While having the possibility to write auto is nice, forcing you to do so is quite ugly. I still to this day hate the Scoped, exactly for the same reason. I just want examples *without* being forced to use auto. Auto is less clearer about one ecpects an expresion to be.
Jan 30 2015
On 30/01/2015 16:44, Kenji Hara via Digitalmars-d wrote:The new feature, I call it "Partial type deduction", is not only for static array length.Yes, I think the other improvements are useful, but [$] is not strictly necessary. Maybe [$] will turn out to be worth having, but I'm not sure that's clear yet.
Jan 30 2015
On Fri, Jan 30, 2015 at 06:47:22AM -0800, Andrei Alexandrescu via Digitalmars-d wrote:As discussed in this forum, Kenji has authored https://github.com/D-Programming-Language/dmd/pull/3615 which has been recently merged. By this I am proposing we revert that decision, and quickly - before 2.067 is released lest we'll need to support it forever. Here's why.If it wasn't a good idea, I don't have a problem with reverting it, but what I'm wondering is, why raise the objection *now* rather than *months* ago when the PR was sitting in the queue idle? From the discussion on github, it appeared that the only objection against it was that Walter didn't like the syntax. Where were the arguments about it being a superfluous syntax change? Why raise the objections now rather than back then? I think we need to improve the process here. If a PR is not up to par or is a bad idea, or approval from Walter/Andrei is required, can we pretty please mark it as such beforehand? Rather than, as it would appear, let it sit there until someone merges it, only to parachute in after the fact to blast it to bits? (I know that's not the intention, but that's what it looks like, since I've lost count of how many months this particular PR was sitting in the queue with only minor nitpicks raised against it and no sign of imminent doom like it's made out to be now.) T -- This is not a sentence.
Jan 30 2015
On 1/30/15 9:57 AM, H. S. Teoh via Digitalmars-d wrote:On Fri, Jan 30, 2015 at 06:47:22AM -0800, Andrei Alexandrescu via Digitalmars-d wrote:I agree we could and should improve the process here. The way it's been handled has been quite inefficient. You should know that I had pulled the request. So I was okay with it because I non-critically assumed it wasn't doable within the current language. I was obviously mistaken. Such indecision/change of mind should not repeat often in the future. But the fact is it did happen this time, which is frustrating to everyone involved. AndreiAs discussed in this forum, Kenji has authored https://github.com/D-Programming-Language/dmd/pull/3615 which has been recently merged. By this I am proposing we revert that decision, and quickly - before 2.067 is released lest we'll need to support it forever. Here's why.If it wasn't a good idea, I don't have a problem with reverting it, but what I'm wondering is, why raise the objection *now* rather than *months* ago when the PR was sitting in the queue idle? From the discussion on github, it appeared that the only objection against it was that Walter didn't like the syntax. Where were the arguments about it being a superfluous syntax change? Why raise the objections now rather than back then? I think we need to improve the process here. If a PR is not up to par or is a bad idea, or approval from Walter/Andrei is required, can we pretty please mark it as such beforehand? Rather than, as it would appear, let it sit there until someone merges it, only to parachute in after the fact to blast it to bits? (I know that's not the intention, but that's what it looks like, since I've lost count of how many months this particular PR was sitting in the queue with only minor nitpicks raised against it and no sign of imminent doom like it's made out to be now.)
Jan 30 2015
On 1/30/2015 10:21 AM, Andrei Alexandrescu wrote:On 1/30/15 9:57 AM, H. S. Teoh via Digitalmars-d wrote:Sometimes taking action stimulates thinking about it that never would happen otherwise. I don't see how adding more process would have the same effect.If it wasn't a good idea, I don't have a problem with reverting it, but what I'm wondering is, why raise the objection *now* rather than *months* ago when the PR was sitting in the queue idle? From the discussion on github, it appeared that the only objection against it was that Walter didn't like the syntax. Where were the arguments about it being a superfluous syntax change? Why raise the objections now rather than back then? I think we need to improve the process here. If a PR is not up to par or is a bad idea, or approval from Walter/Andrei is required, can we pretty please mark it as such beforehand? Rather than, as it would appear, let it sit there until someone merges it, only to parachute in after the fact to blast it to bits? (I know that's not the intention, but that's what it looks like, since I've lost count of how many months this particular PR was sitting in the queue with only minor nitpicks raised against it and no sign of imminent doom like it's made out to be now.)I agree we could and should improve the process here. The way it's been handled has been quite inefficient. You should know that I had pulled the request. So I was okay with it because I non-critically assumed it wasn't doable within the current language. I was obviously mistaken. Such indecision/change of mind should not repeat often in the future. But the fact is it did happen this time, which is frustrating to everyone involved.
Jan 30 2015
On Friday, 30 January 2015 at 14:47:22 UTC, Andrei Alexandrescu wrote:So I am think we should consider reverting https://github.com/D-Programming-Language/dmd/pull/3615 and adding the appropriate functions to std.array. Please advise.+1 Woah, please stop adding syntax and focus on stability, libraries and interoperability. We don't want the situation of C++ where people only use 80% of it's features and that 80% is different for everyone. I've recently been writing some Go code and it's become clear to me just how big of a language D really is.
Jan 30 2015
On Fri, 30 Jan 2015 18:08:13 +0000, Gary Willoughby wrote:We don't want the situation of C++ where people only use 80% of it's features and that 80% is different for everyone. I've recently been writing some Go code and it's become clear to me just how big of a language D really is.that is the plan for D? screw the expressiveness, do it One Right Way?=20 fsck, WHY DIDN'T YOU WROTE THAT ON THE FRONT PAGE?! i was thinking about=20 opposite... p.s. should i submit patches to remove everything that is doable with=20 libraries? my particular target is so-called "floating point numbers".=20 they only adds complexity to codegen and parser, and all floating point=20 functions can be written in pure D. ah, and integer multiplication as a=20 low-hanging fruit.=
Jan 30 2015
On Friday, 30 January 2015 at 18:08:15 UTC, Gary Willoughby wrote:On Friday, 30 January 2015 at 14:47:22 UTWe don't want the situation of C++ where people only use 80% of it's features and that 80% is different for everyone. I've recently been writing some Go code and it's become clear to me just how big of a language D really is.You miss one point here. C++ is not despised for being complete, but for being ugly. Is not features in it that are too many, but the quirks. Add more quirks to D instead of a lean syntax. This way you will end with C++. You guys should watch again The last thing D needs. Library syntax shows 'it can be done' but *as a quirk* Frankly, you can already do *everything* just by typing 'asm', isn't? You really want to stay there? Everytime I follow the process managemnt and decision in D, it looks to me like IndburIII-esque: 'To him, a stilted geometric love of arrangement was "system," an indefatigable and feverish interest in the pettiest facets of day-to-day bureaucracy was "industry," indecision when right was "caution," and blind stubbornness when wrong, "determination."' It is one thing to thrieve for caution and determination. But another thing to get those in the right way. Right now, guys, you are going on the wrong road. Being conservative when wrong and revolutionary when wrong too. Certainly, you end up by being both conservative and revolutionary. But, neither when it is needed. I really support the syntax. Because makes one quirk less.
Jan 30 2015
On 1/30/15 11:00 PM, eles wrote:On Friday, 30 January 2015 at 18:08:15 UTC, Gary Willoughby wrote:How is anything about specifying the length of a constant array revolutionary?On Friday, 30 January 2015 at 14:47:22 UTWe don't want the situation of C++ where people only use 80% of it's features and that 80% is different for everyone. I've recently been writing some Go code and it's become clear to me just how big of a language D really is.You miss one point here. C++ is not despised for being complete, but for being ugly. Is not features in it that are too many, but the quirks. Add more quirks to D instead of a lean syntax. This way you will end with C++. You guys should watch again The last thing D needs. Library syntax shows 'it can be done' but *as a quirk* Frankly, you can already do *everything* just by typing 'asm', isn't? You really want to stay there? Everytime I follow the process managemnt and decision in D, it looks to me like IndburIII-esque: 'To him, a stilted geometric love of arrangement was "system," an indefatigable and feverish interest in the pettiest facets of day-to-day bureaucracy was "industry," indecision when right was "caution," and blind stubbornness when wrong, "determination."' It is one thing to thrieve for caution and determination. But another thing to get those in the right way. Right now, guys, you are going on the wrong road. Being conservative when wrong and revolutionary when wrong too.Certainly, you end up by being both conservative and revolutionary. But, neither when it is needed. I really support the syntax. Because makes one quirk less.Special syntax for a niche case instead of using a function... looks one quirk more, not less. Andrei
Jan 30 2015
On Saturday, 31 January 2015 at 07:19:47 UTC, Andrei Alexandrescu wrote:On 1/30/15 11:00 PM, eles wrote:Really? What about the niceness of uniformity in declaration? Imagine that you declare first a dynamic array, then you would like it to be static. Suddenly you have to quirk. You defend inconsistency.On Friday, 30 January 2015 at 18:08:15 UTC, Gary Willoughby wrote:How is anything about specifying the length of a constant array revolutionary?On Friday, 30 January 2015 at 14:47:22 UTWe don't want the situation of C++ where people only use 80% of it's features and that 80% is different for everyone. I've recently been writing some Go code and it's become clear to me just how big of a language D really is.You miss one point here. C++ is not despised for being complete, but for being ugly. Is not features in it that are too many, but the quirks. Add more quirks to D instead of a lean syntax. This way you will end with C++. You guys should watch again The last thing D needs. Library syntax shows 'it can be done' but *as a quirk* Frankly, you can already do *everything* just by typing 'asm', isn't? You really want to stay there? Everytime I follow the process managemnt and decision in D, it looks to me like IndburIII-esque: 'To him, a stilted geometric love of arrangement was "system," an indefatigable and feverish interest in the pettiest facets of day-to-day bureaucracy was "industry," indecision when right was "caution," and blind stubbornness when wrong, "determination."' It is one thing to thrieve for caution and determination. But another thing to get those in the right way. Right now, guys, you are going on the wrong road. Being conservative when wrong and revolutionary when wrong too.Certainly, you end up by being both conservative and revolutionary. But, neither when it is needed. I really support the syntax. Because makes one quirk less.Special syntax for a niche case instead of using a function... looks one quirk more, not less.
Jan 31 2015
On Saturday, 31 January 2015 at 07:19:47 UTC, Andrei Alexandrescu wrote:On 1/30/15 11:00 PM, eles wrote:On Friday, 30 January 2015 at 18:08:15 UTC, Gary Willoughby wrote:On Friday, 30 January 2015 at 14:47:22 UTHow is anything about specifying the length of a constant array revolutionary?No. This is not revolutionary, but you are making of it a such fearsome perspective that one's feels like it will gonna blow away the language. And when I spoke about the revolution that might be wrong, I didn't speak about this. But precisely of this: The wrong revolution in D is the GC. Yes, in that respect, D was revolutionary. And wrong. A lot of effort, see the recent threads about embedded and realtime, are just wasted energy to alleviate the outcomes of this one bad choice. It seems that the hardest fight the D users have to tackle is with the GC. Just have a look at all the efforts made in this direction (even the allocators and so on), and especially at the *abandoned efforts*. Anyway, I did not want to develop the topic on this thread because i is a different thing.It looks to you that suddenly being forced to go from: int[3] x = [1, 2, 3]; to staticArray!(int, auto) sarray = [1, 2, 3]; or from auto[$][][$] = [ [[1,2]], [[3,4], [5,6]], [[7,8], [9,10], [11,12]], ]; to alias s = staticArray; auto arr = staticArray( [[1,2].s], [[3,4].s, [5,6].s], [[7,8].s, [9,10].s, [11,12].s], ); is a kind of clear, crisp and obvious change? Frankly, the latter example ae rather a special syntax, not the first one. There, the meaning is almost clear: "I want static string of a length that I don't want to spend effort in order to count it by hand". Don't tell me that you did never count characters on the screen with the keyboard, mouse or the finger? Now, look again at the examples above and *then* ask yourself which is the more unnatural and special syntax. God, you cannot even get away of that "auto" (which translates into: "I, as a designer, I hide my inability to define a clear syntax here behind this sugar of auto"). So, as I was telling, you manage to be both revolutionary and conservative, just both wrong. You went the revolutionary road with the GC and so on, sparkling a lot of effort and discussions just to cope with that wrong choice, but you held on onto it, with the determination of IndburIII. Then, you fight with all your energy against little things that will much sweeten the language, fearful of changes because, after doing one wrong, you fear even the good ones. And you call this being "cautious". Whatever, anyway.Certainly, you end up by being both conservative and revolutionary. But, neither when it is needed. I really support the syntax. Because makes one quirk less.Special syntax for a niche case instead of using a function... looks one quirk more, not less.
Feb 01 2015
Whatever, anyway.Translation of that being: "Boring pedestrian issues like simple string logging are bikeshedded for YEARS, yet PhD-level esoteric stuff makes it into phobos with relative ease." https://github.com/klamonte/cycle/blob/master/docs/no_more_d.md cautios and determination, isn't? or, revolutionary and conservative, how I did put it...
Feb 01 2015
On Sunday, 1 February 2015 at 09:46:45 UTC, eles wrote:"Boring pedestrian issues like simple string logging are bikeshedded for YEARS, yet PhD-level esoteric stuff makes it into phobos with relative ease."At least for me, this was a valuable English lesson. I had never quite grasp the meaning of "being fed up" before.
Feb 01 2015
On 2/1/15 1:54 AM, eles wrote:On Sunday, 1 February 2015 at 09:46:45 UTC, eles wrote:Well I don't know what to say. I agree with some of your points but not with most. It's a bummer you are being frustrated, but I know it's impossible to please everyone and I'm not sure how we can convert your frustration into something productive. -- Andrei"Boring pedestrian issues like simple string logging are bikeshedded for YEARS, yet PhD-level esoteric stuff makes it into phobos with relative ease."At least for me, this was a valuable English lesson. I had never quite grasp the meaning of "being fed up" before.
Feb 01 2015
On Sunday, 1 February 2015 at 15:31:29 UTC, Andrei Alexandrescu wrote:I know it's impossible to please everyone and I'm not sure how we can convert your frustration into something productive. --How about designing the language before implementing it? Then one can discuss the design, rather than the implementation... Talk is cheap as you like to point out... So talk more before starting on a new cycle, and save the expenses for what is worth "paying" for.
Feb 01 2015
On Sunday, 1 February 2015 at 15:31:29 UTC, Andrei Alexandrescu wrote:On 2/1/15 1:54 AM, eles wrote:On Sunday, 1 February 2015 at 09:46:45 UTC, eles wrote:Well I don't know what to say. I agree with some of your points but not with most. It's a bummer you are being frustrated, but I know it's impossible to please everyone and I'm not sure how we can convert your frustration into something productive. --One thing that the library-auto solution does not provide is the *granularity* of what I ask the compiler to infer. I want the compiler to infer some things, like the length of the static array, but not others, like the type of the elements. What if I want to go from float[$] = [1.09, 1.1]; to int[$] = [1, 1]; but instead I make a mistake and I write: int[$] = [1, 1.1 /* note that I forgot to drop the decimals here */ ]; The "auto" will give me a floating point array, the program might work for a while, than unexpected bugs start arising. Propensity for bike-shedding behind the covers of intellectual refinement puzzles me.
Feb 01 2015
On Sun, 01 Feb 2015 15:56:17 +0000, eles wrote:Propensity for bike-shedding behind the covers of intellectual refinement puzzles me.this is part of "be smart!" strategy. anyone who is not smart enough=20 doesn't deserve the right to use D. and "being smart" means "manually do=20 the work that compiler can automate".=
Feb 01 2015
On Sunday, 1 February 2015 at 16:09:02 UTC, ketmar wrote:On Sun, 01 Feb 2015 15:56:17 +0000, eles wrote:this is part of "be smart!" strategy. anyone who is not smart enough doesn't deserve the right to use D. and "being smart" means "manually do the work that compiler can automate".Well, at least, halving the user base has the definite advantage that it halves the complains too.
Feb 01 2015
On Sunday, 1 February 2015 at 16:09:02 UTC, ketmar wrote:On Sun, 01 Feb 2015 15:56:17 +0000, eles wrote:It would help if dynamic-array/slice/fixed-size-array and value/reference/ownership types had been well designed from the get go. Inconsistencies in syntax and special casing the typing requires the user to "be smart", because the language is "dumb". But making the compiler smarter to fix a dumb language is the wrong path. The right thing to do is to redesign what is "dumb" (the language).Propensity for bike-shedding behind the covers of intellectual refinement puzzles me.this is part of "be smart!" strategy. anyone who is not smart enough doesn't deserve the right to use D. and "being smart" means "manually do the work that compiler can automate".
Feb 01 2015
On Mon, 02 Feb 2015 00:00:00 +0000, Ola Fosheim Gr=C3=B8stad wrote:On Sunday, 1 February 2015 at 16:09:02 UTC, ketmar wrote:i agree with you, but it's really too late to redesign. :-( it's not about "code breaking", people just will not join D3 (or=20 something) developement at this stage. especially if Walter and Andrei=20 will not join (and i doubt they will).=On Sun, 01 Feb 2015 15:56:17 +0000, eles wrote:=20 It would help if dynamic-array/slice/fixed-size-array and value/reference/ownership types had been well designed from the get go. =20 Inconsistencies in syntax and special casing the typing requires the user to "be smart", because the language is "dumb". But making the compiler smarter to fix a dumb language is the wrong path. The right thing to do is to redesign what is "dumb" (the language).Propensity for bike-shedding behind the covers of intellectual refinement puzzles me.this is part of "be smart!" strategy. anyone who is not smart enough doesn't deserve the right to use D. and "being smart" means "manually do the work that compiler can automate".
Feb 01 2015
On Monday, 2 February 2015 at 05:44:46 UTC, ketmar wrote:i agree with you, but it's really too late to redesign. :-( it's not about "code breaking", people just will not join D3 (or something) developement at this stage.I don't agree. D does not have a significant set of libraries that developers depend on and also not a large installed base. What prevents Python3 adoption is the massive amount of Python2 libraries and a perception that you loose more than you gain from switching. But people are switching to Python3... and to C++14... and to Swift... and to Go... When the installed base moves, projects move. Large installed base -> slow moving. No installed base -> free to move.especially if Walter and Andrei will not join (and i doubt they will).I think you overestimate the importance of that. It does not matter who uses D today. The crux is to appeal to those who do not use it, but hacking on it does not fix it for those who have left. Based on what people write in the forums it looks like D now appeals more to newbies coming from scripting languages and VM languages than those coming from low level C/C++. That might turn out to be a very risky market where people switch easily...
Feb 02 2015
On Mon, 02 Feb 2015 09:07:37 +0000, Ola Fosheim Gr=C3=B8stad wrote:On Monday, 2 February 2015 at 05:44:46 UTC, ketmar wrote:but to work on D3 people should be interested in D. and it seems that=20 people who are interested in D and are ready to work on D development=20 already have some codebases. i don't believe that they will welcome yet=20 another codebase conversion. ;-)i agree with you, but it's really too late to redesign. :-( it's not about "code breaking", people just will not join D3 (or something) developement at this stage.=20 I don't agree. D does not have a significant set of libraries that developers depend on and also not a large installed base.but it's matter who is driving force behind the project. "yet another D=20 fork from people you never heard about" has little chances to be=20 successful. besides, Walter owns DMD codegen. it's not the best codegen=20 in the world, but it's very valuable, 'cause it allows to develop D=20 without installing llvm/gcc crap. =especially if Walter and Andrei will not join (and i doubt they will).=20 I think you overestimate the importance of that. It does not matter who uses D today. The crux is to appeal to those who do not use it, but hacking on it does not fix it for those who have left.
Feb 02 2015
On Monday, 2 February 2015 at 10:28:37 UTC, ketmar wrote:but to work on D3 people should be interested in D. and it seems that people who are interested in D and are ready to work on D development already have some codebases. i don't believe that they will welcome yet another codebase conversion. ;-)Mmmaybe, but I think more people would be more willing to work on the compiler if the goal is to produce a niche language of high standards. Basically, a best of breed for niche X. When features compete in a way that makes it impossible to be the best in any niche, then that basically kills motivation (at least mine). Complex languages that grow are usually best of breed in their niche for solving "hard problems". D is getting complicated, but not to solve hard problems. That is not a good tradeoff. There are plenty of simple languages for solving easy problems.but it's matter who is driving force behind the project. "yet another D fork from people you never heard about" has little chances to be successful.Stability, quality and performance. Kill the less important stuff and move for performance. Performance generally trumps other parameters if you are actively getting benchmarks published IMHO. To get performance you need to focus on one platform first. D is expanding everywhere, even in the standard library... Not good. D cannot build "high quality anything" without staying focused. High quality means hardware optimized and best of breed. Just take a look at the numerical library in D, basically empty... If you don't have the resources to make the numerical library look complete then leave it all to a third party.
Feb 02 2015
On Mon, 02 Feb 2015 14:11:20 +0000, Ola Fosheim Gr=C3=B8stad wrote:On Monday, 2 February 2015 at 10:28:37 UTC, ketmar wrote:so it should have defined niche then. sadly, D hasn't, as it tries to be=20 "good system language", "good high-level language" and even "good=20 scripting language" to some extent. i, for example, see D as something intermediate between "system" and=20 "high-level". for me it's really "better C with classes (and structs)".=20 and lambdas, which i'm using in gcc too. and i don't really need that=20 " safe" and "pure" things -- hey, if compiler is able to check that, it's=20 able to infer that, so do it and just get out of my way! ah, and "nothrow"=20 too. let me force that if i want, but otherwise don't burden my sources. sure, to fully exploit that (and other things) it's better to drop that=20 oldish "object files" concept and use something like delphi's .dcu.but to work on D3 people should be interested in D. and it seems that people who are interested in D and are ready to work on D development already have some codebases. i don't believe that they will welcome yet another codebase conversion. ;-)=20 Mmmaybe, but I think more people would be more willing to work on the compiler if the goal is to produce a niche language of high standards. Basically, a best of breed for niche X.When features compete in a way that makes it impossible to be the best in any niche, then that basically kills motivation (at least mine).me too: i still can't understand what kind of language D tries to be.Stability, quality and performance. Kill the less important stuff and move for performance. Performance generally trumps other parameters if you are actively getting benchmarks published IMHO.performance can be left to gcc branch: let gcc people write optimisers=20 for us! ;-) ah, and architecture support too.To get performance you need to focus on one platform first.not necessary. just stop using homegrown codegen for anything except=20 compiler prototypes. develop new features and fixes with prototype=20 comiler, which is able to produce working code, but doesn't even try to=20 do "native" optimisations, and then use gcc as backend for releases. =
Feb 02 2015
On Monday, 2 February 2015 at 15:24:15 UTC, ketmar wrote:and lambdas, which i'm using in gcc too. and i don't really need that " safe" and "pure" things -- hey, if compiler is able to check that, it's able to infer that, so do it and just get out of my way! ah, and "nothrow" too. let me force that if i want, but otherwise don't burden my sources.Yeah, I'm not really into all those constraints. I want power, not limitations and tedium. ;-)sure, to fully exploit that (and other things) it's better to drop that oldish "object files" concept and use something like delphi's .dcu.I am not familiar with that format, but using a high level intermediate representation format is the way to go for whole program optimization IMO...not necessary. just stop using homegrown codegen for anything except compiler prototypes. develop new features and fixes with prototype comiler, which is able to produce working code, but doesn't even try to do "native" optimisations, and then use gcc as backend for releases.Well, one should look to other architectures, but getting high performance levels takes focus. I am not sure if one can get beyond C++ by spreading out on all platforms. Intel intrinsics are in the thousands, and the libraries (and high level optimizer) probably should use those where they are a good fit...
Feb 02 2015
On Mon, 02 Feb 2015 19:13:13 +0000, Ola Fosheim Gr=C3=B8stad wrote:it's practically a ".di" file, but in compact binary representation. or=20 even a full ".d" file for that matter. it's already parsed, checked,=20 analyzed, maybe even some code emited -- but no AST/type information is=20 lost. well, .dcus doesn't keep AST, but D ".dcm" can. ;-) they also can be used by tools too.sure, to fully exploit that (and other things) it's better to drop that oldish "object files" concept and use something like delphi's .dcu.=20 I am not familiar with that format, but using a high level intermediate representation format is the way to go for whole program optimization IMO...Well, one should look to other architectures, but getting high performance levels takes focus. I am not sure if one can get beyond C++ by spreading out on all platforms. Intel intrinsics are in the thousands, and the libraries (and high level optimizer) probably should use those where they are a good fit...i think that this is the area that can be left to "platform-specific"=20 part of the specs. maybe even omited completely, as it's highly backend/ arch dependent. if someone want to squeeze every cycle possible, he knows=20 that his code will be unportable mess. ;-)=
Feb 02 2015
On Monday, 2 February 2015 at 20:51:02 UTC, ketmar wrote:i think that this is the area that can be left to "platform-specific" part of the specs. maybe even omited completely, as it's highly backend/ arch dependent. if someone want to squeeze every cycle possible, he knows that his code will be unportable mess. ;-)Not a portable mess per se, you can have platform support described in the docs with performance notes. Most OSes have been geared towards C and Posix at some point and x86 is currently king, but hardware/coprocessors/memory architecture can be very different. Just wait till FPGAs become mainstream :-P. Don't mistake "unix-style-hardware" for portable code ;^) http://www.extremetech.com/extreme/184828-intel-unveils-new-xeon-chip-with-integrated-fpga-touts-20x-performance-boost
Feb 02 2015
On Sunday, 1 February 2015 at 15:31:29 UTC, Andrei Alexandrescu wrote:On 2/1/15 1:54 AM, eles wrote:On Sunday, 1 February 2015 at 09:46:45 UTC, eles wrote:I know it's impossible to please everyone and I'm not sure howBut that everyone is many. Have a look, please, at the comments made on github for exactly that pull request. Almost all involved seemed to be happy with it (Hara, Andrej, Martin -- sorry for citing names, I don't usually do that), even Walter and you. Some even hinted that they awaited this for long. BTW, the original request was filled in 2006. That makes it for 9 years. For a simple feature. 9 years...
Feb 01 2015
On Sunday, 1 February 2015 at 16:09:24 UTC, eles wrote:On Sunday, 1 February 2015 at 15:31:29 UTC, Andrei Alexandrescu wrote:+ bearophileOn 2/1/15 1:54 AM, eles wrote:On Sunday, 1 February 2015 at 09:46:45 UTC, eles wrote:I know it's impossible to please everyone and I'm not sure howBut that everyone is many. Have a look, please, at the comments made on github for exactly that pull request. Almost all involved seemed to be happy with it (Hara, Andrej, Martin --
Feb 01 2015
On Sunday, 1 February 2015 at 16:09:24 UTC, eles wrote:On Sunday, 1 February 2015 at 15:31:29 UTC, Andrei Alexandrescu wrote:On 2/1/15 1:54 AM, eles wrote:On Sunday, 1 February 2015 at 09:46:45 UTC, eles wrote:9 years...And, for what it matters, 9 years of *indecision*. It wasn't a good or bad decision. It was "it might be a better way". Well, after 9 years, there is still no better way in sight and, still, the brink of another non-decision is glooming that fast.
Feb 01 2015
On 2/1/15 8:24 AM, eles wrote:On Sunday, 1 February 2015 at 16:09:24 UTC, eles wrote:I agree indecision is bad. -- AndreiOn Sunday, 1 February 2015 at 15:31:29 UTC, Andrei Alexandrescu wrote:On 2/1/15 1:54 AM, eles wrote:On Sunday, 1 February 2015 at 09:46:45 UTC, eles wrote:9 years...And, for what it matters, 9 years of *indecision*. It wasn't a good or bad decision. It was "it might be a better way". Well, after 9 years, there is still no better way in sight and, still, the brink of another non-decision is glooming that fast.
Feb 01 2015
On 2/1/15 9:26 AM, Andrei Alexandrescu wrote:I agree indecision is bad. -- AndreiWhereas I'm still on the fence...
Feb 02 2015
On Sunday, 1 February 2015 at 09:46:45 UTC, eles wrote:+1 At least decisions are finally being made on several fronts recently though. W.r.t this feature, I was personally looking forward to it ... guess I'll stick with the Octave/R/Python "troika" for rapid protoyping numerical analysis code.Whatever, anyway.Translation of that being: "Boring pedestrian issues like simple string logging are bikeshedded for YEARS, yet PhD-level esoteric stuff makes it into phobos with relative ease." https://github.com/klamonte/cycle/blob/master/docs/no_more_d.md cautios and determination, isn't? or, revolutionary and conservative, how I did put it...
Feb 01 2015
On Sunday, 1 February 2015 at 10:00:38 UTC, uri wrote:On Sunday, 1 February 2015 at 09:46:45 UTC, eles wrote:W.r.t this feature, I was personally looking forward to it ... guess I'll stick with the Octave/R/Python "troika" for rapid protoyping numerical analysis code.Unfortunately for D, many of the wannabe users reach similar conclusions in the end...
Feb 01 2015
On 2/1/15 2:00 AM, uri wrote:On Sunday, 1 February 2015 at 09:46:45 UTC, eles wrote:Which feature are you referring to? -- Andrei+1 At least decisions are finally being made on several fronts recently though. W.r.t this feature, I was personally looking forward to it ... guess I'll stick with the Octave/R/Python "troika" for rapid protoyping numerical analysis code.Whatever, anyway.Translation of that being: "Boring pedestrian issues like simple string logging are bikeshedded for YEARS, yet PhD-level esoteric stuff makes it into phobos with relative ease." https://github.com/klamonte/cycle/blob/master/docs/no_more_d.md cautios and determination, isn't? or, revolutionary and conservative, how I did put it...
Feb 01 2015
On Sunday, 1 February 2015 at 15:36:04 UTC, Andrei Alexandrescu wrote:On 2/1/15 2:00 AM, uri wrote:int[$] a=[1,2,3]; The syntax sugar helps when prototyping ideas, which is why R and Octave (MATLAB) are so useful. I have reservations about this: auto a=[1,2,3].s Because the type is hidden from the programmer... For my use case (prototyping code) it's a don't care but in production code it might be a problem, as others have pointed out already. I actually use this trick already in my own code for malloc'd arrays to avoid the GC and add sugar to toStringz. All in all it is great to see some decisions been made. I think it will help shut down bike shedding and get D moving forward at a faster rate. Cheers uriOn Sunday, 1 February 2015 at 09:46:45 UTC, eles wrote:Which feature are you referring to? -- Andrei+1 At least decisions are finally being made on several fronts recently though. W.r.t this feature, I was personally looking forward to it ... guess I'll stick with the Octave/R/Python "troika" for rapid protoyping numerical analysis code.Whatever, anyway.Translation of that being: "Boring pedestrian issues like simple string logging are bikeshedded for YEARS, yet PhD-level esoteric stuff makes it into phobos with relative ease." https://github.com/klamonte/cycle/blob/master/docs/no_more_d.md cautios and determination, isn't? or, revolutionary and conservative, how I did put it...
Feb 01 2015
On 2/1/15 1:03 PM, uri wrote:int[$] a=[1,2,3]; The syntax sugar helps when prototyping ideas, which is why R and Octave (MATLAB) are so useful.Do R, Octave, or Matlab have the ability to define arrays on the stack? -- Andrei
Feb 01 2015
On Sunday, 1 February 2015 at 23:19:53 UTC, Andrei Alexandrescu wrote:On 2/1/15 1:03 PM, uri wrote:No they don't, at least not to my knowledge and we use Matlab every day at my workplace. I think what Uri is referring to is the very low resistance once sees in the syntax of R, Matlab, Python when going from an idea or algorithm on paper to code. I've always found dynamic arrays in D are perfectly fine for rapid prototyping code, however, my situation may be different from that Uri. Cheers, stewint[$] a=[1,2,3]; The syntax sugar helps when prototyping ideas, which is why R and Octave (MATLAB) are so useful.Do R, Octave, or Matlab have the ability to define arrays on the stack? -- Andrei
Feb 01 2015
On Sunday, 1 February 2015 at 10:00:38 UTC, uri wrote:On Sunday, 1 February 2015 at 09:46:45 UTC, eles wrote:W.r.t this feature, I was personally looking forward to it ... guess I'll stick with the Octave/R/Python "troika" for rapid protoyping numerical analysis code.Because static arrays are not convenient enough to use, I'll have to use another language that does not even provide static arrays. Makes sense.
Feb 01 2015
On Sunday, 1 February 2015 at 15:41:38 UTC, Tobias Pankrath wrote:On Sunday, 1 February 2015 at 10:00:38 UTC, uri wrote:On Sunday, 1 February 2015 at 09:46:45 UTC, eles wrote:Because static arrays are not convenient enough to use, I'll have to use another language that does not even provide static arrays. Makes sense.But they provide other things. Despite what some seem to assume, regular people are not martyrs looking for the D sword to let themselves fall onto. There are many others appealing swords out there.
Feb 01 2015
On Sunday, 1 February 2015 at 15:41:38 UTC, Tobias Pankrath wrote:Because static arrays are not convenient enough to use, I'll have to use another language that does not even provide static arrays. Makes sense.Kind of OT, but can we drop this static/dynamic/associative array thing ? array/lice/maps seems more appropriate, unless we want to confuse everybody.
Feb 01 2015
On 2/1/15, deadalnix via Digitalmars-d <digitalmars-d puremagic.com> wrote:On Sunday, 1 February 2015 at 15:41:38 UTC, Tobias Pankrath wrote:Let's call static arrays fixed-size arrays IMO.Because static arrays are not convenient enough to use, I'll have to use another language that does not even provide static arrays. Makes sense.Kind of OT, but can we drop this static/dynamic/associative array thing ? array/lice/maps seems more appropriate, unless we want to confuse everybody.
Feb 01 2015
On 1 February 2015 at 09:46, eles via Digitalmars-d <digitalmars-d puremagic.com> wrote:What I read in that link is: I would have tried again... I was out of patience and energy... I didn't want to hack on DMD... (I made up the last quote) Nothing happens if you lack any desire to work.Whatever, anyway.Translation of that being: "Boring pedestrian issues like simple string logging are bikeshedded for YEARS, yet PhD-level esoteric stuff makes it into phobos with relative ease." https://github.com/klamonte/cycle/blob/master/docs/no_more_d.md cautios and determination, isn't? or, revolutionary and conservative, how I did put it...
Feb 01 2015
On Saturday, 31 January 2015 at 07:00:05 UTC, eles wrote:Everytime I follow the process managemnt and decision in D, it looks to me like IndburIII-esque:What management? You mean the process that follow the structure: - analysis - prioritization - risk reduction - design - implementation - evaluation - analysis - prioritization - etc ? What I see is: - implementation - analysis - crisis - implementation - analysis - crisisI really support the syntax. Because makes one quirk less.Can you use it in function parameters? Will it be made superfluous if you have tuple literals? How is "$" different from an inferred templated constant? Does it compete with more generic future concepts? No planning -> chaos -> high expenses.
Jan 30 2015
On Saturday, 31 January 2015 at 07:57:19 UTC, Ola Fosheim Grøstad wrote:On Saturday, 31 January 2015 at 07:00:05 UTC, eles wrote:Can you use it in function parameters? Will it be made superfluous if you have tuple literals?*these* are very different grounds on which to discuss, accept or reject the feature, and they might be valid. but the grounds that I was criticizing were not this ones. were the grounds of "it ma be done otherwise, just look at this nice bed-of-nails syntax"! and yes, the process may be improved a bit (more).
Feb 01 2015
On Sunday, 1 February 2015 at 09:20:11 UTC, eles wrote:but the grounds that I was criticizing were not this ones. were the grounds of "it ma be done otherwise, just look at this nice bed-of-nails syntax"!Yeah, I agree that the library solution for what should be builtin makes no sense. In language design it is often a good idea to prototype potential language features as a library solution first, but not in the standard library...
Feb 01 2015
On Sunday, 1 February 2015 at 15:46:44 UTC, Ola Fosheim Grøstad wrote:On Sunday, 1 February 2015 at 09:20:11 UTC, eles wrote:Yeah, I agree that the library solution for what should be builtin makes no sense.Yet, there is such a bias for over-appreciating the library features... an overappreciation that I fail to understand or see benefits of it beyond a certain point. I guess it has to do with orthogonality or with the "easy-implementation" of the language. All this wile forgetting that as long as the elephant in the room is the GC, all other things combined matter less.
Feb 01 2015
On Friday, 30 January 2015 at 14:47:22 UTC, Andrei Alexandrescu wrote:Please advise. Andrei+1 D's syntax is already big enough, if anything it needs reduced.
Jan 30 2015
On Friday, 30 January 2015 at 18:11:43 UTC, weaselcat wrote:On Friday, 30 January 2015 at 14:47:22 UTC, Andrei Alexandrescu wrote:What would you remove?Please advise. Andrei+1 D's syntax is already big enough, if anything it needs reduced.
Jan 30 2015
On Friday, 30 January 2015 at 14:47:22 UTC, Andrei Alexandrescu wrote:As discussed in this forum, Kenji has authored https://github.com/D-Programming-Language/dmd/pull/3615 which has been recently merged. By this I am proposing we revert that decision, and quickly - before 2.067 is released lest we'll need to support it forever. Here's why. One simple litmus test for a new language feature is "it can't be done within the current language". That's a good yardstick; coupled with the importance of the task, it forms a compelling reason for adding the feature. There's nuance to that, e.g. it can be done but it's onerously difficult; or the feature is so frequently needed, dedicated language is warranted. The recent int[$] feature seems to fail that test. That feature, and in fact more, can be done trivially with library code: http://dpaste.dzfl.pl/f49a97e35974. In my opinion these particular features are not frequent enough to warrant dedicated syntax.I'm somewhat neutral on [$], although I think it is useful. I like the partial type deduction feature and think we should keep that. It makes a lot of array declarations more concise, and subjectively, I think it feels like a natural extension of what D already does with auto. I think if you showed someone auto declarations and then showed them something like auto[] arr = [...], their likely reaction would be "well of course that works". Although maybe I'm too familiar with D at this point and that's not the case at all.Furthermore, one other unpleasant aftermath of int[$] is that new syntax begets more new syntax. The proverbial ink was not in this forum, this time for statically-allocated statically-sized arrays. Far as I can tell the main argument is "you have to write longer code" without it.If you're talking about Bearophile's proposed [1, 2]s syntax, he's been pushing that for a long time, possibly before [$].
Jan 30 2015
On 1/30/15 12:33 PM, Meta wrote:I'm somewhat neutral on [$], although I think it is useful. I like the partial type deduction feature and think we should keep that. It makes a lot of array declarations more concise, and subjectively, I think it feels like a natural extension of what D already does with auto. I think if you showed someone auto declarations and then showed them something like auto[] arr = [...], their likely reaction would be "well of course that works". Although maybe I'm too familiar with D at this point and that's not the case at all.Yah, that's nice but needs appropriate formalization. How about auto[auto] to ensure an associative array type, or Xyz!(auto, auto) to ensure template Xyz with exactly two arguments, or even auto!(auto) to match any template instantiated with one argument...? It's just getting weird, and not very useful because it's impossible to associate names with those "auto"s. As I mentioned this is sometimes used in C++ but I don't see vital idioms. I see people sometimes use auto& a = arr[n]; to make sure they take a reference, but we can't define references locally so we can't use that :o).The age of that proposal is irrelevant (except probably for the possibility of it being obviated by language development). The problem is now there is a precedent to back it up. Let's stop adding every little tidbit to the language. Let's start _using_ the language for awesome things. AndreiFurthermore, one other unpleasant aftermath of int[$] is that new syntax begets more new syntax. The proverbial ink was not yet dry on this time for statically-allocated statically-sized arrays. Far as I can tell the main argument is "you have to write longer code" without it.If you're talking about Bearophile's proposed [1, 2]s syntax, he's been pushing that for a long time, possibly before [$].
Jan 30 2015
On Friday, 30 January 2015 at 20:43:10 UTC, Andrei Alexandrescu wrote:staticArray!(int, auto) sarray = [1, 2, 3]; Maybe it is more general and powerful. Also, I believe that Kenji *did* implement auto[auto]. I'm assuming you were just giving examples and not seriously proposing the above, though.I think if you showed someone auto declarations and then showed them something like auto[] arr = [...], their likely reaction would be "well of course that works". Although maybe I'm too familiar with D at this point and that's not the case at all.Yah, that's nice but needs appropriate formalization. How about auto[auto] to ensure an associative array type, or Xyz!(auto, auto)to ensure template Xyz with exactly two arguments, or even auto!(auto) to match any template instantiated with one argument...?All interesting ideas.It's just getting weird, and not very useful because it's impossible to associate names with those "auto"s. As I mentioned this is sometimes used in C++ but I don't see vital idioms. I see people sometimes use auto& a = arr[n]; to make sure they take a reference, but we can't define references locally so we can't use that :o).I am having difficulty thinking of a situation where you want to refer to the auto from something like `int[auto]`. Are you alluding to pattern matching? I do agree that pattern matching is much more powerful, general, and useful then a partial type-deduction feature. I will also point out that partial type deduction for templates, AKA higher-kinded types, has been a great success in D, and it would be great to bring that power into other areas of the language. This is really all just pleasant diversion thinking about what could be, but I think we can all at least agree that it will not be a huge blow to D if [$] or partial type deduction gets reverted. This is in spite of the fact that I like the latter, of course.
Jan 30 2015
Unless a new language feature is a compelling win, we should err on the side of being conservative. With the array.s library function idea, it seems that the utility of this new syntax is greatly reduced. I say no.
Jan 30 2015
On Friday, 30 January 2015 at 22:34:25 UTC, Walter Bright wrote:Unless a new language feature is a compelling winYou seem to never measure "win" in terms of "user experience", but in "abstract technicality". Blackberry lost in front of Apple exactly for the same reason.
Feb 01 2015
If it is only a way to infer static array types I am inclined to agree that benefit is not big enough. If some more powerful and generic inference is built on top of it that would be a different story - but I haven't followed that specific discussion and don't know if there is anything extra planned.
Jan 30 2015
P.S. does it have a DIP? Is it http://wiki.dlang.org/DIP34 ?
Jan 30 2015
Kill it with fire. It add language complexity and is not pulling its weight.
Jan 30 2015
Maybe someone should remove this from the Changelog? http://dlang.org/changelog.html#partial-type
Feb 07 2015