ivan.moony
Bronze Coder
Dreaming in a bytecode
In this thread, I want to propose and hear opinions about something different than the current generic programming technology which takes form of JVM and CLI. I have some thoughts on how the proposition could be implemented, but I want to hear your opinions, as well. I wonder if any of this would make any sense.
Thousands higher level languages -> one machine code
During programming, we use general purpose or domain specific languages, possibly calling code fragments written in different languages, finally hitting the compile button, when it all translates to the machine code. The problem with this setup is that there are many different platforms with different machine codes, while traditional compilers targeted only one machine code.
Thousands higher level languages -> one byte code -> only machine codes supported by vendors
With invention of bytecode technology, first in Java compiler (JVM), then in Visual studio products (CLI), things are supposed to get much better regarding to the fact that there exist many different platforms on which we want to run our programs, each encompassing its own machine code setups. Normally, we would have different binary builds of applications we write for different platforms, until bytecode technology was introduced. Bytecode is supposed to be an intermediate product between source code and actual machine code. Source codes would then be compiled into one and only bytecode, while there would exist different bytecode interpreters for different platforms, ensuring that the same bytecode behaves exactly the same on each supported platform.
Oligopoly
But the problem with the current bytecode technology is that it is oriented upwards. We, as programmers community, are supposed to write compilers for different languages into a bytecode of our choice, while bytecode vendors are supposed to decide whether they would support certain platform, or not. It is obvious that this situation gives vendors too much control over the market that should be as much accessible as it can. Currently it is very hard to introduce a new device or operating system because bytecode vendors could easily condition support of such device or operating system.
Proposition: thousands higher level languages -> one byte code -> thousands machine codes
But what if we had a bytecode technology that wouldn't be oriented strictly upwards, towards higher level programming languages? Wouldn't it be cool if we had a bytecode that is oriented in a different direction: downwards, towards different machine codes that are not predetermined in advance? Such a bytecode would be brought in a form of generalization of compiling rules. Such Compiling rules would be alterable by very programmers community which would, when necessary, code a connection between the well known bytecode and targeted machine codes. The bytecode behavior would be known, machine code would also be known, and the bytecode, by its definition, would provide a mechanism for translating former to later.
As an additional thought, we shouldn't consider target compiling environments as strictly consisted of machine codes. In fact, any programming language source code or higher level operating environment could be the target compiling environment, including the very web browser technology we all know about, but also any new, yet unknown, incoming technologies of the future.
Requesting feedback
How much do you feel we are already restricted by the current oligopoly decisions?
Would proposed kind of bytecode philosophy bring any benefits to a global programming community?
Do we already possess technologies needed for implementing proposed kind of bytecode?
What are generally your thoughts on this matter, and are there any relevantly important aspects I forgot to mention?
In this thread, I want to propose and hear opinions about something different than the current generic programming technology which takes form of JVM and CLI. I have some thoughts on how the proposition could be implemented, but I want to hear your opinions, as well. I wonder if any of this would make any sense.
Thousands higher level languages -> one machine code
During programming, we use general purpose or domain specific languages, possibly calling code fragments written in different languages, finally hitting the compile button, when it all translates to the machine code. The problem with this setup is that there are many different platforms with different machine codes, while traditional compilers targeted only one machine code.
Thousands higher level languages -> one byte code -> only machine codes supported by vendors
With invention of bytecode technology, first in Java compiler (JVM), then in Visual studio products (CLI), things are supposed to get much better regarding to the fact that there exist many different platforms on which we want to run our programs, each encompassing its own machine code setups. Normally, we would have different binary builds of applications we write for different platforms, until bytecode technology was introduced. Bytecode is supposed to be an intermediate product between source code and actual machine code. Source codes would then be compiled into one and only bytecode, while there would exist different bytecode interpreters for different platforms, ensuring that the same bytecode behaves exactly the same on each supported platform.
Oligopoly
But the problem with the current bytecode technology is that it is oriented upwards. We, as programmers community, are supposed to write compilers for different languages into a bytecode of our choice, while bytecode vendors are supposed to decide whether they would support certain platform, or not. It is obvious that this situation gives vendors too much control over the market that should be as much accessible as it can. Currently it is very hard to introduce a new device or operating system because bytecode vendors could easily condition support of such device or operating system.
Proposition: thousands higher level languages -> one byte code -> thousands machine codes
But what if we had a bytecode technology that wouldn't be oriented strictly upwards, towards higher level programming languages? Wouldn't it be cool if we had a bytecode that is oriented in a different direction: downwards, towards different machine codes that are not predetermined in advance? Such a bytecode would be brought in a form of generalization of compiling rules. Such Compiling rules would be alterable by very programmers community which would, when necessary, code a connection between the well known bytecode and targeted machine codes. The bytecode behavior would be known, machine code would also be known, and the bytecode, by its definition, would provide a mechanism for translating former to later.
As an additional thought, we shouldn't consider target compiling environments as strictly consisted of machine codes. In fact, any programming language source code or higher level operating environment could be the target compiling environment, including the very web browser technology we all know about, but also any new, yet unknown, incoming technologies of the future.
Requesting feedback
How much do you feel we are already restricted by the current oligopoly decisions?
Would proposed kind of bytecode philosophy bring any benefits to a global programming community?
Do we already possess technologies needed for implementing proposed kind of bytecode?
What are generally your thoughts on this matter, and are there any relevantly important aspects I forgot to mention?
Last edited: