CSharpScriptとgo言語でHello World – 20250324

ブログ コンピュータ
ブログ

以前C#の単体のソースコードを実行できないか試行錯誤してみたことがあります。ただ、一時的にC#のコードを試したいだけであれば、CSharpのScriptという選択肢があることに気が付きました。

CSharpScriptを使えるようにするには以下のコマンドを実行します。

dotnet tool install -g dotnet-script

(実行条件:dotnet SDKがインストールされていること)

csxスクリプトを保存するディレクトリで以下のコマンドを実行しておく。

dotnet script init
Creating VS Code launch configuration file
...'H:\csharp\dotnet8\csx\.vscode\launch.json' [Created]
Creating OmniSharp configuration file
...'H:\csharp\dotnet8\csx\omnisharp.json' [Created]
Creating default script file 'main.csx'
Creating 'main.csx'
...'H:\csharp\dotnet8\csx\main.csx' [Created]

vscode用の設定ファイルとHello Worldスクリプト(main.csx)を生成してくれる模様

後は拡張子をcsxでスクリプトファイルを用意します。
ファイル名:hello.csx

Console.WriteLine("Hello, World!");

c#のコンソールプロジェクトの様にトップレベルステートメントに直接コードを記述することが出来ます。

スクリプトファイルが用意出来ましたらpowershellで実行してみます。

dotnet-script hello.csx # Hello, World

実行時間の計測

Measure-Command{ dotnet-script hello.csx }

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 2
Milliseconds      : 100
Ticks             : 21003558
TotalDays         : 2.43096736111111E-05
TotalHours        : 0.000583432166666667
TotalMinutes      : 0.03500593
TotalSeconds      : 2.1003558
TotalMilliseconds : 2100.3558

初回実行で2秒ちょっとは少し遅いか?

コードを書いて即実行することが出来るようになりました。

ビルドが速いと噂のGo言語のHello Worldの速度を計測してみます。

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}
go run hello.go
Hello, World!
Measure-Command{ go run hello.go }

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 2
Milliseconds      : 866
Ticks             : 28662003
TotalDays         : 3.31736145833333E-05
TotalHours        : 0.00079616675
TotalMinutes      : 0.047770005
TotalSeconds      : 2.8662003
TotalMilliseconds : 2866.2003

2.8秒ぐらいですのでdotnet-scriptより遅い結果になりました。

PowerShellスクリプトのHello Wordlとの実行時間計測

スクリプトの内容

Write-Host "Hello, World!"
Measure-Command{ pwsh -f hello.ps1 }

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 1
Milliseconds      : 302
Ticks             : 13024097
TotalDays         : 1.50741863425926E-05
TotalHours        : 0.000361780472222222
TotalMinutes      : 0.0217068283333333
TotalSeconds      : 1.3024097
TotalMilliseconds : 1302.4097

1.3秒

ちなみに実行しているノートPCのCPUはIntel Celeron 3965UとWindows11に成れない古めのローエンドクラスですので、今時の平均的スペックなPCであれば、より短い時間になるでしょう。

シェルスクリプトと中間言語タイプとネイティブなバイナリを生成する3つ計測してみて、個人的にgo言語のコンパイルスピードに心惹かれました。

 

 

コメント