DNXでC#以外の言語をコンパイルしてみよう
目次
- 目次
- DNXの可能性
- よろしいならば実装(インプリメント)だ
- 完成品
- IProjectCompiler を実装する
- IMetadataProjectReference を実装する
- 使ってみよう
- 終わり
DNXの可能性
DNX で C# 以外の言語を使えるのかと思って調べていたところ、 F# を動作させるためのライブラリが存在していることを発見しました。
(試してみましたが、 F# コンパイラが内部で NullReferenceException 起こしてうまくいかなかったです。)
この作者のブログには、 DNX で F# を動かしてみての感想などいろいろ書いてあるので参考にどうぞ。
で、これの何がイケてるかというと、コンパイラ部分も NuGet から取得できるということです。つまり DNX さえあればコンパイラをインストールすることなく、その場でコンパイルできてしまうんですね。夢が広がる。
NuGetにおける「dotnet」とか「.NETPlatform」とかいうやつ
CoreTweet からフォークして、通信部分の疎結合化をした LibAzyotter を DNX でビルドできるようにするなどしていました。
その中で出会った新たな NuGet のフレームワーク設定「dotnet」についてまとめておきます。
dotnet, .NETPlatform とは
dotnet は CoreCLR 向けアセンブリのターゲットです。詳しい経緯はよくわかりませんでしたが、 NuGet のコミットログを見る限り、もともと「core」だったものが、現在の「dotnet」になり、多くのフレームワークに対応する包括的な存在になりました。
「netcore」というのもありますが、たぶん WinRT とか UWP 用です。でもやってることは同じなのかな?
互換性のあるプラットフォーム
9/16 現在、以下のプラットフォームで「dotnet」のライブラリをインストールできます。たぶん。また、現在のところ「dotnet」は「dotnet50」を指します。
ソース: https://github.com/NuGet/NuGet3/blob/dee69ffe7153c5230d6d9ddb936d6ec55ec4f00a/src/NuGet.Frameworks/DefaultFrameworkMappings.cs
- netcore50
- net46
- net45
- dnx451
- sl5
- wp8
- dnxcore
- netcore
- uap
- win
- wpa
- Xamarin 系
このようにほとんどのプラットフォームをカバーできる PCL のような存在ですが、基本的に dotnet をターゲットとするライブラリをつくろうとすると、 System.Runtime に依存することになります。このパッケージは dnxcore50, net46, netcore50 と Xamarin 系にしか対応していないため、ターゲットにできるのは DNX, UWP, .NET 4.6 ということになります。
文化祭のためにつくったタイピングゲーム
文化祭お疲れ様でした。3年生なのでクラスの出し物もないので、初めて高校の文化祭をちゃんと回ってみました。今年は去年よりどこもクオリティが高かった印象です。我がコンピュータ部を除いて。
今年はタイピングゲームを作りました。本当はタイピングしながら陣取り合戦でもしようと思ってたのですが、夏休みを棒に振った挙句 AO 入試の準備をしたりしていたので、結局「相手が入力中の文字が見える」というハンデ付きネットワーク対戦タイピングゲームになりました。
ソースコードは GitHub に置いておきました。バイナリは SignalR 系ライブラリのライセンスをどう扱ったらいいのかわからない(調べるのがだるかった)ので配布していません。 VS2015 があればビルドできますので。
ローマ字自動生成がとても大変でした。小並感。
ついでに去年のもよろしくお願いします。
一昨年のは git で管理していなかったので zip で置いておきます。
http://junk.azyobuzi.net/ShinkeiYatsu.zip
最新のMonoを使いたい人ための mono-snapshot
こんばんは。課題やってない、文化祭のゲームもつくってない azyobuzin です。やはりブログは結論を先に書いておくほうが良いと学んだので無駄な経緯的前説はおいておいて本題をばばっと書いておきます。
ググればわかる基本的な使い方
http://www.mono-project.com/docs/getting-started/install/linux/ci-packages/ に各ディストリビューションでの mono-snapshot パッケージのインストール方法が書いてあります。 Debian リポジトリを試した結果、 2015/6 からの成功したビルドと昔のがぽつぽつ入っている感じです。
どれかひとつでもインストールすると
$ mono-snapshot This script will help you to set up your environment to use a snapshot package of Mono. To use it, run: . mono-snapshot APP/VER You have the following possible combinations of APP/VER: mono/2015.08.22+02.26.20 mono/20150501052837 Calling APP without specifying VER will load the latest version
といった具合にバージョンが選択できるようになります。表示にしたがって . mono-snapshot mono/VER
を実行すると
$ . mono-snapshot mono/2015.08.22+02.26.20 [mono-2015.08.22+02.26.20]$ mono --version Mono JIT compiler version 4.3.0 (tarball Sat Aug 22 02:46:14 UTC 2015) Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com TLS: __thread SIGSEGV: altstack Notifications: epoll Architecture: amd64 Disabled: none Misc: softdebug LLVM: supported, not enabled. GC: sgen
このように指定したバージョンの mono が実行できるよう Path が設定されます。.
をつけなければいけないのはこの先で説明するように、実行中のシェルの環境変数をいじりたいからです。
以下細かい話。 Debian 版でしか試していません。