digitalmars.D.announce - Trip notes from Israel
- Andrei Alexandrescu (2/2) May 22 2017 http://dlang.org/blog/2017/05/22/introspection-introspection-everywhere/...
- Andrei Alexandrescu (4/6) May 22 2017 Submitted to reddit as well:
- Suliman (3/7) May 22 2017 Perfect! I have been in Weka.IO in this january too! Big thanks
- Adam D. Ruppe (16/19) May 22 2017 That actually depends on context! The mixin statement needs
- Andrei Alexandrescu (3/24) May 22 2017 Yah, didn't want to overload the article (or the discussion) with the
- Andrei Alexandrescu (2/27) May 22 2017 Updated the post, it's an interesting point after all. Thanks! -- Andrei
- Adam D. Ruppe (14/16) May 22 2017 Yeah, the details might be too much for a general audience (and I
- Timon Gehr (16/32) May 22 2017 The grammar has:
- Quentin Ladeveze (2/3) May 22 2017 It was really an entertaining and interesting post, thank you.
- Sebastiaan Koppe (2/3) May 22 2017 Wow, that was really good. Love to read more of your trip notes.
- Johan Engelen (15/16) May 22 2017 A fun read!
- Iain Buclaw via Digitalmars-d-announce (9/24) May 23 2017 So for LDC to be as good as GDC, you need to need to compile with
- kinke (4/8) May 23 2017 The intrinsics are exposed by LDC's druntime, they just need to
- Johan Engelen (6/12) May 23 2017 Pleasantly surprised that you think so highly of LDC and LLVM
- Andrei Alexandrescu (4/22) May 23 2017 Thanks! Yes, seto is what I thought of - one way or another, it gets
- Stefan Koch (11/35) May 23 2017 it does this
- Andrei Alexandrescu (14/47) May 23 2017 Where did you see this pattern? Couldn't find it anywhere in
- Stefan Koch (8/42) May 23 2017 That code is written nowhere.
- Andrei Alexandrescu (13/17) May 23 2017 That call enters a different overload:
- Stefan Koch (6/23) May 23 2017 Well ....
- Stefan Koch (1/5) May 23 2017
- Stefan Koch (4/7) May 23 2017 The jbe (jump-below-equal)
- cym13 (4/5) May 22 2017 Now that you are back and could take some time to think this
- Andrei Alexandrescu (63/70) May 26 2017 In several ways. To an extent it was a confirmation of things already
- Meta (9/11) May 26 2017 Interesting. Are there any examples you're willing to provide? It
- Joakim (52/118) May 26 2017 I'm pretty sure nobody actually involved with D would call it a
- Laeeth Isharc (5/19) May 27 2017 A reasonable presumption, but I do not know if Sonke himself has
- Ola Fosheim =?UTF-8?B?R3LDuHN0YWQ=?= (31/43) May 27 2017 I don't see any evidence of this statement being true.
- Meta (10/14) May 27 2017 Don't mistake my intentions. I proposed removing `body` because
- Ola Fosheim Grostad (4/11) May 27 2017 Sure, there are many small improvements that could be made, but
- Adam D. Ruppe (12/17) May 26 2017 Just a couple days ago, people asked me if my libs were on dub...
- Paolo Invernizzi (10/36) May 26 2017 I strongly suggest to have a clear and transparent procedure to
- Swoorup Joshi (2/3) May 23 2017 Interesting read. You're my brother from another mother. :)
- bpr (6/7) May 23 2017 That was a great read, thanks!
- Jacob Carlborg (13/15) May 23 2017 About the custom attributes that are mentioned, like "has acquired a
http://dlang.org/blog/2017/05/22/introspection-introspection-everywhere/ -- Andrei
May 22 2017
On 05/22/2017 11:05 AM, Andrei Alexandrescu wrote:http://dlang.org/blog/2017/05/22/introspection-introspection-everywhere/ -- AndreiSubmitted to reddit as well: https://www.reddit.com/r/programming/comments/6cntso/from_the_d_blog_introspe tion_introspection/ -- Andrei
May 22 2017
On Monday, 22 May 2017 at 15:12:42 UTC, Andrei Alexandrescu wrote:On 05/22/2017 11:05 AM, Andrei Alexandrescu wrote:Perfect! I have been in Weka.IO in this january too! Big thanks guys!http://dlang.org/blog/2017/05/22/introspection-introspection-everywhere/ -- AndreiSubmitted to reddit as well: https://www.reddit.com/r/programming/comments/6cntso/from_the_d_blog_introspe tion_introspection/ -- Andrei
May 22 2017
On Monday, 22 May 2017 at 15:05:24 UTC, Andrei Alexandrescu wrote:mixin is a statement so it needs a terminator, hence the semicolon at the very end. In turn, mixin takes a string (the concatenation of variable opThat actually depends on context! The mixin statement needs statements, but the mixin expression takes expressions. Same mixin keyword, but if it is in the context of a statement it is a statement and in the context of an expression, it is an expression. --- void main() { int payload; mixin("++payload;"); // statement, ; required int b = mixin("++payload"); // expression, ; would be wrong there and cause an error! } --- http://dlang.org/spec/expression.html#MixinExpression http://dlang.org/spec/statement.html#MixinStatement
May 22 2017
On 05/22/2017 11:23 AM, Adam D. Ruppe wrote:On Monday, 22 May 2017 at 15:05:24 UTC, Andrei Alexandrescu wrote:Yah, didn't want to overload the article (or the discussion) with the expression/statement distinction. -- Andreimixin is a statement so it needs a terminator, hence the semicolon at the very end. In turn, mixin takes a string (the concatenation of variable opThat actually depends on context! The mixin statement needs statements, but the mixin expression takes expressions. Same mixin keyword, but if it is in the context of a statement it is a statement and in the context of an expression, it is an expression. --- void main() { int payload; mixin("++payload;"); // statement, ; required int b = mixin("++payload"); // expression, ; would be wrong there and cause an error! } --- http://dlang.org/spec/expression.html#MixinExpression http://dlang.org/spec/statement.html#MixinStatement
May 22 2017
On 05/22/2017 11:26 AM, Andrei Alexandrescu wrote:On 05/22/2017 11:23 AM, Adam D. Ruppe wrote:Updated the post, it's an interesting point after all. Thanks! -- AndreiOn Monday, 22 May 2017 at 15:05:24 UTC, Andrei Alexandrescu wrote:Yah, didn't want to overload the article (or the discussion) with the expression/statement distinction. -- Andreimixin is a statement so it needs a terminator, hence the semicolon at the very end. In turn, mixin takes a string (the concatenation of variable opThat actually depends on context! The mixin statement needs statements, but the mixin expression takes expressions. Same mixin keyword, but if it is in the context of a statement it is a statement and in the context of an expression, it is an expression. --- void main() { int payload; mixin("++payload;"); // statement, ; required int b = mixin("++payload"); // expression, ; would be wrong there and cause an error! } --- http://dlang.org/spec/expression.html#MixinExpression http://dlang.org/spec/statement.html#MixinStatement
May 22 2017
On Monday, 22 May 2017 at 15:26:26 UTC, Andrei Alexandrescu wrote:Yah, didn't want to overload the article (or the discussion) with the expression/statement distinction. -- AndreiYeah, the details might be too much for a general audience (and I realize you know this, I'm commenting more for other readers who might be interested), but I do think this illustrates an important point for anyone who wants to use mixin: it is similar to, but not exactly like copy/pasting code into the source. mixin parses a piece of code, then pastes the *AST node*, not the source code, into the tree where the mixin is found. That's why the semicolon is required in the statement context - it needs a complete branch that actually fits the AST at the moment, not just a string that is pasted into the source code at the location. So similar enough to copy/paste to get someone quickly started playing with code generation, but this key difference is needed to really understand it.
May 22 2017
On 22.05.2017 17:38, Adam D. Ruppe wrote:On Monday, 22 May 2017 at 15:26:26 UTC, Andrei Alexandrescu wrote:The grammar has: expression; as a statement. mixin(...) as an expression and mixin(...); as a statement Hence, mixin(...); is actually grammatically ambiguous and the behaviour of the compiler is somewhat arbitrary. The compiler could easily compensate for the ambiguity during semantic and not require the terminating semicolon when parsing the string of a mixin statement.Yah, didn't want to overload the article (or the discussion) with the expression/statement distinction. -- AndreiYeah, the details might be too much for a general audience (and I realize you know this, I'm commenting more for other readers who might be interested), but I do think this illustrates an important point for anyone who wants to use mixin: it is similar to, but not exactly like copy/pasting code into the source. mixin parses a piece of code, then pastes the *AST node*, not the source code, into the tree where the mixin is found. That's why the semicolon is required in the statement context - it needs a complete branch that actually fits the AST at the moment, not just a string that is pasted into the source code at the location. So similar enough to copy/paste to get someone quickly started playing with code generation, but this key difference is needed to really understand it.
May 22 2017
On Monday, 22 May 2017 at 15:05:24 UTC, Andrei Alexandrescu wrote:http://dlang.org/blog/2017/05/22/introspection-introspection-everywhere/ -- AndreiIt was really an entertaining and interesting post, thank you.
May 22 2017
On Monday, 22 May 2017 at 15:05:24 UTC, Andrei Alexandrescu wrote:http://dlang.org/blog/2017/05/22/introspection-introspection-everywhere/ -- AndreiWow, that was really good. Love to read more of your trip notes.
May 22 2017
On Monday, 22 May 2017 at 15:05:24 UTC, Andrei Alexandrescu wrote:http://dlang.org/blog/2017/05/22/introspection-introspection-everywhere/ -- AndreiA fun read! "(Late at night, I double checked. Mozilla’s CheckedInt is just as bad as I remembered. They do a division to test for multiplication overflow. Come on, put a line of assembler in there! Portability is worth a price, just not any price.)" Shocked: do you use assembly in Checked and cripple the optimizer?!?! Luckily, no. But LDC and GDC do create the `seto` instruction I think you were hinting at: https://godbolt.org/g/0jUhgs (LDC doesn't do as good as it could, https://github.com/ldc-developers/ldc/issues/2131) cheers, Johan
May 22 2017
On 22 May 2017 at 22:51, Johan Engelen via Digitalmars-d-announce <digitalmars-d-announce puremagic.com> wrote:On Monday, 22 May 2017 at 15:05:24 UTC, Andrei Alexandrescu wrote:So for LDC to be as good as GDC, you need to need to compile with -enable-ldc-amazing-feature-cross-module-inlining?http://dlang.org/blog/2017/05/22/introspection-introspection-everywhere/ -- AndreiA fun read! "(Late at night, I double checked. Mozilla’s CheckedInt is just as bad as I remembered. They do a division to test for multiplication overflow. Come on, put a line of assembler in there! Portability is worth a price, just not any price.)" Shocked: do you use assembly in Checked and cripple the optimizer?!?! Luckily, no. But LDC and GDC do create the `seto` instruction I think you were hinting at: https://godbolt.org/g/0jUhgs(LDC doesn't do as good as it could, https://github.com/ldc-developers/ldc/issues/2131)If you want a hint (though it's not my place to say), LLVM I'm told is a reasonably OK compiler, and any reasonably OK compiler should come with overflow intrinsics - try using them directly. (Turning off mild morning sarcasm). Iain.
May 23 2017
On Tuesday, 23 May 2017 at 08:18:26 UTC, Iain Buclaw wrote:If you want a hint (though it's not my place to say), LLVM I'm told is a reasonably OK compiler, and any reasonably OK compiler should come with overflow intrinsics - try using them directly.The intrinsics are exposed by LDC's druntime, they just need to be made use of: https://github.com/ldc-developers/druntime/blob/ldc/src/ldc/intrinsics.di#L446-L468
May 23 2017
On Tuesday, 23 May 2017 at 08:18:26 UTC, Iain Buclaw wrote:So for LDC to be as good as GDC, you need to need to compile with -enable-ldc-amazing-feature-cross-module-inlining?In this case, yep.If you want a hint (though it's not my place to say), LLVM I'm told is a reasonably OK compiler, and any reasonably OK compiler should come with overflow intrinsics - try using them directly.Pleasantly surprised that you think so highly of LDC and LLVM that you assume we are able to get the `seto` instruction in this case without using an overflow intrinsic. - Johan
May 23 2017
On 5/22/17 4:51 PM, Johan Engelen wrote:On Monday, 22 May 2017 at 15:05:24 UTC, Andrei Alexandrescu wrote:Thanks! Yes, seto is what I thought of - one way or another, it gets down to using a bit of machine-specific code to get there. I'll note that dmd does not generate seto (why?): https://goo.gl/nRjNMy. -- Andreihttp://dlang.org/blog/2017/05/22/introspection-introspection-everywhere/ -- AndreiA fun read! "(Late at night, I double checked. Mozilla’s CheckedInt is just as bad as I remembered. They do a division to test for multiplication overflow. Come on, put a line of assembler in there! Portability is worth a price, just not any price.)" Shocked: do you use assembly in Checked and cripple the optimizer?!?! Luckily, no. But LDC and GDC do create the `seto` instruction I think you were hinting at: https://godbolt.org/g/0jUhgs (LDC doesn't do as good as it could, https://github.com/ldc-developers/ldc/issues/2131)
May 23 2017
On Tuesday, 23 May 2017 at 13:27:42 UTC, Andrei Alexandrescu wrote:On 5/22/17 4:51 PM, Johan Engelen wrote:it does this overflow_flag = 0 op if (overflowed) { overflow_flag = 1; } this can in some circumstances be faster then using seto! If the inliner does a good enough job :)On Monday, 22 May 2017 at 15:05:24 UTC, Andrei Alexandrescu wrote:Thanks! Yes, seto is what I thought of - one way or another, it gets down to using a bit of machine-specific code to get there. I'll note that dmd does not generate seto (why?): https://goo.gl/nRjNMy. -- Andrei[...]A fun read! "(Late at night, I double checked. Mozilla’s CheckedInt is just as bad as I remembered. They do a division to test for multiplication overflow. Come on, put a line of assembler in there! Portability is worth a price, just not any price.)" Shocked: do you use assembly in Checked and cripple the optimizer?!?! Luckily, no. But LDC and GDC do create the `seto` instruction I think you were hinting at: https://godbolt.org/g/0jUhgs (LDC doesn't do as good as it could, https://github.com/ldc-developers/ldc/issues/2131)
May 23 2017
On 05/23/2017 09:42 AM, Stefan Koch wrote:On Tuesday, 23 May 2017 at 13:27:42 UTC, Andrei Alexandrescu wrote:Where did you see this pattern? Couldn't find it anywhere in core.checkedint. And how is "overflowed" tested?On 5/22/17 4:51 PM, Johan Engelen wrote:it does this overflow_flag = 0 op if (overflowed) { overflow_flag = 1; }On Monday, 22 May 2017 at 15:05:24 UTC, Andrei Alexandrescu wrote:Thanks! Yes, seto is what I thought of - one way or another, it gets down to using a bit of machine-specific code to get there. I'll note that dmd does not generate seto (why?): https://goo.gl/nRjNMy. -- Andrei[...]A fun read! "(Late at night, I double checked. Mozilla’s CheckedInt is just as bad as I remembered. They do a division to test for multiplication overflow. Come on, put a line of assembler in there! Portability is worth a price, just not any price.)" Shocked: do you use assembly in Checked and cripple the optimizer?!?! Luckily, no. But LDC and GDC do create the `seto` instruction I think you were hinting at: https://godbolt.org/g/0jUhgs (LDC doesn't do as good as it could, https://github.com/ldc-developers/ldc/issues/2131)this can in some circumstances be faster then using seto! If the inliner does a good enough job :)The code in core.checkedint is conservative: pragma(inline, true) ulong mulu(ulong x, ulong y, ref bool overflow) { ulong r = x * y; if (x && (r / x) != y) overflow = true; return r; } The compiler is supposed to detect the pattern and generate optimal code. Andrei
May 23 2017
On Tuesday, 23 May 2017 at 15:19:39 UTC, Andrei Alexandrescu wrote:On 05/23/2017 09:42 AM, Stefan Koch wrote:That code is written nowhere. It was my hand translation of the asm. (And it was wrong) The compiler does indeed seem to optimize the code somewhat. Although the generated asm still looks wired. http://asm.dlang.org/#compilers:!((compiler:dmd_nightly,options:'-dip25+-O+-release+-inline+-m32',source:'import+core.checkedint%3B%0A%0Aalias+T+%3D+ulong%3B%0Aextern+(C)+T+foo(uint+x,+uint+y,+ref+bool+overflow)%0A%7B%0A+++return+mulu(x,+y,+overflow)%3B%0A%7D%0A')),filterAsm:(binary:!t,intel:!t),version:3On Tuesday, 23 May 2017 at 13:27:42 UTC, Andrei Alexandrescu wrote:Where did you see this pattern? Couldn't find it anywhere in core.checkedint. And how is "overflowed" tested?On 5/22/17 4:51 PM, Johan Engelen wrote:it does this overflow_flag = 0 op if (overflowed) { overflow_flag = 1; }[...]Thanks! Yes, seto is what I thought of - one way or another, it gets down to using a bit of machine-specific code to get there. I'll note that dmd does not generate seto (why?): https://goo.gl/nRjNMy. -- Andreithis can in some circumstances be faster then using seto! If the inliner does a good enough job :)The code in core.checkedint is conservative: pragma(inline, true) ulong mulu(ulong x, ulong y, ref bool overflow) { ulong r = x * y; if (x && (r / x) != y) overflow = true; return r; } The compiler is supposed to detect the pattern and generate optimal code. Andrei
May 23 2017
On 05/23/2017 11:37 AM, Stefan Koch wrote:The compiler does indeed seem to optimize the code somewhat. Although the generated asm still looks wired. http://asm.dlang.org/#compilers:!((compiler:dmd_nightly,options:'-dip25+-O+-release+-inline+-m32',source:'import+core.checkedint%3B%0A%0Aalias+T+%3D+ulong%3B%0Aextern+(C)+T+foo(uint+x,+uint+y,+ref+bool+overflow)%0A%7B%0A+++return+mulu(x,+y,+overflow)%3B%0A%7D%0A')),filterAsm:(binary:!t intel:!t),version:3That call enters a different overload: pragma(inline, true) uint mulu(uint x, uint y, ref bool overflow) { ulong r = ulong(x) * ulong(y); if (r > uint.max) overflow = true; return cast(uint)r; } which is of efficiency comparable with code using seto. I'm not too worried about that. https://goo.gl/eRXUpr is of interest. Andrei
May 23 2017
On Tuesday, 23 May 2017 at 15:43:24 UTC, Andrei Alexandrescu wrote:On 05/23/2017 11:37 AM, Stefan Koch wrote:Well .... Since core.checkedint is in druntime, we _could_ detected the checking operations and generate better code for them. But right now, I am convinced it is worth the effort.The compiler does indeed seem to optimize the code somewhat. Although the generated asm still looks wired. http://asm.dlang.org/#compilers:!((compiler:dmd_nightly,options:'-dip25+-O+-release+-inline+-m32',source:'import+core.checkedint%3B%0A%0Aalias+T+%3D+ulong%3B%0Aextern+(C)+T+foo(uint+x,+uint+y,+ref+bool+overflow)%0A%7B%0A+++return+mulu(x,+y,+overflow)%3B%0A%7D%0A')),filterAsm:(binary:!t,intel:!t),version:3That call enters a different overload: pragma(inline, true) uint mulu(uint x, uint y, ref bool overflow) { ulong r = ulong(x) * ulong(y); if (r > uint.max) overflow = true; return cast(uint)r; } which is of efficiency comparable with code using seto. I'm not too worried about that. https://goo.gl/eRXUpr is of interest. Andrei
May 23 2017
On Tuesday, 23 May 2017 at 15:54:42 UTC, Stefan Koch wrote:Well .... Since core.checkedint is in druntime, we _could_ detected the checking operations and generate better code for them. But right now, I am [NOT] convinced it is worth the effort.
May 23 2017
On Tuesday, 23 May 2017 at 15:37:39 UTC, Stefan Koch wrote:The compiler does indeed seem to optimize the code somewhat. Although the generated asm still looks wired. http://asm.dlang.org/#compilers:!((compiler:dmd_nightly,options:'-dip25+-O+-release+-inline+-m32',source:'import+core.checkedint%3B%0A%0Aalias+T+%3D+ulong%3B%0Aextern+(C)+T+foo(uint+x,+uint+y,+ref+bool+overflow)%0A%7B%0A+++return+mulu(x,+y,+overflow)%3B%0A%7D%0A')),filterAsm:(binary:!t,intel:!t),version:3The jbe (jump-below-equal) does check the overflow flag (and redundantly the zero-flag) here and sets the bool which represents overflow to one.
May 23 2017
On Monday, 22 May 2017 at 15:05:24 UTC, Andrei Alexandrescu wrote:http://dlang.org/blog/2017/05/22/introspection-introspection-everywhere/ -- AndreiNow that you are back and could take some time to think this over, would you say your trip will influence how you see D's and the D community evolution? In what way?
May 22 2017
On 5/22/17 6:53 PM, cym13 wrote:On Monday, 22 May 2017 at 15:05:24 UTC, Andrei Alexandrescu wrote:In several ways. To an extent it was a confirmation of things already known: We do well on things we focus on (language core, standard library, quality of implementation), and less so on things we focus less on (soft skills, community building, leadership). I got a clearer notion that the latter is an important ingredient. One thing that several of those people emphasized is we need to improve leadership and decision. "You are trying to do democracy and democracy doesn't work here" (by a successful serial entrepreneur). Walter and I have implicitly fostered a kind of meritocracy whereby it's the point/argument that matters. It should be meritocracy of the person - good proven contributors have more weight and new people must prove themselves before aspiring to influence. Historically, anyone with any level of involvement with D could hop on the forum and engage the community and its leadership in debate. Subsequently, they'd be frustrated with the ensuing disagreement and also get a sense of cheapness - if I got to carry this unsatisfactory debate with the language creator himself, what kind of an operation is this? Since anything can be debated by anyone, everything gets debated by everyone. Anyone can question any decision at any time and expect a response. It's the moral equivalent of everyone in a 5000-person company building can expect to stop the CEO on the way to his/her office and engage them in a conversation of any length. The net consequence is slower progress. Where we need to be is fostering strong contributions and contributors. The strength of one's say is multiplied by his/her contributions (and that simply means pulled PRs, successful DIPs - not "won" debates). Many successful OSS projects have been quoted as implementing this policy successfully. Every person in the room took a significant fraction of the meeting time to tear me a new one about dub and http://code.dlang.org. Each in a different place :o). I got to the point where I consider every day spent with code.lang.org just sitting there with no ranking, no statistics, no voting, no notion of what are the good projects to look at - every such day is a liability for us. We really need to improve on that, it is of utmost importance and urgency. Martin said he'll be on that in June, but we could really use more hands on deck there. Documentation of vibe.d was also mentioned as an important problem. More precisely, it's the contrast between the quality of the project and that of the documentation - someone said his team ended up with a different (and arguably inferior) product that was better documented. Literally they had the same engineer try each for a day. Reportedly it was very difficult to even figure whether vibe.d does some specific thing, let alone tutorials and examples of how to do it. Back to community: Successful OSS projects have a hierarchy and follow formalized paths and processes for communicating up and down. People are willing to work/wait for months on a proposal because they have a sense of process and a confidence their proposal, if properly done, will get a fair shake. These are good ideas to follow (and indeed I got more confirmation that investing in our new DIP process is a good thing to do). We need to improve the collaboration and tone in the forums and github. (I was amazed at how well these business and community leaders knew who's who in our community.) We can only assume in the future people will peruse our forums/github to decide whether to use D in their enterprise. We need to improve on the current disposition toward fruitless debate not concluding in decision making. What hurts us the most and stands like a sore thumb is the occasional use of abusive language. We need to stop that. Many of these things I had a good sense of before entering the meeting, and was on the way toward improving on them. The meeting provided a strong confirmation of the importance of these matters, and good ideas toward doing better. Andreihttp://dlang.org/blog/2017/05/22/introspection-introspection-everywhere/ -- AndreiNow that you are back and could take some time to think this over, would you say your trip will influence how you see D's and the D community evolution? In what way?
May 26 2017
On Friday, 26 May 2017 at 11:32:21 UTC, Andrei Alexandrescu wrote:What hurts us the most and stands like a sore thumb is the occasional use of abusive language. We need to stop that.Interesting. Are there any examples you're willing to provide? It seems to me that stuff like this is immediately condemned, but only if it comes from somebody who is new or doesn't post here often. There's been a few cases I can think of where a regular contributor/frequent poster said something that I'd consider "abusive language" and it's allowed to slide without (public) reprimand or apology, but again it's not completely clear what you have in mind when you say "abusive language".
May 26 2017
On Friday, 26 May 2017 at 11:32:21 UTC, Andrei Alexandrescu wrote:One thing that several of those people emphasized is we need to improve leadership and decision. "You are trying to do democracy and democracy doesn't work here" (by a successful serial entrepreneur).I'm pretty sure nobody actually involved with D would call it a democracy. We may get to say our piece, but ultimately the core team decides.Walter and I have implicitly fostered a kind of meritocracy whereby it's the point/argument that matters.That's because that's all that matters. It is what almost every worthwhile organization aspires to, though very few get there. Doing anything else would be a mistake.It should be meritocracy of the person - good proven contributors have more weight and new people must prove themselves before aspiring to influence.Certainly you can weight their opinion more because they know the code better, but otherwise it is precisely this personal influence taking precedence over the particular argument that sinks most organizations.Historically, anyone with any level of involvement with D could hop on the forum and engage the community and its leadership in debate. Subsequently, they'd be frustrated with the ensuing disagreement and also get a sense of cheapness - if I got to carry this unsatisfactory debate with the language creator himself, what kind of an operation is this?Or they were inspired that their feedback was taken into account, if not followed, and decide to pitch in.Since anything can be debated by anyone, everything gets debated by everyone. Anyone can question any decision at any time and expect a response. It's the moral equivalent of everyone in a 5000-person company building can expect to stop the CEO on the way to his/her office and engage them in a conversation of any length. The net consequence is slower progress.If you're going in the wrong direction, slower progress is to be lauded. I think you're overly critical of the culture of debate that is a part of open source and especially this project. I know I decided to pitch in after years of lurking in the newsgroup, I doubt I'm the only one. Of course, like anything, debate can be overdone and you're probably right that it has been at times here. But an open source project is a fundamentally different thing than a startup, it requires much more community involvement and deliberation. I recommend reading this chapter from this book on open source development: "Public discussion generally takes longer to make a decision than a proprietary development group does, but because the diversity of the viewpoints is greater for an open-source effort the resulting decision is likely to be of higher quality. This can translate into a shorter overall development cycle, because subsequent work will probably not need to be discarded because the real issues came up after, rather than during, the discussion period." http://dreamsongs.com/IHE/IHE-54.html#pgfId-956812Where we need to be is fostering strong contributions and contributors. The strength of one's say is multiplied by his/her contributions (and that simply means pulled PRs, successful DIPs - not "won" debates). Many successful OSS projects have been quoted as implementing this policy successfully.There are different ways to contribute. One may not have time to work on a bunch of PRs/DIPs or may be better suited to discussion of the technical design. I agree that we need more people contributing rather than just talking, but I don't think this is the way to do it.Every person in the room took a significant fraction of the meeting time to tear me a new one about dub and http://code.dlang.org. Each in a different place :o). I got to the point where I consider every day spent with code.lang.org just sitting there with no ranking, no statistics, no voting, no notion of what are the good projects to look at - every such day is a liability for us. We really need to improve on that, it is of utmost importance and urgency. Martin said he'll be on that in June, but we could really use more hands on deck there.Yeah, I mentioned this need before too.Documentation of vibe.d was also mentioned as an important problem. More precisely, it's the contrast between the quality of the project and that of the documentation - someone said his team ended up with a different (and arguably inferior) product that was better documented. Literally they had the same engineer try each for a day. Reportedly it was very difficult to even figure whether vibe.d does some specific thing, let alone tutorials and examples of how to do it.Eh, documentation is going to be sparse for a non-corporate OSS project. If they're building products with vibe.d, presumably they can throw some consulting dollars Sonke's way and get him to help.Back to community: Successful OSS projects have a hierarchy and follow formalized paths and processes for communicating up and down. People are willing to work/wait for months on a proposal because they have a sense of process and a confidence their proposal, if properly done, will get a fair shake. These are good ideas to follow (and indeed I got more confirmation that investing in our new DIP process is a good thing to do).Rather, it is a blend, some hierarchy on top of a wide herd of cats. ;) But sure, improving the process will help.We need to improve the collaboration and tone in the forums and github. (I was amazed at how well these business and community leaders knew who's who in our community.) We can only assume in the future people will peruse our forums/github to decide whether to use D in their enterprise. We need to improve on the current disposition toward fruitless debate not concluding in decision making.As I said above, even "fruitless" debate can help, but like anything else, it can be overdone.What hurts us the most and stands like a sore thumb is the occasional use of abusive language. We need to stop that.Any large community is going to have it, tough to police.Many of these things I had a good sense of before entering the meeting, and was on the way toward improving on them. The meeting provided a strong confirmation of the importance of these matters, and good ideas toward doing better.I'm sure there was some good advice, but I'd caution that these entrepreneurs were not running an open source project, which requires a much lighter touch.
May 26 2017
On Friday, 26 May 2017 at 16:55:44 UTC, Joakim wrote:On Friday, 26 May 2017 at 11:32:21 UTC, Andrei Alexandrescu wrote:A reasonable presumption, but I do not know if Sonke himself has capacity for such as he seems quite busy. So it might be worth thinking about alternative ways to move towards better docs for vibe.d (in collaboration with Sonke).Documentation of vibe.d was also mentioned as an important problem. More precisely, it's the contrast between the quality of the project and that of the documentation - someone said his team ended up with a different (and arguably inferior) product that was better documented. Literally they had the same engineer try each for a day. Reportedly it was very difficult to even figure whether vibe.d does some specific thing, let alone tutorials and examples of how to do it.Eh, documentation is going to be sparse for a non-corporate OSS project. If they're building products with vibe.d, presumably they can throw some consulting dollars Sonke's way and get him to help.
May 27 2017
On Friday, 26 May 2017 at 16:55:44 UTC, Joakim wrote:On Friday, 26 May 2017 at 11:32:21 UTC, Andrei Alexandrescu wrote:I don't see any evidence of this statement being true. Unfortunately.Walter and I have implicitly fostered a kind of meritocracy whereby it's the point/argument that matters.That's because that's all that matters. It is what almost every worthwhile organization aspires to, though very few get there. Doing anything else would be a mistake.True.Of course, like anything, debate can be overdone and you're probably right that it has been at times here. But an open source project is a fundamentally different thing than a startup, it requires much more community involvement and deliberation.Right, feedback and arguments about semantics are good, feedback on usability or integration problems are good. What is not good is lifting out design-issues into small packages and trying to fix them one-by-one with a strong emphasis on implementation cost. Democracy is great for building big things if the vision is clear and shared. Democracy is great for pointing out where the systemic problems are. Democracy is great for adapting something that is complete to new use cases. Democracy is not great for innovation, designing new solution, creating good UI experiences or even engineering... So, why-oh-why so much effort on writing DIPs on stuff like pre/post condition syntax? This has to be designed into a whole and would be better done by a small team of designers taking the _problems_ into account consulting experts on the specifics of the area. But if you want expertise you actually have to be interested in learning about that topic instead of defending what is there already. Anyway, if people sense that semantic changes are too hard to get through I guess they will aim for something that is on the surface (like "body"). As a symbolic act to see if change is at all possible. But it is rather inconsequential and rather inefficient use of resources. Which will happen to any project without a list of priorities.
May 27 2017
On Saturday, 27 May 2017 at 10:50:34 UTC, Ola Fosheim Grøstad wrote:Anyway, if people sense that semantic changes are too hard to get through I guess they will aim for something that is on the surface (like "body"). As a symbolic act to see if change is at all possible.Don't mistake my intentions. I proposed removing `body` because not being able to use it as a symbol name is often complained about on the forums, because it is a small, manageable and understandable change, because it is a net (admittedly tiny) improvement to the language, and because I wanted to write a "practice" DIP to familiarize myself with the process in the event that I decide to write a larger one in the future (such as fixing up and resubmitting Kenji's tuple DIP).
May 27 2017
On Saturday, 27 May 2017 at 20:21:56 UTC, Meta wrote:On Saturday, 27 May 2017 at 10:50:34 UTC, Ola Fosheim Grøstad wrote: Don't mistake my intentions. I proposed removing `body` because not being able to use it as a symbol name is often complained about on the forums, because it is a small, manageable and understandable change, because it is a net (admittedly tiny) improvement to the language, and because I wanted to write aSure, there are many small improvements that could be made, but this is a lot of bureaucracy for the 15 minutes it takes to turn it into a contextual keyword...
May 27 2017
On Friday, 26 May 2017 at 11:32:21 UTC, Andrei Alexandrescu wrote:Every person in the room took a significant fraction of the meeting time to tear me a new one about dub and http://code.dlang.org. Each in a different placeJust a couple days ago, people asked me if my libs were on dub... this was annoying because they shouldn't have to ask *me*, they should just ask the website, but even basic search and listing is broken. I've complained about this before... https://github.com/dlang/dub-registry/issues/123 in Sept 2015. I'm not a dub user, so I don't particularly care to maintain it myself... but does NOBODY care? It is also embarrassingly slow to even load the code.dlang.org homepage.Documentation of vibe.d was also mentioned as an important problem.Documentation in general is a big problem.
May 26 2017
On Friday, 26 May 2017 at 11:32:21 UTC, Andrei Alexandrescu wrote:On 5/22/17 6:53 PM, cym13 wrote: One thing that several of those people emphasized is we need to improve leadership and decision. "You are trying to do democracy and democracy doesn't work here" (by a successful serial entrepreneur). Walter and I have implicitly fostered a kind of meritocracy whereby it's the point/argument that matters. It should be meritocracy of the person - good proven contributors have more weight and new people must prove themselves before aspiring to influence. Historically, anyone with any level of involvement with D could hop on the forum and engage the community and its leadership in debate. Subsequently, they'd be frustrated with the ensuing disagreement and also get a sense of cheapness - if I got to carry this unsatisfactory debate with the language creator himself, what kind of an operation is this? Since anything can be debated by anyone, everything gets debated by everyone. Anyone can question any decision at any time and expect a response. It's the moral equivalent of everyone in a 5000-person company building can expect to stop the CEO on the way to his/her office and engage them in a conversation of any length. The net consequence is slower progress. Where we need to be is fostering strong contributions and contributors. The strength of one's say is multiplied by his/her contributions (and that simply means pulled PRs, successful DIPs - not "won" debates).I strongly suggest to have a clear and transparent procedure to collect impressions and suggestion from *commercials* that are *actually using* the language in production, and separate those from other things to discuss. Guru meditation: try not to loose talented contributors involved... Dicebot, Kenji, Bearofile... what's happened, and what can be done on this front? Sincerely /Paolo
May 26 2017
On Monday, 22 May 2017 at 15:05:24 UTC, Andrei Alexandrescu wrote:http://dlang.org/blog/2017/05/22/introspection-introspection-everywhere/ -- AndreiInteresting read. You're my brother from another mother. :)
May 23 2017
On Monday, 22 May 2017 at 15:05:24 UTC, Andrei Alexandrescu wrote:http://dlang.org/blog/2017/05/22/introspection-introspection-everywhere/ -- AndreiThat was a great read, thanks! At the end, you mention a successful serial entrepreneur who counsels pursuing the great rather than the good ideas being advanced in the D community. Did he happen to mention which ideas were great, and which just good?
May 23 2017
On 2017-05-22 17:05, Andrei Alexandrescu wrote:http://dlang.org/blog/2017/05/22/introspection-introspection-everywhere/ -- AndreiAbout the custom attributes that are mentioned, like "has acquired a lock" attribute. This would be a perfect candidate for a UDA and using the compiler as a library to implement a domain specific checker for this feature. When the regular compiler sees this attribute it has no meaning to the compiler. But when running the custom checker it will perform some additional checks to verify that the code behaves according to the specific domain requirements. Without knowing any details, it might be possible to implement similar checks today by modifying druntime and replace the RTInfo template with a custom implementation that performs some additional checks. -- /Jacob Carlborg
May 23 2017