Hacker News new | past | comments | ask | show | jobs | submit
Pretty compelling, especially "Janet does not adhere to the ancient customs. CAR is called first. PROGN is called do. LAMBDA is fn, and SETQ is def." - a sign of good sense for sure!

How fast is it?

Also my main objection to Lisps is still the horrible bracket syntax. Yes it's unambiguous and easy to parse, but it's HORRIBLE to read and edit. I wish this project had been a success (or something similar to it): https://readable.sourceforge.io/

Also I don't think static typing is really optional for me at this point.

loading story #48368796
> Pretty compelling, especially "Janet does not adhere to the ancient customs. CAR is called first. PROGN is called do. LAMBDA is fn, and SETQ is def." - a sign of good sense for sure!

Just FYI, many of these are also done in Scheme and its derivative Racket. They kept lambda (but even Python did that), but progn -> begin, setq -> set!, car -> first, and so on.

> Also my main objection to Lisps is still the horrible bracket syntax. Yes it's unambiguous and easy to parse, but it's HORRIBLE to read and edit.

I have pretty mixed feelings at this point. I don’t mind it for normal programming, but when I do numerical programming (physics models, etc.) you often get extremely long and verbose expressions that are IMO difficult to parse compared to the math-like infix operator notation used in other languages.

I'm starting to prefer the s expression syntax when dealing with tree structures like json.

I wonder if we were raised on tree based algebra if math would be easier to do, or harder.

Like, solve for x.

   (= (+ (* 2 x) 3) 11)
   (= (* 2 x) (- 11 3))
   (= (* 2 x) 8)
   (= x (/ 8 2))
   (= x 4)
Though this isn't too bad.

    (= (+ (pow x 2)
          (pow y 2))
       (pow r 2))
I think also a lot of my objections could be worked around if one simply had a "math" macro that evaluates infix math notation as a DSL, similarly to how the CL "loop" macro does a DSL for iteration.

Perhaps this exists already somewhere?

> exists already

The helloworld of macros lets you do `(infix 1 + 2)`:

    (defmacro infix [a op b]
      ~(,op ,a ,b))
A useful one with precedence letting you to `(infix 2 + 4 * 5)`:

    (defmacro infix  [& toks]
      (def prec {'+ 1 '- 1 '* 2 '/ 2 '% 2})
      (var pos 0)
      (defn climb [min-p]
        (var left (toks pos))
        (++ pos)
        (while (>= (get prec (get toks pos) -1) min-p) # nil/operand -> -1, stops the loop
          (def op (toks pos))
          (++ pos)
          (set left ~(,op ,left ,(climb (inc (prec op)))))) # inc => left-associative
        left)
      (climb 0))
But ultimately, APL notation is best: https://git.sr.ht/~subsetpark/jnj
I definitely prefer s-exps over both xml and json myself too!

Interesting question. Much of the difficulty does stem from mentally translating back and forth between conventional notation and s-exps too, since you can’t really avoid the standard notation when reading and writing math and physics papers. And current-day math and physics notation has been optimized to some extent for the infix notation; perhaps one would have invented more expressive higher-order functions or macros to denote s-exp math if that was what everyone used for centuries.

If you ever used an RPN calculator then this is very familiar
{"deleted":true,"id":48368534,"parent":48368130,"time":1780397747,"type":"comment"}
loading story #48370727
Syntax is not that important to me. I prefer Python style indentation, but its really not that important - its just something to get used to for me.

Is static typing that important for a scripting language? From the intro to the book:

> And to be clear, I’m not going to try to convince you to bet your next startup on Janet, or even to use it in any sort of production setting. But I think it’s an excellent language for exploratory programming, scripting, and fun side projects.

loading story #48370881
> Also my main objection to Lisps is still the horrible bracket syntax. Yes it's unambiguous and easy to parse, but it's HORRIBLE to read and edit.

I use Parinfer, which allows me to edit Janet as if it was an indentation-based language.

loading story #48369264
loading story #48368839
loading story #48370023