About Computing Software Group
Our research interests are in programming languages and system software, i.e. the core of computing systems. We are seeking students who love programming as well as programming language design and software engineering. Our aim is to explore “cool” things related to programming.
Software as an art work
Developing useful software is a main part of our research. So most students are developing software as their art work. Coming up with a good idea, developing software based on that idea, and write a paper is our research activity. For example, they are developing software for the following research topics.
Our typical research topic is to study various programming tools for helping software development. For example, we are studying techniques for mechanically generating programs when the programs are too complicated to write by hand or writing the programs by hand is not realistic due to their amount. We have been developing programming tools based on these techniques, which partly automate programming and reduce the amount of work by software developers. Studying a programming tool for developing such programming tools, in other words, a meta tool, is also our important research topic. The programming tools we prototype are embedded in, for example, VSCode editor to examine their usefulness. Furthermore, we have been studying IDEs such as Eclipse, program visualizers, and program verification tools.
Another research topic is to study new language constructs. It is a typical topic for programming language research. A language construct is a various component constituting a language, such as a while statement, an object and a class, inheritance, a lambda expression, the do notation for monads, type inference, and so forth. During this type of research, we develop a new programming language (or an extended version of existing language) supporting such a new construct.
We are also studying a compiler and a virtual machine (or an interpreter). We are improving the execution speed of such software and extending its functionality. Garbage collection and thread scheduling for parallel computing are also research topics.
The target programming language is selected for each research topic. Students often select their favorite languages for their research.
Libraries and frameworks
Modern software is developed by using a framework and/or libraries. We are also studying frameworks and libraries. Developing a framework/library for a particular application domain such as machine learning, scientific computing, security, and robotics, is a possible topic. Developing a more general-purpose framework/library for parallel computing or distributed computing is also a research topic. They are used for developing software utilizing SIMD/GPUs or supercomputers. We are also studying a meta framework/library, which helps us develop those frameworks or libraries. Furthermore, we have started the research on programming languages and environments for IoT devices (micro controllers).
Some libraries/frameworks are called operating systems or middleware since they run in the kernel mode or in a separate process. We have also studied such operating systems and middleware.
For machine learning, we often use a machine-learning framework such as TensorFlow. Such a framework significantly reduces the development costs of machine-learning software. Our research aim is to develop a better framework/library so that writing a program will be much easier.
Software engineering by machine learning
We are also studying machine learning to help programming. Machine-learning techniques for natural language processing are applicable to programming. They are useful for retrieving valuable knowledge from programs. For example, we are studying a machine-learning technique for cross-language code-clone detection, which finds mostly duplicated code between two programs written in different languages. This is useful for refactoring. Another topic of our research is to automatically retrieve a coding style by analyzing existing programs. The code completion based on the machine learning technique is also a topic.
Make a language or a library?
The boundary between languages and frameworks/libraries is unclear. A number of frameworks for machine learning have been developed. This is because making such a framework is much easier than making a new language for machine learning. However, a framework often enforces an unnatural style of program (or protocol) on the user programmers.
Modern programming language constructs are getting to address this problem. They enable as a natural style as languages do. A framework or library implemented in such a means is called an embedded domain-specific language (eDSL) since it is embedded in the host language such as Python. EDSLs, or libraries with language-like programming interfaces, are the next generation of libraries. We are actively studying eDSLs, more concretely, programming tools for developing EDSLs, and general-purpose languages in which useful EDSLs are easily developed.
What is programming-language research?
We are a research group for students who are interested in programming languages, tools, libraries, and frameworks for writing a program with good maintainability and extensiblity.
If you have an experience of writing a not-toy program, you would agree to the significance of our goal. Our interests are techniques for writing a program so that its behavior will be clear, its code will not be redundant, and its organization will be well structured to make its functionality easily extensible.
We welcome students who have passion and strong interests in software development. Good programming skills are desirable but not mandatory. Only basic programming skills are. Past students were able to quickly learn necessary skills if they like programming. Potential applicants can ask a question about such required skills by emails. Visiting our group is also possible by appointment.