So, this uses a macro, but if you’re thinking anything is possible with a macro, it’s actually not in Rust. The input does still need to parse as valid Rust tokens.

Which means the authors asked themselves at some point: Is the Rust syntax a superset of the Python syntax?
And well, it’s not. In particular, some Python keywords will just be tokenized as an identifier (like a variable name).

But it is close enough that the authors decided against requiring a massive string to be passed in, which does amuse me. 🙃

  • @cabhan@discuss.tchncs.de
    link
    fedilink
    English
    462 days ago

    With projects like these, I’m always torn between thinking that it’s cool it’s possible, and horror that someone somewhere will try to use this in production code.

  • @flashgnash@lemm.ee
    link
    fedilink
    192 days ago

    This is absurd, the amount of effort that must have gone into this purely for shits and/or giggles

    • @fossphi@lemm.ee
      link
      fedilink
      English
      19
      edit-2
      2 days ago

      shits and/or giggles

      That’s probably the single most impactful cause for doing things with computers

  • quaff
    link
    fedilink
    English
    292 days ago

    Personally, I can’t wait to inline PHP in my rust code!

  • JoYo
    link
    fedilink
    English
    4
    edit-2
    2 days ago

    is it converting the syntax to rust? wouldn’t that be easier at the LLIL or i guess python bytecode level?

    • EpheraOP
      link
      fedilink
      9
      edit-2
      2 days ago

      From what I understand, it works like this:

      1. Rust compiler reads the pseudo-Python and tokenizes it according to Rust’s rules.
      2. Macro code converts the tokens back to (now proper) Python, while filling in the captured variables. I believe, this is the code that does this.
      3. Python code is executed in an actual Python interpreter, via PyO3.
      • JoYo
        link
        fedilink
        English
        32 days ago

        oh ok nm i misunderstood. thanks