5 ms·
> Just use a terminating character, and use the standard one: a semi-colon. Significant whitespace is popular as well. You can argue all day about it, but at t
by repsilat 13y ago
> Just use a terminating character, and use the standard one: a semi-colon.
Significant whitespace is popular as well. You can argue all day about it, but at the moment I think making a language "look like python" is the safer bet for a new language.
- ternaryoperator 13y ago> at the moment I think making a language "look like python" is the safer bet for a new language Why Python? Clojure and Elixir are two new languages with growing communities and they look nothing like Python.
- chipsy 13y agoSignificant whitespace is _also_ redundant, just along different metrics. Badly indented Python gets caught before execution the majority of the time, and in presentation, it surfaces to the programmer quickly. His argument is essentially against something like Lisp or Forth where you have such a paucity of syntax that many erroneously written statements are syntactically valid and make it to runtime.
- cwp 13y agoLisp and Forth are the extreme case, which is especially bad, because you get no error message at all. But the middle ground are languages that can detect a syntax error, but can't figure out exactly what it is. You don't get an error message saying "You should have a semi-colon here, want me to insert one?" Instead you get some vague message like "didn't expect this keyword here" a few lines after the missing semi-colon.
- mercurial 13y agoIt's debatable. I know two languages with significant whitespace, that's Python and Haskell. And Haskell's rules are a pain. For the language I'm working on, I had started with significant whitespace. Then I realized that it would be a pain for things like anonymous callbacks (the kind of thing JS code is littered with) and that it was distracting. At least when you start, don't get hung up on the syntax, focus on basic things. What's important is what you are going to do with your AST, the lexer/parser part are the least important areas, unless you are doing a "syntactic skin" over a language (eg, coffeescript). You can always change the syntax later.
- Sssnake 13y ago>And Haskell's rules are a pain. How?
- mercurial 13y agoSomehow, I find myself caught doing an incorrect indent regularly. I appreciate Python's ':' marker, which unambiguously tells you "either write the next statement on the same line, or indent". I remember it being criticized, but I think it's actually really good.
- stormbrew 13y agoI'm curious why you felt anonymous callbacks were problematic in a significant whitespace language. They seem to work just fine in coffeescript, as an example.
- mercurial 13y agoI'm not familiar with Coffeescript. Maybe I should have a look. My thought was that getting the right level of indentation for something like: my_func_with_callbacks(arg1, def(x): foo() bar(), 5) would be a pain in terms of defining sensible rules and ensuring they are parsed correctly. So right now, I'm going for something closer to Ruby syntax. But it may just be a symptom of a lack of imagination. I'll remember to investigate Coffeescript when I revisit the syntax.
- stormbrew 13y agoAh. I think the practice is to treat the closure as being ended by any dedent that is lower than its first line. This specific case does come up with javascript's setTimeout, which takes a callback as its first argument and the timeout as the second. It usually seems to look like this: setTimeout -> doSomething() doSomethingElse() , 1000 I'm not terribly fond of this, personally, but it does solve the problem. I think in a language without a legacy you would just tend to avoid making callback arguments come before non-callback arguments and things would look a lot nicer.