[] > first
[] > boom
QQ.io.stdout "First!"
[] > second
[] > boom
QQ.io.stdout "Second!"
[] > app
seq > @
foo first
foo second
[x] > foo
x.boom > @
Here, the object foo accepts two "types": first and second. This polymorphism is convenient for programmers, but causes problems in compilation and program analysis. We can modify the code above to remove polymorphism:
Now, we have two objects foo1 and foo2, each of witch accepts only one "type". This program modification technique is called "specialization".
We need to create a command line tool, which will take a directory with .xmir files and create a new directory with the same set of files, but most objects will be specialized (maybe not all of them could be specialized).
Consider this example of a EO program:
Here, the object
foo
accepts two "types":first
andsecond
. This polymorphism is convenient for programmers, but causes problems in compilation and program analysis. We can modify the code above to remove polymorphism:Now, we have two objects
foo1
andfoo2
, each of witch accepts only one "type". This program modification technique is called "specialization".We need to create a command line tool, which will take a directory with
.xmir
files and create a new directory with the same set of files, but most objects will be specialized (maybe not all of them could be specialized).Full paper is here: https://www.overleaf.com/read/bjzmfhsypqdb