unity3dにおけるus c# boo比較

64
US,C#,Boo 比較 九州大学芸術工学部 3 年 花田 恒一 1343日水曜日

Upload: nobukazu-hanada

Post on 25-Jun-2015

8.898 views

Category:

Technology


0 download

DESCRIPTION

Unity-Fukuoka勉強会のLT資料だったものです。後日これの完全版を上げます。

TRANSCRIPT

Page 1: Unity3dにおけるus c# boo比較

US,C#,Boo比較九州大学芸術工学部3年 花田 恒一

13年4月3日水曜日

Page 2: Unity3dにおけるus c# boo比較

じこしょうかい!

Nobukazu Hanada

@nobkz

好きな言語 LISP

Unity3dはとりあえず1年ぐらい

13年4月3日水曜日

Page 3: Unity3dにおけるus c# boo比較

ちょっと、謝っておきたい事がありまして...

13年4月3日水曜日

Page 4: Unity3dにおけるus c# boo比較

このスライドを作成した時の事

13年4月3日水曜日

Page 5: Unity3dにおけるus c# boo比較

調子に乗って、どんどんスライドを追加していた結果

13年4月3日水曜日

Page 6: Unity3dにおけるus c# boo比較

200枚超えちゃいました!

13年4月3日水曜日

Page 7: Unity3dにおけるus c# boo比較

どう考えてもLTの枚数ではないですね...

13年4月3日水曜日

Page 8: Unity3dにおけるus c# boo比較

なので、すごく内容を圧縮&削ってます

13年4月3日水曜日

Page 9: Unity3dにおけるus c# boo比較

えっと、ところどころ飛躍してたりするかもしれないのでご容赦ください

(なんとか、60枚程度に圧縮しました)

13年4月3日水曜日

Page 10: Unity3dにおけるus c# boo比較

Unityのサポート言語につい

13年4月3日水曜日

Page 11: Unity3dにおけるus c# boo比較

サポートされている言語

JavaScript ( UnityScript )

C#

Boo

13年4月3日水曜日

Page 12: Unity3dにおけるus c# boo比較

先に結論から書くと...UnityScript ( JavaScript )

ゲームオブジェクトのふるまいが書きやすい

C#

主にゲームロジックやらライブラリやら(ry

Boo

Unity3d最強の言語

13年4月3日水曜日

Page 13: Unity3dにおけるus c# boo比較

比較するまえに

13年4月3日水曜日

Page 14: Unity3dにおけるus c# boo比較

Unityアーキテクチャ

Unity Engine Unity Editor Unity3d

共通言語基盤(CLI).NET Framework / Mono

13年4月3日水曜日

Page 15: Unity3dにおけるus c# boo比較

CLIとは

.Net Frameworkの基幹を構成する実行コードや実行環境などについてMSが策定した仕様

CLI、C#言語共に仕様は公開されている。

Microsoft .NET Framework

MSの商用実装

Mono

オープンソースの実装

13年4月3日水曜日

Page 16: Unity3dにおけるus c# boo比較

Monoとは

.NET Framework互換環境

CLIのオープンソースの実装

Javaと同じ中間コード方式

(JVM => CLR, バイトコード => CIL )

13年4月3日水曜日

Page 17: Unity3dにおけるus c# boo比較

中間コードが生成できれば、どんな言語だって使える

13年4月3日水曜日

Page 18: Unity3dにおけるus c# boo比較

中間コード化されるので言語による速度の差はない

どの言語も適度に最適化すればおk

13年4月3日水曜日

Page 19: Unity3dにおけるus c# boo比較

US,C#,Boo各言語紹介

13年4月3日水曜日

Page 20: Unity3dにおけるus c# boo比較

とりあえず、JS(US)から

13年4月3日水曜日

Page 21: Unity3dにおけるus c# boo比較

JavaScriptはみんな知ってるよね?けど、Unityの「JS」はJSじゃないんだ。

13年4月3日水曜日

Page 22: Unity3dにおけるus c# boo比較

UnityScriptと呼びなさい!

13年4月3日水曜日

Page 23: Unity3dにおけるus c# boo比較

と、いうわけでUSとJSの違いをまとめてみたお!(ちょっと、過去のVersionのUnity3dで検証したから

ところどころ変わってるかも)

13年4月3日水曜日

Page 24: Unity3dにおけるus c# boo比較

UnityScript! JSって呼ぶな!

型指定できる

標準グローバルオブジェクトが存在しない

argumentオブジェクトが存在しない

prototypeが存在しない

classがあるよ

13年4月3日水曜日

Page 25: Unity3dにおけるus c# boo比較

US!JSって呼ぶな part2

ダッグタイピングできない

interfaceがある

なのに、抽象クラスが書けない

メソッド名がpascal記法

関数のオーバーロードが出来る

最新版では書けるみたい

13年4月3日水曜日

Page 26: Unity3dにおけるus c# boo比較

US!JSって呼ぶな part3

動的なメンバの追加はできない

一度に複数の変数を宣言できない

generics method,class が中途半端に使える

13年4月3日水曜日

Page 27: Unity3dにおけるus c# boo比較

つまりは、USはJS風のC#!

13年4月3日水曜日

Page 28: Unity3dにおけるus c# boo比較

そもそもUnityScriptは、CLI上で走る言語BooをDSLホスト言語として作ったJavaScript風の言語。

要するにBooの劣化版

13年4月3日水曜日

Page 29: Unity3dにおけるus c# boo比較

C#について

13年4月3日水曜日

Page 30: Unity3dにおけるus c# boo比較

ご存知だと思うからパス!

13年4月3日水曜日

Page 31: Unity3dにおけるus c# boo比較

あ、どの言語にも言えることだけどGCの動きだけは注意してね

知らない間にメモリリークしてるかもよ

13年4月3日水曜日

Page 32: Unity3dにおけるus c# boo比較

Boo言語について

13年4月3日水曜日

Page 33: Unity3dにおけるus c# boo比較

Boo言語とは?Pythonライクな、CLI上で走る言語

静的片付け

C#よりも短く書ける

強力なメタプロ

RodrigoB.DeOliveira 設計、開発

13年4月3日水曜日

Page 34: Unity3dにおけるus c# boo比較

Boo言語とは( Pythonぽい)

インデントが文法

リスト内包表記ができる

ダックタイピングができる

匿名関数が書きやすい気がする。

13年4月3日水曜日

Page 35: Unity3dにおけるus c# boo比較

BooについてC#より

型定義

ちゃんとしたinterface

プロパティメソッド

ちゃんとしたgenerics

13年4月3日水曜日

Page 36: Unity3dにおけるus c# boo比較

Booのソースコード

13年4月3日水曜日

Page 37: Unity3dにおけるus c# boo比較

サンプルとしてTetromino(テトリスミノ)クラスの実装

13年4月3日水曜日

Page 38: Unity3dにおけるus c# boo比較

これをコンパイルして、DLLファイルをC#に逆アセンブリしてコード整形

してみた。

13年4月3日水曜日

Page 39: Unity3dにおけるus c# boo比較

なんかごちゃごちゃ

13年4月3日水曜日

Page 40: Unity3dにおけるus c# boo比較

Pythonのインデント文法の良さが分かるよねー

13年4月3日水曜日

Page 41: Unity3dにおけるus c# boo比較

Unity3dのスクリプティングにおける、各言語の差異について

13年4月3日水曜日

Page 42: Unity3dにおけるus c# boo比較

position.x = 1のについて

13年4月3日水曜日

Page 43: Unity3dにおけるus c# boo比較

C#で書いたやつ

13年4月3日水曜日

Page 44: Unity3dにおけるus c# boo比較

安定のエラー

13年4月3日水曜日

Page 45: Unity3dにおけるus c# boo比較

JS Boo

これらはOK。エラーは出ない。

13年4月3日水曜日

Page 46: Unity3dにおけるus c# boo比較

なんでエラーなるのか?

Vector3dは参照型のクラスない

Vector3dは値型の構造体

だからエラーがでる。

13年4月3日水曜日

Page 47: Unity3dにおけるus c# boo比較

じゃあ、なんでBooやUSでエラーが出ないのよさ?

13年4月3日水曜日

Page 48: Unity3dにおけるus c# boo比較

なんか、コンパイル時にUnity3dがなんとかしてくれるらしいよ。

13年4月3日水曜日

Page 49: Unity3dにおけるus c# boo比較

逆アセンブルすると分かるよ

13年4月3日水曜日

Page 50: Unity3dにおけるus c# boo比較

つまり、ちゃんとコンパイル時にちゃんと「構造体をコピーしたものを修正して、

再代入」するように変換してくれてるんだ

13年4月3日水曜日

Page 51: Unity3dにおけるus c# boo比較

USの場合は、ホスト言語がBooなので、同様の処理が走るよ。

13年4月3日水曜日

Page 52: Unity3dにおけるus c# boo比較

Booが神なことについて

13年4月3日水曜日

Page 53: Unity3dにおけるus c# boo比較

USまとめ

USは結局のところJavascript風のBoo

US独自言語なので、Unityに依存しないライブラリを作れない。

再利用がなかなかしずらい。

13年4月3日水曜日

Page 54: Unity3dにおけるus c# boo比較

C#まとめ

一応なんでもできる。

position.xの書きづらさ

Booの言語機能と比べると、若干劣る。(リスト内包表記など)

13年4月3日水曜日

Page 55: Unity3dにおけるus c# boo比較

Booまとめ

神言語( Unity3dでは最も良い言語だと思う)

悲しいかなBooを使う人がなかなかいない

ドキュメントが少ない

MonoDevelop-UnityのBooで、IDEがちょっとオカシイ。(補完とか、テンプレートを開くところ)

13年4月3日水曜日

Page 56: Unity3dにおけるus c# boo比較

ちょっと補足スクリプトのライブラリ生成場所

US

Library/ScriptAssemblies/Assembly-UnityScript.dll

C#

Library/ScriptAssemblies/Assembly-CSharp.dll

Boo

Library/ScriptAssemblies/Assembly-Boo.dll

13年4月3日水曜日

Page 57: Unity3dにおけるus c# boo比較

補足2

ちなみに、外部ライブラリはAssetとして登録

そうすると自動的にプロジェクトの参照に追加される

13年4月3日水曜日

Page 58: Unity3dにおけるus c# boo比較

さらに補足:スクリプトの戦略として

13年4月3日水曜日

Page 59: Unity3dにおけるus c# boo比較

自分の場合できるだけ、Unity3dに依存しない、ポータブルな外部ライブラリを作ることを心がけてます。

というか、プログラミング全般として、ロジックの分離って大事だよね。

外部ライブラリはF#か、Booで僕は書くようにしています(どーでもいい)

13年4月3日水曜日

Page 60: Unity3dにおけるus c# boo比較

依存関係に注意

Unityへの依存

.Netへの依存(バージョンとか)

プラットフォームの依存

13年4月3日水曜日

Page 61: Unity3dにおけるus c# boo比較

更に補足(最後です)

13年4月3日水曜日

Page 62: Unity3dにおけるus c# boo比較

異なる言語間アクセス

基本的に、US、C#、Booは同じアセンブリにコンパイルされないので、単純にアクセスできない。

特別なフォルダとしてStandard Assets、Pro Standard Assets、Pluginsフォルダのスクリプトが一番最初にコンパイルされる

13年4月3日水曜日

Page 63: Unity3dにおけるus c# boo比較

異種言語間アクセスその2

よって異なる言語のコードを参照したい場合Standard Assets、Pro Standard Assets、Pluginsフォルダに置いてCILにコンパイルさせて、参照するようにする。

例えば、C# -> USにアクセスしたい場合、USをこれらのフォルダに格納する。(実演。)

13年4月3日水曜日

Page 64: Unity3dにおけるus c# boo比較

ご清聴ありがとうございました。

13年4月3日水曜日