Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TypeScriptをフォークしてEmojiScriptを作った話

uhyo
October 09, 2020

 TypeScriptをフォークしてEmojiScriptを作った話

uhyo

October 09, 2020
Tweet

More Decks by uhyo

Other Decks in Programming

Transcript

  1. TypeScriptをフォークして
    EmojiScript を作った
    2020-10-09 ⾃作プログラミング⾔語の集い
    @uhyo_

    View full-size slide

  2. 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

    View full-size slide

  3. 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)

    View full-size slide

  4. 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

    View full-size slide

  5. 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 = ⣿⣿

    View full-size slide

  6. 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バイト)

    View full-size slide

  7. TypeScriptがベース
    良い点
    – VSCodeサポートがついてくる
    – 型システムも最初からある
    – バックエンド実装が必要ない
    (JavaScriptにコンパイルできる)
    – TypeScriptにcontributeする練習
    になる(?)
    悪い点
    – どうあがいてもJavaScriptになる

    View full-size slide

  8. まとめ
    –EmojiScriptで⾃分を表現しよう!
    –絵⽂字のパースを実装するとUnicodeの勉強になる
    –https://github.com/uhyo/EmojiScript
    –絵⽂字追加のプルリクも⼤歓迎

    View full-size slide