5

Currently there are many implementations of EVM (Java, C++, Python, Go, etc).

For example: I will be using Solidity to write DApp on the top of EVM-Java and EVM-Python, why would I want to use EVM-Java vs. EVM-Python?

Why and when do you want to use one over the other?

2

Why and when do you want to use one over the other?

The high level answer is you wouldn't - you wouldn't care. It's analogous to choosing an operating system based on which language it's written in.

If all you want to do is develop and run your own smart contracts, then the clients on which those contracts are run are abstracted away.


If you want to actually run your own client, rather than just develop Dapps, there might be reasons why some people would prefer one over the other:

  • You want to run what the community would consider the safest, battle-tested client. So pick the most popular.
  • You want to help the community by ensuring there are multiple different clients running in the network, so you deliberately don't run the most popular client. (During the DDoS attack at DevCon2, Geth was affected but Parity wasn't. If Parity hadn't existed, there would have been trouble.)
  • You want to edit the source code to make your own alterations (e.g. if you're a miner, to change the mining algorithms), so pick a client written in a language you're most familiar with.

Note, though, that only in the last of these are you making a choice based on the underlying language of the client.


I will be using Solidity to write DApp on the top of EVM-Java and EVM-Python,

As I mentioned above, a) creating a Dapp, and b) running a client, are orthogonal. You don't need to run your own client/EVM to deploy your Dapp. The associated smart contracts will be run by every node in the network, so you can't choose what types of clients will run your contracts.

2

Here there are some arguments:

  • We all know that Solidity, seems an easy language, but, what a lot of people doesn't know is: What's really happening and how this code (On the EVM), is processed. We can't control it's memory pointers as we could do on C++ for example, so lots of things are happening on the EVM and we don't realize.
  • Also,Solidity isn't a solid and full-tested language, as Java, C++ or others will be. And also, this other languages will able a better debugging and testing options, which does not provide Solidity.
  • This makes us think that a smart contract (which has to contain money, and once deployed, we can't change anything) will need to be programmed more as a driver, for example: more tested, with more memory control like C++ has etc..

This are the main reasons why other implementations are born.

Hope it helps.

  • 1
    Here you're talking about a "substitute language to Solidity", but that was not what my question is. My question is, why are there different implementation of EVM? So for example, I will write on Solidity on the top of Java-EVM and Python-EVM, correct? Thus, I'm not sure why would I want to use Java-EVM vs. Python-EVM – Grady May 27 '18 at 2:06
  • Yes, but is much harder (or even impossible to track and control the memory with the Java EVM. That's why there are other implementations. – CPereez19 May 27 '18 at 14:24
0

You would choose one based on two factors(similar to choices with any library)

1) Upkeep of the library.

2) Your comfort in using the language.

  • But why would you care? Because all of them do exactly the same job right? (i.e running solidity code, etc) It's like saying I want to use Java-based MySQL or C++ based (assuming both implementations are identical in features and performance). – Grady May 26 '18 at 7:45
0

Maybe you are creating a project that runs transactions inside your own code, and you do not want to implement the whole EVM, so you would use one of them. For example, if your application is written in Java, it makes sense to use ethereumJ.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.