For raw addresses, something like this should work^(0|-1):([a-f0-9]{64}|[A-F0-9]{64})$
- 64 = carry unused gas, basically forwards gas left from the message to the next transaction.
- it's easier to understand this via binary representation. anyway, the only thing you must know: use 0x10 for non-bouncable messages, 0x18 for bouncanles ones.
check here for more example on how to craft messages and available modes
https://github.com/TonoxDeFi/open-contracts/blob/main/contracts/messages/messages.func
The main difference is that v4 introduced plugins, which can be managed by the user and can interact with onchain contracts.
Keep in mind that adding (if there are any) an untrusted plugin, or adding a plugin that can upgrade his code could be dangerous.
No, right now you can use only FunC as an high level language to develop smart contract.
To use Rust (or any other language that uses LLVM) you should start by writing a backend for it, than you might be able to produce valid TON VM instructions from rust code.