主に競技プログラミングのための環境を整える。つまりアプリを作るようなプロジェクトベースではなく、実行して入力を得て出力するだけのCLIのような感じの使い方。
環境
- macOS 10.15.5
- 最近HighSierraからアプデしたけどバッテリー抑制機能に対応してない機種だったのでぴえん
- VisualStudio Code 1.45.1
mono
なんでC#(dotnet)じゃないのかというと、上記目的に沿うような使い方が不明であったため。コマンド一発で特定のcsファイルを実行したいだけなのだが、marketplaceでC#と検索すると出てくるMS公式の拡張機能ではプロジェクト単位でdotnet new
する方法が主流らしく、書き捨てのコードを書くのには非常に使い勝手が悪い。それ用の使い方があるのかもしれないがよくわからん
その点monoならばmcs
かcsc
で任意のファイルをコンパイル、mono
でrun、でいいので、適当にタスクを割り当てればよさそうだったのでそうすることにした。
monoを入れる
brew install mono
でいけた(気がする)
$ mono -V Mono JIT compiler version 6.8.0.123 (tarball Fri May 15 17:28:53 BST 2020) Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
バージョンは6.8.0.123。対応しているバージョンはcsc /langversion:?
で分かるらしい。
$ csc /langversion:? Supported language versions: default 1 2 3 4 5 6 7.0 7.1 7.2 7.3 8.0 (default) latestmajor preview
試してみる
コンパイラのmcs
とcsc
の違いは実はよくわかってないのだがよりモダンなのはcsc
らしい。
atcoderの言語アップデート時のご意見箱(このスプレッドシート)に書いてある実行スクリプトを参考にtasks.json
にぶちこむ。
"tasks": [ { "label": "compile", "type": "shell", "command": "csc", "args": [ "-warn:0", "-o+", "-unsafe", "-r:System.Numerics.dll", "-langversion:latest", "-out:${fileBasenameNoExtension}.exe", "${file}", ], "options": { "cwd": "${workspaceFolder}" }, "problemMatcher": [], "group": { "kind": "build", "isDefault": true } }, { "label": "run(output)", "type": "shell", "command": "mono", "args": [ "${fileBasenameNoExtension}.exe" ], "options": { "cwd": "${workspaceFolder}" }, "dependsOn": "compile", "problemMatcher": [], "group": { "kind": "build", "isDefault": true } }, { "label": "run(only)", "type": "shell", "command": "rm", "args": [ "${fileBasenameNoExtension}.exe" ], "options": { "cwd": "${workspaceFolder}" }, "dependsOn": "run(output)", "problemMatcher": [], "group": { "kind": "build", "isDefault": true } }, ]
これで ⌘
+Shift
+B
でrun(only)
タスクを呼ぶと、コンパイル・実行・実行ファイル削除までできる。