←back to thread

620 points tambourine_man | 1 comments | | HN request time: 0.231s | source
Show context
serbuvlad ◴[] No.43750075[source]
All things considered, this is pretty cool. Basically, this replaces

    db.execute("QUERY WHERE name = ?", (name,))
with

    db.execute(t"QUERY WHERE name = {name}")
Does the benefit from this syntactic sugar outweigh the added complexity of a new language feature? I think it does in this case for two reasons:

1. Allowing library developers to do whatever they want with {} expansions is a good thing, and will probably spawn some good uses.

2. Generalizing template syntax across a language, so that all libraries solve this problem in the same way, is probably a good thing.

replies(12): >>43750226 #>>43750250 #>>43750260 #>>43750279 #>>43750513 #>>43750750 #>>43752117 #>>43752173 #>>43752293 #>>43754738 #>>43756560 #>>43763190 #
amelius ◴[] No.43750279[source]
One thing it misses is compile-time checks for e.g. the format spec.
replies(2): >>43750311 #>>43759637 #
karamanolev ◴[] No.43750311[source]
Doesn't all of Python miss that, having (close to) no compile time?
replies(1): >>43750359 #
amelius ◴[] No.43750359[source]
Python does some checks before it runs code. E.g.:

    print("hello")

    def f():
        nonlocal foo
gives:

    SyntaxError: no binding for nonlocal 'foo' found
before printing hello, and note that f() wasn't even called.
replies(1): >>43754533 #
nomel ◴[] No.43754533[source]
I think it's just giving an error because a valid AST can't be made, which means valid bytecode can't be made. "<word> <word>" is only valid syntax if one is a reserved word. `nonlocal(foo)` is just fine, of course.
replies(2): >>43756609 #>>43756932 #
1. pansa2 ◴[] No.43756609[source]
> "<word> <word>" is only valid syntax if one is a reserved word.

`nonlocal` is a keyword