[rakuten techconf2014] [d-2] the pattern-matching-oriented programming language egison

Post on 03-Jul-2015

2.183 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

Rakuten Technology Conference 2014 "The Pattern-Matching-Oriented Programming Language Egison" Satoshi Egi (Rakuten)

TRANSCRIPT

The Pattern-Matching-Oriented Programming Language Egison

Vol.01 Oct/25/2014 Satoshi Egi Rakuten Institute of Technology http://rit.rakuten.co.jp/

- Express Intuition Directly with Essentially New Syntax -

2

Self-Introduction

Name Satoshi Egi (江木 聡志)

Association Rakuten Institute of Technology (楽天技術研究所)

Education Majored in Computer Science at the University of Tokyo

Interests Programming Languages, Automated Reasoning

Website http://www.egison.org/~egi/

3

What is Egison?

Egison is a programming language that realizes non-linear pattern-matching even against data that have no standard form.

(match-all xs (multiset integer) ! [<cons $x <cons ,x _>> x]) !Egison

Enumerate the elements of the collection ‘xs’ that appear

more than twice

pairs = [] !(1..n).each do |i| ! (i..n).each do |j| ! if xs[i] == xs[j] ! pairs = pairs + ! xs[i] ! end ! end !end !

Ruby

Non-linear patterns allow multiple occurrences of same variables in a pattern

4

Demonstration: Poker Hands

5

Demonstration: Mahjong

Two same tiles

Three consecutive tiles

Three same tiles

Seven twins or one twin + four shuntsu or kohtsu

6

Demonstration: Prime Numbers

7

Motivation I have created Egison to represent human’s intuition directly.

The word “intuitive” is often used in the meaning “easy to understand”. However intuition itself is not “intuitive” at all. Therefore, the direct representation of intuition is not easy for many people to understand at the beginning.

「直感的」という言葉は「わかりやすい」という意味で使われることが多いですが、直感自体は全く「直感的」なものではありません。それゆえに、直感の直接的な表現は多くの人にとって、最初はわかりやすくありません。

8

Motivation I have created Egison to represent human’s intuition directly.

There are cases that we still need to translate our thoughts for computers. By discovering such cases, analyzing our intuition, and finding their direct representation, I have created a new programming language Egison.

人間の考えをコンピュータ向けに翻訳して記述せねばならない場面は未だにあります。そのような場面を見つけ、自身の直感を分析し、その直接的な表現を見出すことにより、私は新しいプログラミング言語Egisonを作るに至りました。

9

Profile of Egison

Paradigm Pattern-matching-oriented, Purely functional

Author Satoshi Egi

License MIT

Version 3.3.12 (2014/10/25)

First Released 2011/5/24

Filename Extension .egi

Implemented in Haskell (about 3,800 lines)

Egison is open-source software maintained on GitHub. https://github.com/egison/egison

10

Website – Everything about Egison is Here

11

1. Concept of Egison (15 minutes) 2. Play with Egison (5 minutes) 3. Current Status (5 minutes) 4. Future Plan (5 minutes)

Table of Contents

12

The Concept of Egison

13

The ‘match-all’ Expression

Meaning: Pattern match against “{1 2 3}” as a “list of integers” with the pattern “<cons $x $xs>” and return all results of pattern matching.

14

Matchers A matcher specifies the way of pattern-matching.

15

Matchers A matcher specifies the way of pattern-matching.

16

The ‘cons’ Pattern The pattern constructor ‘cons’ divides a collection into an element and the rest.

17

The ‘cons’ Pattern The pattern constructor ‘cons’ divides a collection into an element and the rest.

18

Pattern-Matching with Multiple Results

We can handle pattern-matching with multiple results.

19

The Nested ‘cons’ Pattern

We can extract two elements from a collection with the nested cons pattern.

20

The ‘join’ Pattern

The pattern constructor ‘join’ divides a collection into two collections.

21

Non-Linear Patterns

Patterns that have ‘,’ ahead are called value-patterns. The equality is checked for a value-pattern.

22

Non-Linear Patterns

Patterns that have ‘,’ ahead are called value-patterns. The equality is checked for a value-pattern.

Same number with $x

23

Demonstration: Poker Hands

24

Demonstration: Poker Hands

Pattern for straight flash

25

Demonstration: Poker Hands

Match as a set of cards

Pattern for straight flash

26

The Pattern for Straight Flush

27

The Pattern for Straight Flush

Same suit with $s

28

The Pattern for Straight Flush

Same suit with $s

Numbers are serial from $n

29

The Pattern for Straight Flush

Same suit with $s

Numbers are serial from $n

We can write any expression after ‘,’

30

Demonstration: Poker Hands

Pattern for two pair

31

The Pattern for Two Pair

32

The Pattern for Two Pair

Matches with any suit

Matches with any card

33

The Pattern for Two Pair

Matches with any suit

Matches with any card

Same number with $m

Same number with $n

34

The Pattern for Two Pair

Matches with any suit

Matches with any card

Same number with $m

Same number with $n

Non-linear patterns have very strong power

35

Demonstration: Poker Hands

Non-linear patterns enables to represent all hands in a single pattern

36

Demonstration: Poker Hands

Egisonists can write this code in 2 minutes!

Non-linear patterns enables to represent all hands in a single pattern

37

Java Version

public static boolean hasPair(Card[] cards) { ! for (int i = 0; i <= 4 ;i++) { ! for (int j = i + 1 ; j <= 4 ; j++) { ! if (cards[i] == (cards[j])) { ! return true; ! } ! return false; ! } ! } !} !

Just finding a pair of cards is already complex.

I found a poker-hand evaluator in Java more than 200 lines of code.

http://www.codeproject.com/Articles/38821/Make-a-poker-hand-evalutator-in-Java

38

Pattern-Matching with Infinite Results

We can handle pattern-matching with infinite results.

39

Demonstration: Prime Numbers

40

Pattern-Matching against Nested Data Types

We can pattern-match against nested data types such as lists of sets and sets and sets.

41

Pattern Modularization with Lexical Scope

We can modularize patterns with pattern-functions, functions that receive patterns and return a pattern.

42

Pattern Modularization with Lexical Scope

A pattern-function has lexical scoping, patterns can be reused in a program without worry of name clash.

43

Demonstration: Mahjong

44

Demonstration: Mahjong

Two same tiles

Three consecutive tiles

Three same tiles

45

Demonstration: Mahjong

Two same tiles

Three consecutive tiles

Three same tiles

Seven twins or one twin + four shuntsu or kohtsu

46

Demonstration: Mahjong

Two same tiles

Three consecutive tiles

Three same tiles

Seven twins or one twin + four shuntsu or kohtsu

Pattern modularization makes programming more simple!

47

Play with Egison

48

Collections

49

Infinite Collections

50

Pattern Matching against Infinite Collections

Pattern matching against an infinite collection

51

Twin Prime Code on Homepage of Egison

52

Current Status

53

Egison Website

54

Online Tutorial

55

Online Demonstrations

56

Egison on an Online Media

57

Egison on Hacker News

Egison was actively discussed on Hacker News twice!

58

Egison Article on CodeIQ MAGAZINE

59

Egison will be Taught at the University of Tokyo by Prof. Hagiya

Egison will have a big impact on the academic world, too!

60

Access Map of the Website in Last Half Year (2014/4/23 – 2014/10/23)

Total session is 15,228

61

Growth of Community in This Year (2013/11/15 – 2014/10/25)

•  Mailing List Members •  Before: 12 – Only my friends •  Current: 23 – Communicating in English

•  Stargazers on GitHub •  Before: 12 – Only my friends •  Current: 242 – People from all over the world!

62

Extending Other Languages

63

Poker Hands Analyzer in Ruby

64

Public Response to Ruby Extension

10,466 views, 186 Hatena Bookmarks!

65

RubyKaigi 2014

Recently presented at RubyKaigi 2014!

66

Future Plans - Applications in the Real World -

67

Wide Range of Applications

•  Daily programming •  Can express complex tasks simply

•  Data access and analysis •  Work as the most elegant query language •  Can access the wide range of data types in a

unified way •  Natural language processing, Image

processing •  Can handle complex structures intuitively as

humans do in their mind •  AI (Mathematical expression handling)

•  Can handle various mathematical and abstract notions directly

68

Wide Range of Applications

•  Daily programming •  Can express complex tasks simply

•  Data access and analysis •  Work as the most elegant query language •  Can access the wide range of data types in a

unified way •  Natural language processing, Image

processing •  Can handle complex structures intuitively as

humans do in their mind •  AI (Mathematical expression handling)

•  Can handle various mathematical and abstract notions directly

69

Ideas of Software

•  Command line text editor •  Command line text editor that uses Egison

pattern-matching instead of regular expressions •  Chart analytics tool

•  Find patterns in charts (e.g. technical analysis of the financial markets)

•  In-memory database with Egison query •  Can access the wide range of data types in a

unified way •  SQL database client

•  Extract data using simple pattern-matching expressions instead of SQL

70

Wide Range of Applications

•  Daily programming •  Can express complex tasks simply

•  Data access and analysis •  Work as the most elegant query language •  Can access the wide range of data types in a

unified way •  Natural language processing, Image

processing •  Can handle complex structures intuitively as

humans do in their mind •  AI (Mathematical expression handling)

•  Can handle various mathematical and abstract notions directly

71

Query Example

•  Let’s consider a query that returns twitter users who are followed by “__Egi” but not follow back “__Egi”

id integer name string

User:

from_id integer to_id Integer

Follow:

72

SQL Version

•  Complex and difficult to understand •  Complex where clause contains “NOT EXIST” •  Subquery

73

Egison Version

•  Very Simple •  No where clauses •  No subquery

74

Egison Version

•  Very Simple •  No where clauses •  No subquery

Joining 4 tables

1. Get id of “__Egi” 2. Followed by ‘uid’ 3. But not follow back not 4. Get name of ‘fid’ Return the results

75

GUI Frontend

•  We can provide GUI for intuitive data access •  Data access for even non-engineers •  Engineers can concentrate on data analysis

76

Database in the Next Age

In the future, databases will be embedded and hidden in programming languages.

We will be able to handle databases directly and easily just as arrays and hashes in existing languages.

The pattern-matching of Egison will play a critical role for this future.

77

Wide Range of Applications

•  Daily programming •  Can express complex tasks simply

•  Data access and analysis •  Work as the most elegant query language •  Can access the wide range of data types in a

unified way •  Natural language processing, Image

processing •  Can handle complex structures intuitively as

humans do in their mind •  AI (Mathematical expression handling)

•  Can handle various mathematical and abstract notions directly

78

Wide Range of Applications

•  Daily programming •  Can express complex tasks simply

•  Data access and analysis •  Work as the most elegant query language •  Can access the wide range of data types in a

unified way •  Natural language processing

•  Can handle complex structures intuitively as humans do in their mind

•  AI (Mathematical expression handling) •  Can handle various mathematical and abstract

notions directly

•  Programs that find interesting things •  Programs that build math theories •  Programs that generate programs

79

My Mind Map on Programming Language

80

My Mind Map on Programming Language

81

My Mind Map on Programming Language

Egison is pioneering this field!

82

Improve Egison as the Programming Language

Function modularity

Type system Pattern matching

Egison (current) Egison next version

Function modularity

Type system Pattern matching

Lisp (before Scheme) Scheme ML, OCaml, Haskell

I am aiming to make Egison the perfect programming language.

83

Improve Egison as the Programming Language

Function modularity

Type system Pattern matching

Egison (current) Egison next version

Function modularity

Type system Pattern matching

Lisp (before Scheme) Scheme ML, OCaml, Haskell

I am aiming to make Egison the perfect programming language.

84

Thank you!

Please visit our website! http://www.egison.org

Follow us in Twitter @Egison_Lang

Let’s talk and collaborate with us! satoshi.egi@mail.rakuten.com

top related