send() should be avoided.
Gas specific code (
call.gas().value()()) should also be avoided.
call.value()() should be used, for example:
It is also critical that you make sure to guard against reentrancy by making all state changes, before
https://diligence.consensys.net/blog/2019/09/stop-using-soliditys-transfer-now explains more about the best practice change.
Any gas specific code should be avoided because gas costs can and will change.
For example, the gas cost for SLOAD was raised from 50 to 200 in 2016, and again in EIP 1884, with some impacts described in:
UNGAS may also be implemented in the future to remove the
GAS opcode and smart contracts would not have any notion of gas. (Gas would still be in the protocol, but not in the EVM.)