Mono is a software platform designed to allow developers to easily create cross platform applications. Sponsored by Xamarin, Mono is an open source implementation of Microsoft's .NET Framework based on the ECMA standards for C# and the Common Language Runtime.
Mono
いつのまにか 3 系にアプデートされて C# 5.0 相当になり、async/await が使えるようになってた。
using System; using System.Threading; using System.Threading.Tasks; class Class1 { static void Main(string[] args) { new Class1().Invoke(); for (int i = 0 ; i <= 5 ; i++) { Console.WriteLine("●-" + i); Thread.Sleep(1); } } public async void Invoke() { await Hello().ContinueWith(x => Console.WriteLine(" 3 - ◯ => " + x.Result)); Thread.Sleep(1); Console.WriteLine(" 4 - ◯ "); } private async Task<bool> Hello() { bool ret = await new TaskFactory().StartNew(() => { Console.WriteLine(" 1 - ◯ "); }).ContinueWith(x =>{ Console.WriteLine(" 2 - ◯ "); return true; }); return ret; } }
コンパイル時のデフォルトは .Net4.0 になっているようなので、4.5 を指定する必要がある。この指定方法が分からずにだいぶハマった・・・。
dmcs -sdk:4.5 TestAcync.cs
実行
$ mono TestAsync.exe 1 - ◯ ●-0 2 - ◯ ●-1 3 - ◯ => True ●-2 4 - ◯ ●-3 ●-4 ●-5
無事できましたっと。
vim-quickrun
くいっくるんで実行したい場合の設定。
let g:quickrun_config['cs'] = { \ 'exec': ['%c -sdk:4.5 %o -out:%s:p:r.exe %s', 'mono %s:p:r.exe %a'], \ }
システムデフォルトの設定を変更できる方法があるのかもしれないけどよく分からない。
Xamrin Studio
visual studio なくてもできそう。プロジェクトファイルも visual studio 2012 相当で作るっていう設定もある。試しに開いてみる
Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HelloWorld", "HelloWorld\HelloWorld.csproj", "{18672E83-0FC4-4D27-BB55-E4BDF76A651A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x86 = Debug|x86 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {18672E83-0FC4-4D27-BB55-E4BDF76A651A}.Debug|x86.ActiveCfg = Debug|x86 {18672E83-0FC4-4D27-BB55-E4BDF76A651A}.Debug|x86.Build.0 = Debug|x86 {18672E83-0FC4-4D27-BB55-E4BDF76A651A}.Release|x86.ActiveCfg = Release|x86 {18672E83-0FC4-4D27-BB55-E4BDF76A651A}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(MonoDevelopProperties) = preSolution StartupItem = HelloWorld\HelloWorld.csproj EndGlobalSection EndGlobal
その他、.csproj とか AssemblyInfo.cs も見たことある感じ。iOS と Android のプロジェクトも作れるようだからすごいなぁ。
visual studio バカ高いし、Mac や Linux でも動作する環境というのはうれしいなぁ。機能的にはまだまだなのかもしれないけど。
開発するためだけに年間いくらお布施するんだってのが・・・辛い。高い。
OmniSharp
久々に導入してみたけど、sntax エラーは教えてくれるけど、クラス名が違うとかは教えてくれないし、:OmniSharpBuild すると必ず Build Failed って出るし・・・・よくわからないので保留・・・