ブラウザで動く言語色々



ブラウザで動く言語色々

0 1


meguro.es.2

meguro.es #2の発表

On Github Narazaka / meguro.es.2

ブラウザで動く言語色々

@narazaka

自己紹介

  • Twitter: @narazaka
  • Github: @Narazaka
  • npm: @narazaka
  • CPAN: NARAZAKA
  • ドリコム2015新卒 サーバーサイドRuby
  • 好きな言語: Perl / CoffeeScript / Ruby / C#
  • その他: 伺か/漫画読み描き/OPアニメ愛好家/鉄

!!!全然ECMAScriptじゃない!!!

ブラウザで動く言語色々

ブラウザでいろいろなことが出来るようになった しかし言語はJavaScriptのみ??? ネイティブと同じく色々な言語を使いたい! emscriptenとかあるし!

「ブラウザで動く(JavaScript以外の)言語」をおさらいしてみよう!

いにしえの先駆者たち

~ プラグインならなんでもできる ~

Java

(1995-)

  • ほぼ完全なJava環境「Javaアプレット」
  • Javaインストールで使えるようになる感じ
  • 普及率は割と高い

EdgeとChromeではもう使えない

VBScript / JScript

(1996-)

  • Internet Explorer 3.0から動作する
  • JScriptは JavaScript+COMサポート 的なもの
  • VBScriptはVBベース
    <SCRIPT LANGUAGE="VBScript">
    

IEのみでしか動かない(Edgeではサポート外)

ActionScript

(2001-)

  • Flash 5から搭載
  • ECMAScriptの拡張で、1.0はプロトタイプベース
  • iOS, Android>=4.1標準ブラウザでは利用不可
  • とはいえ依然普及率は非常に高い
  • Flash→HTML5変換ツールが色々

スマートフォン用デフォルトブラウザで動作不可

C# / F# / VB.NET / JScript.NET / (Iron)Ruby / (Iron)Python / PHP / PowerShell / Boo

(2007-)

  • Silverlightにより.NET上の言語が走りまくる
  • 環境普及率はいまいち

EdgeとChromeではもう使えない

Firefox等も順次サポート終了

JavaScriptが再ブレイクする前にも意外と沢山の(主にMS系)言語が走ってた

JavaScript上で走る言語

~ JavaScriptはasmなのか ~

AltJS勢

CoffeeScript/TypeScript/Haxe/Dart/JSX(DeNAのもの)/etc...

  • JavaScript生成言語たち
  • ES2015以降TS以外下火感
  • 事前/実行時コンパイル

ECMAScript 2015

~ Yet another AltJS ~

  • Edge、Chrome、Firefox以外対応のためコンパイル必要
  • 特に長く生き残る可能性のあるIE11がほとんど非対応

公式(?)なのに実質半分AltJS状態

ネットプログラマー奈良阪はWin10強制アップデートを応援しています(ぉ

ActionScript

Randori

  • ActionScriptをJavaScriptに変換するフレームワーク
  • jQueryなども使えるがActionScriptに変換したものを利用する模様

その他Flash->HTML5変換ツール

  • 色々

C

emscripten

  • clangでLLVM-IRにしてからJavaScriptにコンパイル(emcc)
  • 結構大規模なものも動く
  • 事前コンパイルのみ

tcc-for-emscripten

  • コンパイルが超早いtccをemscriptenに載せたらブラウザ上実行時コンパイル的な使用感でCが動くんじゃね?
  • という発想は誰もがすると思うが、難しいのか動いてなさげ

C++

emscripten

  • Cと同じく
  • これがあるおかげでC/C++で作られたものが色々ブラウザで動くようになったロマン装置

Objective-C?

emscripten?

Fortran

Use Emscripten with Fortran: LAPACK binding (Stack Overflow)

これもclangでllvm-irにしてからemscriptenかます方法でいけるらしいですよ!

LLVM最強伝説

D

EmscriptenとLDCを使えばD言語のSDLゲームがブラウザで動かせる、かも

  • LDCというD->LLVMコンパイラ+emscriptenでできたという報告がありまぁす!

LLVM最強伝説

C#

Unity

  • C# -(Mono)-> CIL -(IL2CPP)-> C++ -(emscripten)-> JavaScript
  • ロマン変換。すごい。
  • Unity付属で、単体で使うことはできない

JSIL

  • .NETプログラムをCILからJavaScriptに変換する
  • C#に限らず.NET上の言語に使える模様

どちらも事前コンパイルのみ

Java

  • DoppioというJavaScript上で動くJREがあるらしく、動く
  • 事前コンパイルのみ?

Scala

  • JVM言語
  • AltJSのように中間言語を通さずJavaScriptにコンパイルする形式
  • 事前コンパイルのみ?

Kotlin

  • JVM言語
  • AltJSのように中間言語を通さずJavaScriptにコンパイルする形式
  • 事前コンパイルのみ?

Ceylon

  • JVM言語
  • AltJSのように中間言語を通さずJavaScriptにコンパイルする形式
  • 事前コンパイルのみ?
    ceylon compile-js unit1.ceylon unit2.ceylon some_native_stuff.js unit3.ceylon
    

Lua

  • lua.vm.js
  • 完品のLuaが動くうえにJavaScriptとの連携もできる
local window = js.global -- global object in JS is the window
window:alert("hello from lua!")
window:setTimeout(function() print('hello from lua callback') end, 2500)

Perl

Perlito

  • Perl5とPerl6をJavaScriptにコンパイル可能
  • miniperlベースなのでCバインディング以外は動く

その他

  • perl.js / plu
  • microperl 5.16 (CPAN/POSIX/XS/Bundled 抜きのperl)ベース
  • 2、3年前のもので止まっている

両方とも実行時コンパイル可能

Ruby

Opal

  • Rubyがそこそこ読めるJavaScriptにコンパイルされる
  • ブラウザ側のランタイムが若干貧弱
  • node.js用もある
  • 実行時コンパイル対応

(Volt)

  • サーバー・クライアント共にRubyで書くWAF (Opal利用)
  • Ruby版Meteorのような趣がある

Python

Brython

  • Python3でJSを置き換えようという野心的プロジェクト
<script type="text/python3" src="test.py">
import time
import math
import datetime
from browser import document as doc
import browser.timer
...

PythonScript / Pyjaco / Pyjs

何故だかたくさんある 違いがわからん

多分どれも実行時コンパイル対応

PHP

php.js

  • PHP VMをブラウザで動かす
  • stdoutもconsole.logなどではなく変数に入るあたりが特徴か?
var engine = new PHP ('<?php echo "Hello world!"; ?>');
console.log( engine.vm.OUTPUT_BUFFER); // the outputted buffer from the script

Tcl

tcl.js

  • tclのサブセット
  • 実行時コンパイル

Erlang

shen

  • Erlangのmatcherと末尾再帰とFRPとか使える状態でJSにコンパイル
  • -js(...)でJavaScript側に関数をエクスポートできる
$ erlc shen.erl
$ erlc -pa . fac.erl

Haskell

ghcjs

  • 事前コンパイル
  • Haskellランタイムを含むでかいファイルになる

haste

  • ghcjsよりJavaScriptとの接続がスムーズそう

fay / purescript / elm / idris(昔動いた)

  • サブセットとかHaskell似とか思想は似ているとか有象無象

Go

GopherJS

  • ほぼ全て(Nearly everything)に対応
  • Enjというこれをつかったゲームエンジンが存在
  • 実行時コンパイル対応

Swift

ShiftJS

  • 実行時コンパイル可能
  • print()などはconsole.log()などに変換される

Delphi/Pascal

p2js

  • Delphiで作られたGUIプログラムをそのままJavaScriptで実行可能な模様
  • 可読可能なJavaScriptが吐かれる系

HSP

hsp3dish.js

  • WebGLサポートブラウザ(最近の大体全部)上で動作するHSP3Dishのランタイム
  • LLVM, emscriptenを使っているとのこと

Gnuplot

  • 科学系とかで使われるグラフ描画ソフトウェア

gnuplot-js

  • emscriptenでブラウザ対応をしたもの
  • データとgnuplotのコードを入れればブラウザ上でsvgやpngが生成できる

VimScript

vim-vimlparser

  • 色々不完全らしいがそれっぽく変換できてはいる
  • DOMとかは使えなさそうなので内部処理のみ実装可能そう

なでしこ

Javascript なでしこ(もどき)

  • 2005年に作られたkmyaccの試用目的に作られたプロジェクトっぽい
  • 「計算/文字列/alert/変数」しか実装してないとのことで実用には使えなさそう

etc...

他にも色々ありそうだけど、時間切れなので終了!

ブラウザで動く言語色々@narazaka