digitalmars.D - Jonathan Blow demo #2
- bearophile (23/23) Dec 11 2014 Jonathan Blow, Programming Language Demo #2:
- Walter Bright (6/20) Dec 11 2014 D already does this. It's been said before, Jonathan is reinventing D, p...
- bearophile (11/29) Dec 11 2014 D doesn't do that, not even one of those three :-) I'm willing to
- bearophile (11/29) Dec 11 2014 D doesn't do that, not even one of those three :-) I'm willing to
- Walter Bright (22/31) Dec 11 2014 I beg to differ:
- bearophile (33/66) Dec 12 2014 This misses the point.
- Martin Nowak (12/19) Dec 12 2014 D is a language with C-like syntax and static typing. It pragmatically
- bearophile (10/14) Dec 12 2014 Martin Nowak:
- bearophile (3/10) Dec 12 2014 https://issues.dlang.org/show_bug.cgi?id=13859
- Andrei Alexandrescu (2/14) Dec 22 2014 There should be a minimallyInitializedAlloc, too. -- Andrei
- Martin Nowak (10/19) Dec 12 2014 Did you just volunteer to make a pull :)?
- Walter Bright (2/19) Dec 11 2014 I don't see support for the notion of a ushort index.
- bearophile (11/12) Dec 12 2014 A ushort index is not useful, I agree. That's why I have said my
- Walter Bright (3/6) Dec 12 2014 All you have to do is define your own array type as a struct wrapper aro...
- Martin Nowak (3/5) Dec 12 2014 What does that mean, it's been said?
- Tobias Pankrath (3/10) Dec 12 2014 Actually he dismisses D in his first video for being too much
- Martin Nowak (18/20) Dec 12 2014 What do you usually do when learning a new programming language?
- Joakim (3/9) Dec 12 2014 He means he said it before: :)
- ponce (4/23) Dec 12 2014 I feel like he is a very capable programmer that simply want to
- Walter Bright (3/9) Dec 12 2014 I've emailed him about it. He is having a great time designing his own l...
- Chris (16/39) Dec 12 2014 It would be nice, if you gave a real world example and explained
https://www.youtube.com/watch?v=-UPFH0eWHEI https://www.reddit.com/r/programming/comments/2oyg5e/jonathan_blow_dec_10_programming_language_demo_2/ ------------------ He shows a way to not initialize a struct that has specified values. In D it could be: struct Vec { float x = 1, y = 5, z = 9; } auto v = new Vec(void); auto av = new Vec[10] = void; auto av2 = new Vec[10] = Vec(0, 0, 0); ------------------ He suggests a way to optionally specify the type of array indexes. In a D-like syntax it could be: enum N = 10; float[N : ushort] a1; float[: ushort] a2; My point of having this in D is to optionally increase strictness of the array indexes, to avoid some bugs when you handle many arrays. ------------------ He suggests something like a noinline attribute. Bye, bearophile
Dec 11 2014
On 12/11/2014 8:57 AM, bearophile wrote:He shows a way to not initialize a struct that has specified values. In D it could be: struct Vec { float x = 1, y = 5, z = 9; } auto v = new Vec(void); auto av = new Vec[10] = void; auto av2 = new Vec[10] = Vec(0, 0, 0);D already does this. It's been said before, Jonathan is reinventing D, piece by piece :-)He suggests a way to optionally specify the type of array indexes. In a D-like syntax it could be: enum N = 10; float[N : ushort] a1; float[: ushort] a2;I don't see any point to this.My point of having this in D is to optionally increase strictness of the array indexes, to avoid some bugs when you handle many arrays.Doesn't make sense to me.He suggests something like a noinline attribute.It'll go into D in some form. It's an old suggestion.
Dec 11 2014
Walter Bright:D doesn't do that, not even one of those three :-) I'm willing to open one or two ERs later on those things. At best in Phobos we have a workaround for the second of those three ideas: auto av = minimallyInitializedArray(Vec, 10);struct Vec { float x = 1, y = 5, z = 9; } auto v = new Vec(void); auto av = new Vec[10] = void; auto av2 = new Vec[10] = Vec(0, 0, 0);D already does this.I explained the topic here (note this not exactly the same thing discussed by Jonathan Blow: http://forum.dlang.org/thread/qilkslpfwvkbqlradhit forum.dlang.org Bye, bearophileHe suggests a way to optionally specify the type of array indexes. In a D-like syntax it could be: enum N = 10; float[N : ushort] a1; float[: ushort] a2;I don't see any point to this.My point of having this in D is to optionally increase strictness of the array indexes, to avoid some bugs when you handle many arrays.Doesn't make sense to me.
Dec 11 2014
Walter Bright:D doesn't do that, not even one of those three :-) I'm willing to open one or two ERs later on those things. At best in Phobos we have a workaround for the second of those three ideas: auto av = minimallyInitializedArray(Vec, 10);struct Vec { float x = 1, y = 5, z = 9; } auto v = new Vec(void); auto av = new Vec[10] = void; auto av2 = new Vec[10] = Vec(0, 0, 0);D already does this.I explained the topic here (note this not exactly the same thing discussed by Jonathan Blow: http://forum.dlang.org/thread/qilkslpfwvkbqlradhit forum.dlang.org Bye, bearophileHe suggests a way to optionally specify the type of array indexes. In a D-like syntax it could be: enum N = 10; float[N : ushort] a1; float[: ushort] a2;I don't see any point to this.My point of having this in D is to optionally increase strictness of the array indexes, to avoid some bugs when you handle many arrays.Doesn't make sense to me.
Dec 11 2014
On 12/11/2014 1:49 PM, bearophile wrote:Walter Bright:I beg to differ: struct Vec { float x = 1, y = 5, z = 9; } void main() { { Vec v; assert(v.x == 1 && v.y == 5 && v.z == 9); } { auto v = new Vec(); assert(v.x == 1 && v.y == 5 && v.z == 9); } { auto v = cast(Vec*)malloc(Vec.sizeof * 10)[0..10]; } { auto v = new Vec[10]; v[] = Vec(0,0,0); assert(v[1].x == 0 && v[1].y == 0 && v[1].z == 0); } }D doesn't do that, not even one of those three :-)struct Vec { float x = 1, y = 5, z = 9; } auto v = new Vec(void); auto av = new Vec[10] = void; auto av2 = new Vec[10] = Vec(0, 0, 0);D already does this.
Dec 11 2014
Walter Bright:On 12/11/2014 1:49 PM, bearophile wrote:This is not relevant in this discussion.Walter Bright:I beg to differ: struct Vec { float x = 1, y = 5, z = 9; } void main() { { Vec v; assert(v.x == 1 && v.y == 5 && v.z == 9); }D doesn't do that, not even one of those three :-)struct Vec { float x = 1, y = 5, z = 9; } auto v = new Vec(void); auto av = new Vec[10] = void; auto av2 = new Vec[10] = Vec(0, 0, 0);D already does this.{ auto v = new Vec(); assert(v.x == 1 && v.y == 5 && v.z == 9); }This misses the point. This code: struct Vec { float x = 1, y = 5, z = 9; } auto v = new Vec(void); Means having defined a struct with explicitly statically defined fields, and then allocate one of it on the heap without initializing its fields. It's equivalent to: auto v = cast(Vec*)malloc(Vec.sizeof); Also written like this if you have written a little function (missing in Phobos) that makes your code more DRY and hides the cast in a probably trusted function: auto v = cMalloc!Vec; Similar code can be written if you want to use the GC heap.{ auto v = cast(Vec*)malloc(Vec.sizeof * 10)[0..10]; }This is right, but in D it's often better to use std.array.uninitializedArray to do that.{ auto v = new Vec[10]; v[] = Vec(0,0,0); assert(v[1].x == 0 && v[1].y == 0 && v[1].z == 0); } }This causes double initialization of the array, and I can't be sure the optimizer removes the first one (dmd doesn't remove it, and until now ldc2 doesn't remove it). To solve this problem with Phobos code it can be added another std.array function like: auto av2 = initializedArray!(Vec[])(10, Vec(0, 0, 0)); Beside constants, initializedArray also should accept a pure function that takes as input the index (this request is in Bugzilla). So all three patterns can be realized using functions, so there's no need to change the D language to do all three things. But are some of those patterns common enough to deserve to be supported by the language? Bye, bearophile
Dec 12 2014
On 12/12/2014 10:54 AM, bearophile wrote:This code: struct Vec { float x = 1, y = 5, z = 9; } auto v = new Vec(void); Means having defined a struct with explicitly statically defined fields, and then allocate one of it on the heap without initializing its fields. It's equivalent to: auto v = cast(Vec*)malloc(Vec.sizeof);D is a language with C-like syntax and static typing. It pragmatically combines efficiency, control, and modeling power, with ~~~>safety<~~ and programmer productivity. Unsafe stuff shouldn't be simple to type and why would you need language support for a 1-liner? ref T uninitializedAlloc(T)() system pure nothrow { return *cast(T*)GC.malloc(T.sizeof); } The only argument I can see is the asymmetry to Vec v = void;
Dec 12 2014
Martin Nowak: OK, I think that it will be enough to add a Phobos function like this (what's the right Phobos module to put it?) (why isn't this trusted?) (why isn't this returning a T*?):ref T uninitializedAlloc(T)() system pure nothrow { return *cast(T*)GC.malloc(T.sizeof); }Plus these one of two Phobos functions: https://d.puremagic.com/issues/show_bug.cgi?id=8280 (But the request about optionally strongly typed array indexes is still active). Bye, bearophile
Dec 12 2014
OK, I think that it will be enough to add a Phobos function like this (what's the right Phobos module to put it?) (why isn't this trusted?) (why isn't this returning a T*?):https://issues.dlang.org/show_bug.cgi?id=13859 Bye, bearophileref T uninitializedAlloc(T)() system pure nothrow { return *cast(T*)GC.malloc(T.sizeof); }
Dec 12 2014
On 12/12/14 2:47 AM, bearophile wrote:There should be a minimallyInitializedAlloc, too. -- AndreiOK, I think that it will be enough to add a Phobos function like this (what's the right Phobos module to put it?) (why isn't this trusted?) (why isn't this returning a T*?):https://issues.dlang.org/show_bug.cgi?id=13859 Bye, bearophileref T uninitializedAlloc(T)() system pure nothrow { return *cast(T*)GC.malloc(T.sizeof); }
Dec 22 2014
On 12/12/2014 11:42 AM, bearophile wrote:Martin Nowak: OK, I think that it will be enough to add a Phobos function like this (what's the right Phobos module to put it?)Did you just volunteer to make a pull :)? As usual, having a problem to find the right place myself. Would put it close to uninitializedFill which lives in std.algorithm, yuck. BTW, if anyone knows where initOnce should go, I'd be glad to hear. https://github.com/D-Programming-Language/phobos/pull/2664#issuecomment-66242464(why isn't this trusted?)Can't be trusted because it returns a heap allocated struct that might contain uninitialized pointers. You could be more precise and make an overload for plain value types.(why isn't this returning a T*?):Yeah, that should return a pointer.ref T uninitializedAlloc(T)() system pure nothrow { return *cast(T*)GC.malloc(T.sizeof); }
Dec 12 2014
On 12/11/2014 1:49 PM, bearophile wrote:I don't see support for the notion of a ushort index.I explained the topic here (note this not exactly the same thing discussed by Jonathan Blow: http://forum.dlang.org/thread/qilkslpfwvkbqlradhit forum.dlang.orgHe suggests a way to optionally specify the type of array indexes. In a D-like syntax it could be: enum N = 10; float[N : ushort] a1; float[: ushort] a2;I don't see any point to this.My point of having this in D is to optionally increase strictness of the array indexes, to avoid some bugs when you handle many arrays.Doesn't make sense to me.
Dec 11 2014
Walter Bright:I don't see support for the notion of a ushort index.A ushort index is not useful, I agree. That's why I have said my proposal is a little different from Jonathan Blow idea. My point was to optionally define built-in arrays with a strongly typed indexing (where the strongly typed index can be defined with a better version of Typedef!()), as I've tried to explain in that post. If you have questions please ask and I'll try to explain again (at worst Monday). Bye, bearophile
Dec 12 2014
On 12/12/2014 1:58 AM, bearophile wrote:My point was to optionally define built-in arrays with a strongly typed indexing (where the strongly typed index can be defined with a better version of Typedef!()), as I've tried to explain in that post.All you have to do is define your own array type as a struct wrapper around an array, then overload the [] operator. No need for new language features.
Dec 12 2014
On 12/11/2014 10:34 PM, Walter Bright wrote:D already does this. It's been said before, Jonathan is reinventing D, piece by piece :-)What does that mean, it's been said? Didn't anyone actually try to tell him about D?
Dec 12 2014
On Friday, 12 December 2014 at 11:58:04 UTC, Martin Nowak wrote:On 12/11/2014 10:34 PM, Walter Bright wrote:Actually he dismisses D in his first video for being too much like C++.D already does this. It's been said before, Jonathan is reinventing D, piece by piece :-)What does that mean, it's been said? Didn't anyone actually try to tell him about D?
Dec 12 2014
On 12/12/2014 01:15 PM, Tobias Pankrath wrote:Actually he dismisses D in his first video for being too much like C++.What do you usually do when learning a new programming language? Right, write a small program. Apparently he ruled out all 3 candidates by looking at the front page of their website, so clearly this guy wants to write his own "personal perfect" programming language, be it for fun or for fame. I think every good C++ programmer ends up in this situation at some point and using an existing language will always feel like a compromise. And who wouldn't have thought of writing a better D ;). Anyhow, he seems to be a somewhat smart guy and we could really make use of one that has enough time to write a compiler. Maybe we could talk him into giving D a more in-depth look. He might have missed the pragmatic in "It pragmatically combines efficiency, control, and modeling power, with safety and programmer productivity.". https://www.youtube.com/watch?v=TH9VCN6UkyQ#t=1626 But to understand how much more productive D is in comparison to C++, he'd have to actually code something. -Martin
Dec 12 2014
On Friday, 12 December 2014 at 11:58:04 UTC, Martin Nowak wrote:On 12/11/2014 10:34 PM, Walter Bright wrote:He means he said it before: :) http://forum.dlang.org/post/m33eun$1ki4$1 digitalmars.comD already does this. It's been said before, Jonathan is reinventing D, piece by piece :-)What does that mean, it's been said?
Dec 12 2014
On Friday, 12 December 2014 at 11:58:04 UTC, Martin Nowak wrote:On 12/11/2014 10:34 PM, Walter Bright wrote:I did in a quite long e-mail. Here is his answer:D already does this. It's been said before, Jonathan is reinventing D, piece by piece :-)What does that mean, it's been said? Didn't anyone actually try to tell him about D?I agree that D is a much better language than C++ but I don't believe it is quite the right thing. I am going to keep doing talks, and the further talks will go into more language specifics, and I think you'll see that eventually it shapes up into a pretty different language.That said, I do think D has a lot of value, and if the world switched over to D from C++ tonight, I think everyone would be a lot better off.I am well aware of how much work it is to make a new language and get it adopted. It is a big job for sure! But, part of my goal is to rally the big game development community to do that big job.I feel like he is a very capable programmer that simply want to do his thing, like many of us do :)
Dec 12 2014
On 12/12/2014 3:57 AM, Martin Nowak wrote:On 12/11/2014 10:34 PM, Walter Bright wrote:I've emailed him about it. He is having a great time designing his own language, though, and of course I can understand that :-)D already does this. It's been said before, Jonathan is reinventing D, piece by piece :-)What does that mean, it's been said? Didn't anyone actually try to tell him about D?
Dec 12 2014
On Thursday, 11 December 2014 at 16:57:35 UTC, bearophile wrote:https://www.youtube.com/watch?v=-UPFH0eWHEI https://www.reddit.com/r/programming/comments/2oyg5e/jonathan_blow_dec_10_programming_language_demo_2/ ------------------ He shows a way to not initialize a struct that has specified values. In D it could be: struct Vec { float x = 1, y = 5, z = 9; } auto v = new Vec(void); auto av = new Vec[10] = void; auto av2 = new Vec[10] = Vec(0, 0, 0); ------------------ He suggests a way to optionally specify the type of array indexes. In a D-like syntax it could be: enum N = 10; float[N : ushort] a1; float[: ushort] a2; My point of having this in D is to optionally increase strictness of the array indexes, to avoid some bugs when you handle many arrays. ------------------ He suggests something like a noinline attribute. Bye, bearophileIt would be nice, if you gave a real world example and explained why you need this feature and whether the problem is general enough to turn it into a feature of the language. I sometimes think "Wouldn't it be nice to have feature X now!" only to find out it is already there. This, or I realize the code is flawed somewhere else and I can sort it out by fixing the flawed code. I'm sometimes tempted to demand a feature, but then I realize that the problem is so specific that it would be ridiculous to demand a language feature for a problem that is specific only to my problem. It reminds me of laws. At the beginning laws cover general cases (theft, fraud whatever), then people demand a specific law for theft after 5 o'clock in winter when the moon is full as opposed to theft in summer when the sky is blue. And there was this guy who got robbed in autumn ...
Dec 12 2014