Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
[Rakuten TechConf2014] [D-2] The Pattern-Matching-Oriented Programming Language Egison
1. The Pattern-Matching-
Oriented Programming
Language Egison
- Express Intuition Directly with
Essentially New Syntax -
Vol.01䚷Oct/25/2014
Satoshi Egi
Rakuten Institute of Technology
http://rit.rakuten.co.jp/
2. 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. 3
What is Egison?
Egison is a programming language that realizes
non-linear pattern-matching even against data
that have no standard form.
Non-linear patterns allow multiple occurrences of same variables
in a pattern
Enumerate the elements of
the collection ‘xs’ that appear
more than twice
(match-all xs (multiset integer)!
[cons $x cons ,x _ x])!
Egison
pairs = []!
(1..n).each do |i|!
(i..n).each do |j|!
if xs[i] == xs[j]!
pairs = pairs +!
xs[i]!
end!
end!
end!
Ruby
7. 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. 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. 9
Profile of Egison
Egison is open-source software maintained on GitHub.
https://github.com/egison/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)
13. 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. 14
Matchers
A matcher specifies the way of pattern-matching.
15. 15
Matchers
A matcher specifies the way of pattern-matching.
16. 16
The ‘cons’ Pattern
The pattern constructor ‘cons’ divides a collection
into an element and the rest.
17. 17
The ‘cons’ Pattern
The pattern constructor ‘cons’ divides a collection
into an element and the rest.
32. 32
The Pattern for Two Pair
Matches with any suit
Matches with any card
33. 33
The Pattern for Two Pair
Same number with $m
Same number with $n
Matches with any suit
Matches with any card
34. 34
The Pattern for Two Pair
Same number with $m
Same number with $n
Matches with any suit
Matches with any card
Non-linear patterns have very strong power
35. 35
Demonstration: Poker Hands
Non-linear patterns enables to
represent all hands in a single pattern
36. 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. 37
Java Version
Just finding a pair of cards is already complex.
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;!
} !
}!
}!
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
40. 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. 41
Pattern Modularization with Lexical Scope
We can modularize patterns with pattern-functions,
functions that receive patterns and return a pattern.
42. 42
Pattern Modularization with Lexical Scope
A pattern-function has lexical scoping, patterns can be
reused in a program without worry of name clash.
45. 45
Demonstration: Mahjong
Two same tiles
Three consecutive tiles
Three same tiles
Seven twins or one twin + four shuntsu or kohtsu
46. 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!
59. 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. 60
Access Map of the Website in Last Half Year
(2014/4/23 – 2014/10/23)
Total session is 15,228
61. 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!
67. 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. 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. 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. 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. 71
Query Example
• Let’s consider a query that returns twitter
users who are followed by “__Egi” but not
follow back “__Egi”
User:
id integer
name string
Follow:
from_id integer
to_id Integer
72. 72
SQL Version
• Complex and difficult to understand
• Complex where clause contains “NOT EXIST”
• Subquery
74. 74
Egison Version
• Very Simple
• No where clauses
• No subquery
Joining 4 tables
1. Get id of “__Egi”
2. Followed by ‘uid’
not 3. But not follow back
4. Get name of ‘fid’
Return the results
75. 75
GUI Frontend
• We can provide GUI for intuitive data
access
• Data access for even non-engineers
• Engineers can concentrate on data analysis
76. 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. 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. 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
• Programs that find interesting things
• Programs that build math theories
• Programs that generate programs
• Can handle complex structures intuitively as
humans do in their mind
• AI (Mathematical expression handling)
• Can handle various mathematical and abstract
notions directly
81. 81
My Mind Map on Programming Language
Egison is pioneering this field!
82. Egison (current)
Egison next version
82
Improve Egison as the Programming Language
I am aiming to make Egison the perfect
programming language.
Function modularity
Lisp (before Scheme)
Scheme
ML, OCaml, Haskell
Type system Pattern matching
Function modularity
Type system Pattern matching
83. Egison (current)
Egison next version
83
Improve Egison as the Programming Language
I am aiming to make Egison the perfect
programming language.
Function modularity
Lisp (before Scheme)
Scheme
ML, OCaml, Haskell
Type system Pattern matching
Function modularity
Type system Pattern matching
84. 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