In RTC 2015, Matz and I gave a presentation on the thought behind the creation of programming languages together! The following slides and script are my part. We can see the video of our session on YouTube.
Today, I’ll make a presentation on the thought behind the creation of Egison. Here is the slides and script for that.
Solutions of Project Euler's problems in Egison are interesting demonstrations of Egison.
I have been sometimes writing solutions for these problems.
Actually, some problems helped me to find new ideas or fix performance issues in Egison.
We have prepared the utility libraries to solve Project Euler.
We can install them with the following commands.
% mkdir $HOME/egison-libs % cd $HOME/egison-libs % git clone https://github.com/egison-libs/project-euler.git % cd project-euler % ./install.sh % cd .. % git clone https://github.com/egison-libs/prime-numbers.git % cd prime-numbers % ./install.sh
The usage of these libraries are in the following pages.
I have received Software Japan Award for my work on Egison from IPSJ, the biggest Japanese academic society of Computer Science! Last week, I made a speech as Software Japan Award Ceremony. Let me share the photos taken by my colleagues and IPSJ.
My next goal is to make Egison popular among the researchers of programming globally. It is necessary to proceed to the next step. I will work hard to write good documentations (especially papers) for this goal.
I will be happy if you are looking forward to it!
I have made a presentation at RubyKaigi 2014 on Sep 18. Today, I will write about that.
We can view my presentation abstract here.
Fortunately, the reaction of audience was very good. I talked to and was talked to by many Rubyist. It was a very good experience for me. We can see the reaction of audience on Twitter at this togetter page.
I was asked "How long does it take to learn Egison?" by Koichi Sasada after my presentation. I would like to write here a clear answer for that.
To learn to use just pattern-matching of Egison, I think people who can already write programs will need just an hour. To understand the mechanism and the theory behind Egison pattern-matching, I think people who already know the theory of functional languages will need 3 hours and people who don't know that will need 20 hours.
I have implemented the gem to spread Egison pattern-matching to more people. I believe it is not so difficult and don't want to make people hesitate to learn it.
Finally, I would like to thank staffs and everyone at RubyKaigi. I had a very great time!
I've experienced the 3 exciting moments developing the Egison programming language. Today, I'd like to write about them.
The first moment is when I succeeded in running the program that determines poker hands.
I thought the lack of intuitive representation to express pattern-matching against non-free data types such as multisets and sets is the biggest hole of the existing programming languages. To fill this hole, I've started the design and development of Egison.
When I succeeded in running the following code, I really felt that I achieved historical work! It took a whole year to design syntax and mechanism to express and execute the following code.
I have focused on the update of design of Egison website in this half year.
Today, let me look back it.
It was a very simple website. I have started the renewal of the Egison website from January.
I've implemented a Ruby Gem that provides the ultra super pattern-matching to Ruby. We can directly express non-linear pattern-matching against lists, multisets, and sets using this gem. Today, I'd like introduce the power of this gem.
This is open source software. You can access the source code on GitHub.
Today, I'd like to introduce the six programming languages that I think interesting to try.
Haskell is a purely functional programming language with a static type system. Haskell is designed by the famous researchers in the field of programming languages. We can learn a lot of things about the theory of programming languages from its design. Haskell has many great users and great libraries.
The only problem of Haskell is it is too hard to start to use for many people. We need to learn many abstract notions from the theory of programming languages.
However, its expressive power is really great. I think Haskell is the best choice when going to implement software with entirely new concepts.
Coq is a proof assistant. It provides a language to write proofs on computers and a checker to certify its correctness. I think this field has definitely a promising future.
What I think a problem of Coq is proofs written in Coq are not intuitive. We can't intuitively express propositions and proofs of elementary mathematics that we learn in junior high school. I'm thinking that I'd like to create a language to represent proofs intuitively in future.
Erlang is very useful to implement distributed software. Actually, I'm contributing the development of LeoFS, a distributed object storage developing in RIT and writing Erlang every day from Monday to Friday. Erlang helps us to implement software with high scalability and high availability so much.
Elm is a functional reactive programming language. We can write reactive programs very easily. If you visit the following page, you'll find Elm interesting immediately.
I've played with it by tring to enable Mario to jump higher, to jump multiple times, to walk faster and so on. It's purely interesting!
Viscuit is a visual programming language. An interesting point of Viscuit is it really has a completely different paradigm as a visual programming language. What we do for Viscuit programming is only to draw pictures. We draw two pictures to describes how figures changes in the next moment on the board. The figures in the first picture changes to the figures in the second picture in the next moment.
We can view many video demonstrations. You can quickly get the concept of Viscuit if you see one of them.
Egison is the programming language that I've been developing. With Egison, we can directly represent pattern-matching against lists, multisets, sets, trees, graphs and so on. I hope this language's feature become a standard feature that all languages provide.
Please check the following online demonstrations.
Today, I'd like to write my perspective of programming languages. First of all, the figure below is my mind map on programming languages.
I think there are three aspects to evaluate programming languages. The first is mathematical abstraction. It enables us to write algorithms directly. The second is computer abstraction. It enables us to control computers directly. The last is human understandability. It enables us to learn and use the language easily.
As you know, I'm currently focusing on mathematical abstraction of programming languages and created Egison. I thought abstraction of data deconstruction is the biggest hole of the existing theory of programming languages.
Egison is pioneering the area in the figure below.
Egison is the first language that realizes all features in the area of the figure above. I believe that the impact of this contribution has as great in the history of programming languages as other historical abstractions such as high-order functions from Lisp and Scheme and automatic type inferences from ML.
The essential difference between humans and computers is that reasoning itself is a subject of observation for humans.
Reasoning is an inborn ability for humans. All humans can reason though it is not clear what reasoning is. No one grasps the rules of reasoning completely for now. If there were such people, all problems are just a calculation for them. Only clues to grasp the rules of reasoning available are reasoning we did. Humans can gather clues from their reasoning and deepen the understanding of reasoning. It enables humans to get new ideas never imagined.
We need to implement the system that do above things to realize artificial intelligence. It is very difficult. The programmer who implement it has to grasp all rules of reasoning. Some people may say that we can simulate our brain from the neuron level and realize artificial intelligence. However, if such a simulation is implemented, we can grasp how the simulation program generates the artificial intelligence entirely. This is because all parts of computer programs are formally understandable unlike human’s mind.
What I would like to say is that there are no ways to realize artificial intelligence but for to grasp the rules of reasoning one by one. And then, all results of artificial intelligence must give us great insight about how we should reason. Keeping these ideas in mind, I am researching every day aiming to build the ultimate theory.