

"Move" — a simpler programming language as a subset of JavaScript - tonyskn
https://github.com/rsms/move

======
tomstuart

      Move is a subset of JavaScript [...] The following three examples are all valid Move code while the last one is also valid JavaScript code
    

You keep using that word. I do not think it means what you think it means.

~~~
samwillis
I think it is more accurately described as a superset of javascript, Just as
C++ is(nt) a superset of C.

~~~
paradoja
It is neither. It is another language which can be interpreted from JS through
a library.

The difference in the semantics of «==» is an example. Also, it does not have
things that JS has, and has other things JS doesn't.

------
Maro
I don't think Javascript being too complicated is a real world problem.

~~~
KeithMajhor
Javascript isn't complicated but it does have some ugly boiler-plate. I would
love to see C# style lambda's in Javascript.

C# style: var item_names = $( "li.menu_item span" ).map( x => x.innerHTML )

JS style: var item_names = $( "li.menu_item span" ).map( function( x ) {
return x.innerHTML } )

~~~
Skofoo
CoffeeScript has C#-esque lambdas.

item_names = $("li.menu_item span").map (x) -> x.innerHTML

~~~
silverlake
yeah, but the parser is messed up because it is whitespace sensitive. This
would fail: compose (x)-> f(x) (y)-> g(y).

------
olalonde
Now the question is, does it meet HN's notability requirements?

------
andolanra

        Variables need not be explicitly declared. Move will
        declare a newfound variable in the scope which it first
        was used.
    

How does this interact with lexical scope? For example, how would the go-to
counter example (in JavaScript below) be expressed in Move?

    
    
        function makeCounter() {
            var x = 0;
            return function() {
                return x++;
            };
        }
    

Does Move not require declarations because it has implicit declarations
whenever there's a usage of any variable? (In which case the above example
couldn't be expressed without some kind of circumlocution—again, like in
Python.) Or are variables always looked up in the outermost scope, so you
can't have a variable whose name is shared by another variable in an enclosing
scope?

    
    
        No commas required to terminate expressions. Move will
        determine when a comma is needed so you don't have to
        (and the code gets more readable).
    

Given that all the code has commas in the same places as in JavaScript, I'm
going to assume s/comma/semicolon, and s/expression/statement, to be pedantic.

------
Andi
Functions return the result of the last expression -> Better use CoffeeScript
- it's > 1.0 - it will save you even more work.

------
igorw
> In JavaScript, there are two different ways to define a function: using the
> function expression and the function declaration statement, the latter
> having subtle restrictions. Move only has function expressions.

Except using named functions will also make your stack traces useful. Because
function names tell you more than line numbers.

------
Ezku
A subset? Doesn't seem so. Also doesn't seem to have anything on CoffeeScript.

------
jamesrom
Step 1) Add some shortcuts to JavaScript

Step 2) Make it marginally more expressive

Step 3) ???

Step 4) Profit

~~~
tilltheis
Maybe Rasmus wants to make writing Kod.app plugins easier?

------
davidk0101
This is really cool. I really like his take on lambda being ^.

~~~
rdouble
It's lifted from C Blocks

<http://en.wikipedia.org/wiki/Blocks_(C_language_extension)>

------
Charuru
What about coffeescript.

~~~
dpritchett
CoffeeScript benefits from the work done on other JS dialects. Last year
jashkenas rolled in "features and optimizations" from Coco which is itself a
dialect of CoffeeScript [1].

<http://news.ycombinator.com/item?id=2037996>

------
robwgibbons
JavaScript isn't simple enough already? I think libraries are the way to make
syntactic sugar, not trying to replace the language itself.

