Live data from Hacker News

KindScript – A kinder JavaScript experience

github.com

21–29 of 29 posts

Re: KindScript – A kinder JavaScript experience

#21
post #14

Earlier quoted context omitted.

Why would you like to add anything to the __proto__ property? One way would be to write, like this: { const m = {} m.__alpha__ = 10 m.__bravo__ = 20 m.__defineGetter__('__proto__', () => 30) Reflect.ownKeys(m).forEach(key => console.log(key)) } EDIT: I can't format ...

To make my point clear, here is a question. What is wrong with the following function that counts the number of unique strings in a list of strings? function count_unique_strings(l) { var m = {}; l.forEach(function(s) { m[s] = true; }); var count = 0; for(var k in m) ++count; return count; } To see why this function is incorrect, run it with the following input: console.log(count_unique_strings(["alpha", "bravo", "br…

What is wrong with the following function

The implementation is wrong: you're using Object when you want to use Map. Object is not suitable for this, and seems like you know it, and it's in language specs.

Re: KindScript – A kinder JavaScript experience

#22
post #12

I want a Javascript that does this right: var m = {}; m["__alpha__"] = 10; m["__bravo__"] = 20; m["__proto__"] = 30; for(var k in m) console.log(k); Result (in current JS): __alpha__ __bravo__ EDIT: To be clear, I want a Javascript that is consistent. Imho, the fact that __proto__ is a property is a hack. Also, I suspect that a lot of software written in Javascript is susceptible to injection bugs/attacks by using th…

You're thinking of `Map` not `Object`.

Objects can be used as cheap maps but they're more than that. That's why ES2015 brought us Map and Set.

Re: KindScript – A kinder JavaScript experience

#23
post #4

Looks like this wasn't ready to be revealed, like someone accidently made the repo public. The website is currently not public so I'm not going to try anything yet but as a co-foudner at an CS Ed-tech startup I'm going to keep my ears perked. MS has put out some really nice JS products recently.

Out of curiousity, what are you doing in CS Ed space?

i co-founded Mimir (YC S15). We're deploying tools like autograding and plagiarism detection in college classrooms to bring Universities into the 21st century.

Re: KindScript – A kinder JavaScript experience

#24
post #21
post #14

Earlier quoted context omitted.

To make my point clear, here is a question. What is wrong with the following function that counts the number of unique strings in a list of strings? function count_unique_strings(l) { var m = {}; l.forEach(function(s) { m[s] = true; }); var count = 0; for(var k in m) ++count; return count; } To see why this function is incorrect, run it with the following input: console.log(count_unique_strings(["alpha", "bravo", "br…

What is wrong with the following function The implementation is wrong: you're using Object when you want to use Map. Object is not suitable for this, and seems like you know it, and it's in language specs.

Yes, I stated beforehand that the implementation is wrong. My point is that it is not obvious from the implementation (and certainly not for beginners).

Re: KindScript – A kinder JavaScript experience

#25

Earlier quoted context omitted.

That solution doesn't cast javascript in a positive light. Why should you need to know that much about the guts of the language just to create an associative array that works properly?

JavaScript objects aren't associative arrays. They inherit property values from their prototype. Not just __proto__, but hasOwnProperty, etc. If you want to abuse objects in this way, it makes sense that you need a special approach to opt out of inheritance. A better approach is to just use Map. var m = new Map();

It would have been so much better if inheritance was opt-in rather than opt-out.

Re: KindScript – A kinder JavaScript experience

#26
post #14

Earlier quoted context omitted.

Why would you like to add anything to the __proto__ property? One way would be to write, like this: { const m = {} m.__alpha__ = 10 m.__bravo__ = 20 m.__defineGetter__('__proto__', () => 30) Reflect.ownKeys(m).forEach(key => console.log(key)) } EDIT: I can't format ...

To make my point clear, here is a question. What is wrong with the following function that counts the number of unique strings in a list of strings? function count_unique_strings(l) { var m = {}; l.forEach(function(s) { m[s] = true; }); var count = 0; for(var k in m) ++count; return count; } To see why this function is incorrect, run it with the following input: console.log(count_unique_strings(["alpha", "bravo", "br…

[deleted]

Re: KindScript – A kinder JavaScript experience

#27
post #8

Rather than simplify Javascript and protect beginners from themselves, why not start with a language that is both powerful and protective and yet easy to learn, like Pascal - learn the basics there in a more structured language? Lazarus is a free, cross platform IDE for Pascal and an excellent place to start: http://www.lazarus-ide.org/

Pascal is a complete nightmare to start people off with if they are going to move on to a language like JavaScript, Python, Ruby, C# or Java.

It's superficially similar but it has all kinds of archaic quirks and lacks basic affordances like return values or short-circuiting (i.e. in order to evaluate `a AND b` Pascal evaluates both).

You might as well argue that beginners should start with Assembly. If you want to be unnecessarily cruel at least teach them something useful like C/C++.

Re: KindScript – A kinder JavaScript experience

#28
post #12

I want a Javascript that does this right: var m = {}; m["__alpha__"] = 10; m["__bravo__"] = 20; m["__proto__"] = 30; for(var k in m) console.log(k); Result (in current JS): __alpha__ __bravo__ EDIT: To be clear, I want a Javascript that is consistent. Imho, the fact that __proto__ is a property is a hack. Also, I suspect that a lot of software written in Javascript is susceptible to injection bugs/attacks by using th…

Both Map and Symbol already solve this in ES6.

Re: KindScript – A kinder JavaScript experience

#29
post #27
post #8

Rather than simplify Javascript and protect beginners from themselves, why not start with a language that is both powerful and protective and yet easy to learn, like Pascal - learn the basics there in a more structured language? Lazarus is a free, cross platform IDE for Pascal and an excellent place to start: http://www.lazarus-ide.org/

Pascal is a complete nightmare to start people off with if they are going to move on to a language like JavaScript, Python, Ruby, C# or Java. It's superficially similar but it has all kinds of archaic quirks and lacks basic affordances like return values or short-circuiting (i.e. in order to evaluate `a AND b` Pascal evaluates both). You might as well argue that beginners should start with Assembly. If you want to be…

I agree! Moreover, why not let beginners start with a language they could actually use in real life?
Post reply on HN