Hiun Kim essays   articles   notes


My research is on unleashing possibility of computing both in the area of foundations and applications. I build things that enable people the power to solve more high-level problems with software by improving freedom and abstraction for the creation of modern software that has scale and complexity. In particular, new design and implementation of programming languages that accurately models and simplifying control of things and behavior in the real world, and computer systems and software architecture to support this humane programming efficiently, evolutionarily. I apply this foundation to extends the boundaries of how software system could be built, operated and evolved in interconnected and distributed environment.


Self-composable Programming(Self) is a technique for Software Product Line Engineering to manage variability on software feature implementation. Self bring an object-oriented approach to increasing modularity by localising scattered and so tangled behavior - the commonalities to abstract function and variabilities to inherited specific function by applying refinement. Programming-level compositional approach on software modularity include metaprogramming or aspect-oriented programming works well while Self provides different advantages, Self is nothing new, does not requires special compiler or language feature but fully used the vision and idea provided since SIMULA67, which is modeling the real world. I am sure Object-oriented Programming is good at modeling things but not behaviors, while the concept, Object-orientation could suitable for this and Self provides a practical approach to modeling of modern software behavior by bringing hierarchical relationship as you seen below in the example of a web application.

Homepage »    Publications »


Programmable Programming Tool. Imagine other science displine that uses tools for research, such as physics and chemistry or astronomy. Why computer science could have delicate tooling for the entire development process of analysing, creating and modifying software. Programmable Programming Tool aiming fragmentation and deaccumulation of many delicate feature of modern IDE, and just like language research, this project aims to provide, research-accumulatable, standardised programming tool to provides easy interaction with programmer towards indirect manipulation of complex system behavior such as object-oriented collaboration. We believe computer-aided, tool-driven software development resolves fundamental tradeoff between language's expressivity and modulairty.

Semantic Composition. Structuring program in languages require complilation of program in programmers head, athrough it is abstract idea, composing semantics of program can be resolve issues on expressibity.

First-class Statement. Make statement as a primitive class citizen of programming language transform program ever more flexible, to brige this flexiblility into increase actual comprehension and modularity, a special arithemic operation dedicated to function is needed, such as adding two statement is work as function composition.

Procedural Asynchronisation. Todays extensive use in asynchronous programming made complexity of source code ever more higher. Of course the complexity mostly become by extensive usage of anonymous function as syntax for machine, not syntax for human, followed original design goal. We believe a constrained, procedural asynchronous programming can provides a freedom. Constrain such as non-stateful IO or selective async marking dedicated for application's characteristic are needed.