自己紹介
- 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-)
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
- clangでLLVM-IRにしてからJavaScriptにコンパイル(emcc)
- 結構大規模なものも動く
- 事前コンパイルのみ
- コンパイルが超早いtccをemscriptenに載せたらブラウザ上実行時コンパイル的な使用感でCが動くんじゃね?
- という発想は誰もがすると思うが、難しいのか動いてなさげ
C++
emscripten
- Cと同じく
- これがあるおかげでC/C++で作られたものが色々ブラウザで動くようになったロマン装置
D
- LDCというD->LLVMコンパイラ+emscriptenでできたという報告がありまぁす!
LLVM最強伝説
C#
Unity
- C# -(Mono)-> CIL -(IL2CPP)-> C++ -(emscripten)-> JavaScript
- ロマン変換。すごい。
- Unity付属で、単体で使うことはできない
- .NETプログラムをCILからJavaScriptに変換する
- C#に限らず.NET上の言語に使える模様
どちらも事前コンパイルのみ
Java
-
DoppioというJavaScript上で動くJREがあるらしく、動く
- 事前コンパイルのみ?
Scala
- JVM言語
- AltJSのように中間言語を通さずJavaScriptにコンパイルする形式
- 事前コンパイルのみ?
Kotlin
- JVM言語
- AltJSのように中間言語を通さずJavaScriptにコンパイルする形式
- 事前コンパイルのみ?
Lua
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
- Perl5とPerl6をJavaScriptにコンパイル可能
- miniperlベースなのでCバインディング以外は動く
その他
-
perl.js / plu
- microperl 5.16 (CPAN/POSIX/XS/Bundled 抜きのperl)ベース
- 2、3年前のもので止まっている
両方とも実行時コンパイル可能
Ruby
- Rubyがそこそこ読めるJavaScriptにコンパイルされる
- ブラウザ側のランタイムが若干貧弱
- node.js用もある
- 実行時コンパイル対応
- サーバー・クライアント共に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
Erlang
- Erlangのmatcherと末尾再帰とFRPとか使える状態でJSにコンパイル
-
-js(...)でJavaScript側に関数をエクスポートできる
$ erlc shen.erl
$ erlc -pa . fac.erl
Haskell
- 事前コンパイル
- Haskellランタイムを含むでかいファイルになる
- ghcjsよりJavaScriptとの接続がスムーズそう
fay / purescript / elm / idris(昔動いた)
- サブセットとかHaskell似とか思想は似ているとか有象無象
Go
- ほぼ全て(Nearly everything)に対応
- Enjというこれをつかったゲームエンジンが存在
- 実行時コンパイル対応
Swift
- 実行時コンパイル可能
- print()などはconsole.log()などに変換される
Delphi/Pascal
- Delphiで作られたGUIプログラムをそのままJavaScriptで実行可能な模様
- 可読可能なJavaScriptが吐かれる系
HSP
- WebGLサポートブラウザ(最近の大体全部)上で動作するHSP3Dishのランタイム
- LLVM, emscriptenを使っているとのこと
Gnuplot
- emscriptenでブラウザ対応をしたもの
- データとgnuplotのコードを入れればブラウザ上でsvgやpngが生成できる
VimScript
- 色々不完全らしいがそれっぽく変換できてはいる
- DOMとかは使えなさそうなので内部処理のみ実装可能そう
なでしこ
- 2005年に作られたkmyaccの試用目的に作られたプロジェクトっぽい
- 「計算/文字列/alert/変数」しか実装してないとのことで実用には使えなさそう
etc...
他にも色々ありそうだけど、時間切れなので終了!