Show HN: NodeScript- JavaScript Without the Variable Declarations and Semicolons(github.com)
github.com
Show HN: NodeScript- JavaScript Without the Variable Declarations and Semicolons
https://github.com/nodescript/nodescript
3 comments
Regarding the semicolons, due to the insertion mechanism JavaScript uses, lines starting with '[', '(', or '`' will get merged with the previous statement. So the example in the repo will get parsed in JavaScript as:
Thanks for the kind words. I really appreciate it.
x = 10;
y = 20[x, y] = [y, x];
Your assumption is correct. NodeScript defaults to let-declarations. This leaves you with a block-scoped language and prevents leakage of global variables. If you want to make a global variable, you will have to explicitly write it as a property of the global object.Thanks for the kind words. I really appreciate it.
Regarding semicolons, here's an interesting previous discussion: https://news.ycombinator.com/item?id=3842713
> Sounds like it would lead to subtle bugs but I guess it works ok.
It does lead to subtle bugs. The same kind of people who leave semicolons out of javascript write C but leave out the braces in statements wherever it's allowed - which also leads to subtle bugs.
I guess looking pretty and saving a couple of keystrokes is preferable to being explicit and not having to just trust that the compiler/browser/whatever is able to intuit what you want the code to be as opposed to what you wrote.
It does lead to subtle bugs. The same kind of people who leave semicolons out of javascript write C but leave out the braces in statements wherever it's allowed - which also leads to subtle bugs.
I guess looking pretty and saving a couple of keystrokes is preferable to being explicit and not having to just trust that the compiler/browser/whatever is able to intuit what you want the code to be as opposed to what you wrote.
> It does lead to subtle bugs.
Have you encountered any bugs so far while testing NodeScript out? I thought I have taken care of all the gotchas when it comes to semicolons.
Have you encountered any bugs so far while testing NodeScript out? I thought I have taken care of all the gotchas when it comes to semicolons.
How does this handle shadowing? Consider, for example,
Edit: I note from another comment that you state
> If you want to make a global variable, you will have to explicitly write it as a property of the global object.
The example above could appear in any scope, not only the global scope. Python now has a `nonlocal` keyword (as well as the `global` keyword) to disambiguate these cases.
let x = 1;
function foo() { let x = 2; }
function bar() { x = 3; }
console.log(x); // 1
foo();
console.log(x); // 1
bar();
console.log(x); // 3
Without the declaration, how can you tell whether I intend to shadow or not?Edit: I note from another comment that you state
> If you want to make a global variable, you will have to explicitly write it as a property of the global object.
The example above could appear in any scope, not only the global scope. Python now has a `nonlocal` keyword (as well as the `global` keyword) to disambiguate these cases.
The default behaviour is not to shadow variables. If you want to shadow a variable, you have to do so explicitly with the 'let' keyword.
Here is a NodeScript snippet and its equivalent in Python:
Here is a NodeScript snippet and its equivalent in Python:
// NodeScript
x = 10
function outer() {
y = 20
function inner() {
x = 100
y = 200
}
inner()
console.log(x, y)
}
outer()
# Python
x = 10
def outer():
y = 20
def inner():
global x
nonlocal y
x = 100
y = 200
inner()
print(x, y)
outer()
Anyway, nice work in general! Assuming this only works with 'let' to avoid the weirdness around 'var' scoping?