Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
TypeScriptをフォークしてEmojiScriptを作った話
uhyo
October 09, 2020
Programming
1
750
TypeScriptをフォークしてEmojiScriptを作った話
uhyo
October 09, 2020
Tweet
Share
More Decks by uhyo
See All by uhyo
ステート管理を超えるRecoil運用の考え方
uhyo
7
5.2k
ついに来る!TypeScript5.0の新機能
uhyo
16
8.7k
TypeScript 4.7と型レベルプログラミング
uhyo
5
4.5k
TypeScriptを振り回せ!
uhyo
26
7.9k
2020年代、使う技術はどう選ぶ?
uhyo
21
11k
ECMAScriptの視点で見るWeakRefの“正しい”使い方
uhyo
3
460
安全性の極北から見るTypeScript
uhyo
19
10k
Other Decks in Programming
See All in Programming
10年以上続くプロダクトの フロントエンド刷新プロジェクトのふりかえり
yotahada3
2
290
Gradle build: The time is now
nonews
1
310
Findy - エンジニア向け会社紹介 / Findy Letter for Engineers
findyinc
2
42k
AWSとCPUのムフフな関係
cmdemura
0
440
AWSにおける標的型Bot対策
hacomono
0
390
SHOWROOMの分析目的を意識した伝え方・コミュニケーション
hatapu
0
230
(新米)エンジニアリングマネージャーのしごと #RSGT2023
murabayashi
9
5.4k
Prácticas de Seguridad en Kubernetes
pablokbs
0
100
Jetpack Compose 完全に理解した
mkeeda
1
420
CDKでValidationする本当の方法 / cdk-validation
gotok365
1
150
社会人 20 年目エンジニア、発信で技術学びなおしてる話
e99h2121
1
130
Azure Functionsをサクッと開発、サクッとデプロイ/vscodeconf2023-baba
nina01
1
320
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
226
16k
Designing Experiences People Love
moore
130
22k
A designer walks into a library…
pauljervisheath
198
16k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
109
16k
Three Pipe Problems
jasonvnalue
89
8.9k
Code Reviewing Like a Champion
maltzj
508
38k
The Illustrated Children's Guide to Kubernetes
chrisshort
22
42k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
349
27k
The Art of Programming - Codeland 2020
erikaheidi
35
11k
Learning to Love Humans: Emotional Interface Design
aarron
263
38k
Practical Orchestrator
shlominoach
178
8.9k
A Tale of Four Properties
chriscoyier
149
21k
Transcript
TypeScriptをフォークして EmojiScript を作った 2020-10-09 ⾃作プログラミング⾔語の集い @uhyo_
EmojiScriptのコード例 fizzbuzz(n: ): { (i & ; i⏮n; i) {
(i⠏ ) { console.log("FizzBuzz") } (i⠃ ) { console.log("Fizz")/ } 0(i⠅ ) { console.log("Buzz")1 } 2 { console.log(i)3 } } } fizzbuzz(⠃⣨)4
EmojiScriptのコード例 fizzbuzz(n: ): { (i & ; i⏮n; i) {
(i⠏ ) { console.log("FizzBuzz") } (i⠃ ) { console.log("Fizz")/ } 0(i⠅ ) { console.log("Buzz")1 } 2 { console.log(i)3 } } } fizzbuzz(⠃⣨)4 function fizzbuzz(n) { for (var i = 0; i <= n; i++) { if (i % 15 === 0) { console.log("FizzBuzz"); } else if (i % 3 === 0) { console.log("Fizz"); } else if (i % 5 === 0) { console.log("Buzz"); } else { console.log(i); } } } fizzbuzz(1000); コンパイル後 (JavaScript)
EmojiScriptの⾔語仕様 (1)単純置換 fizzbuzz(n: ): { (i & ; i⏮n; i)
{ (i⠏ ) { console.log("FizzBuzz") } (i⠃ ) { console.log("Fizz")/ } 0(i⠅ ) { console.log("Buzz")1 } 2 { console.log(i)3 } } } fizzbuzz(⠃⣨)4
EmojiScriptの⾔語仕様 (2) 点字数値リテラル fizzbuzz(n: ): { (i & ; i⏮n;
i) { (i⠏ ) { console.log("FizzBuzz") } (i⠃ ) { console.log("Fizz")/ } 0(i⠅ ) { console.log("Buzz")1 } 2 { console.log(i)3 } } } fizzbuzz(⠃⣨)4 256進数で整数を記述できる 0= , 1=⠁, 2=⠂, 3=⠃, 4=⠄, …, 254=⣾, 255=⣿ ex) 1000 = 0x3e8 = ⠃⣨ 65535 = 0xffff = ⣿⣿
EmojiScriptの⾔語仕様 (3) 肌の⾊に対応 fizzbuzz(n: ): { (i & ; i⏮n;
i) { (i⠏ ) { console.log("FizzBuzz") } (i⠃ ) { console.log("Fizz")/ } 0(i⠅ ) { console.log("Buzz")1 } 2 { console.log(i)3 } } } fizzbuzz(⠃⣨)4 ⾃分を表現できるプログラミング⾔語 !"#$%& ZWJ Sequenceを正しくパースする対応 ex) ! = U+1F647 U+1F3FE U+200D U+2640 U+FE0F (UTF-8で17バイト)
TypeScriptがベース 良い点 VSCodeサポートがついてくる 型システムも最初からある バックエンド実装が必要ない (JavaScriptにコンパイルできる)
TypeScriptにcontributeする練習 になる(?) 悪い点 どうあがいてもJavaScriptになる
まとめ EmojiScriptで⾃分を表現しよう! 絵⽂字のパースを実装するとUnicodeの勉強になる https://github.com/uhyo/EmojiScript 絵⽂字追加のプルリクも⼤歓迎