Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

IMO Python really needs this. Working in a language without syntatic macros is such a downgrade, and there's been a number of syntax features added to the language over the years that IMO should have just been macros.

> The f-string `f"..."` could be implemented as macro as `f!("...")`. Not quite as nice to read, but would still be useful for experimenting with.

In julia, we have a rule where a macro whose name ends with `_str` is usable as a "string macro" and it receives the input string in its raw form, and then any string macro is usable by just prefixing the name at the beginning of the string.

An example is that our regex string literal implementation is literally just

    macro r_str(s)
        Regex(s)
    end
which allows for easy compile-time regex generation. With that you can simply write e.g. `r"^[ \t]+|[ \t]+$"` which is the same as `@r_str("^[ \t]+|[ \t]+$")`, e.g.

    julia> match(r"^[ \t]+|[ \t]+$", " hi")
    RegexMatch(" ")
So using this rule, Python's f-strings could just be re-implemented as a string macro.

https://docs.julialang.org/en/v1/manual/metaprogramming/#met...



This is possible in 3.14, which includes "PEP 750 – Template Strings", a generalization of f-strings. Perhaps macros is the next step of evolution.


Having a real macro system would be a replacement for that PEP


Well they should coexist, as all string formatting syntaxes have over the years. And though I think macros would be nice to have, there's a valid concern raised in the discussion: readability. Having macros opens the door to extremely unpythonic code bases, which could be very hard for anyone outside of the primary audience to understand, let alone meaningfully modify or contribute to. And one of the things that keeps me hooked to Python is that if I install a package and it has some issue or doesn't do something I'd like, it's almost trivial for me to find the relevant section in the installed code, edit it and have the desired behavior on next invocation.


No


Yes.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: