LoginSignup
1
0

日本語プログラミング言語 なでしこ3 Java C# でHello World実行時間を仲良く競う

Posted at

はじめに

日本語プログラミング言語 なでしこ3 とJava C# とで「Hello World」コンソール出力の反復実行時間を仲良く競い合わせてみます。ついに、なでしこ3コンソールで「Hello World」にもどってきました。

この記事内容の作業環境

Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.78.2
java Eclipse Adoptium jdk-20.0.2.9-hotspot
C# 10 dotnet-sdk-6.0.404-win-x64
nadesiko version 3.4.5 nadesiko3win32-3.4.5
Node.js v20.10.0.
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz

この記事内容の保証

※この記事の実行結果は参考情報です。実行環境に大きく依存します。

お題のソースコード

Java

main.java
import java.lang.System;
/**
* プログラム型
*/
class Program
{
    /**
    * メイン
    * @param args 引数
    */
    public static void main(String[] args) throws Exception
    {
        int countMax=0;
        int count=0;
        if (args.length != 1) {
            countMax=0;
        }
        try
        {
            countMax=Integer.parseInt(args[0]);
        }
        catch (Exception e)
        {
            countMax=0;
        }
        //開始時間(ナノ秒)
        long startTime = System.nanoTime();

        while(count < countMax){
            System.out.println("Hello World!");
            count+=1;
        }
        //終了時間(ナノ秒)
        long stopTime = System.nanoTime();
        long spanTime = stopTime - startTime;
        System.out.println("処理回数: " + count + "回");
        System.out.println("処理時間: " + (spanTime / 1000000) + "ミリ秒");

    }
}
}

C#

main.cs
using System;

/// <summary>プログラム型</summary>
class Program
{

    /// <summary>メイン</summary>
    /// <param name="args">引数</param>
    static void Main(string[] args)
    {
        int countMax=0;
        int count=0;
        if (args.Length != 1) {
            countMax=0;
        }else{
            try
            {
                countMax=int.Parse(args[0]);
            }
            catch (FormatException)
            {
                countMax=0;
            }
        }
 
        //開始時間(ミリ秒)
        DateTime startTime= new DateTime();
        DateTime stopTime = new DateTime();
        startTime = DateTime.Now;

        while(count < countMax){
            Console.WriteLine("Hello World!");
            count+=1;
        }
        //終了時間(ミリ秒)
        stopTime = DateTime.Now;
        TimeSpan st =stopTime-startTime;
        Console.WriteLine("処理回数: " + count + "回");
        Console.WriteLine("処理時間: " + st.TotalMilliseconds + "ミリ秒");

    }

なでしこ3

helloworld3.nako
countとは整数
countMaxとは整数

count=0
countMax=0

もし コマンドラインの配列要素数 < 2 ならば
  countMax=0
違えば
   エラー監視
     countMax=コマンドライン[1]を整数変換
  エラーならば
    countMax=0
    ここまで
ここまで

開始日時は、システム時間

(count < countMax)の間
  「Hello World!」を表示する
	count = count + 1
ここまで

終了日時は、システム時間
経過時間は、終了日時-開始日時

「処理回数:{count}回」を表示する
「処理時間:{経過時間}ミリ秒」を表示する
    

なでしこ(v3)のコンソールアプリケーション

なでしこ(v1)のソースコードとは若干の非互換があり調整しています。
起動引数のindexはNode.jsで2つ、なでしこで1つ使われるので3が正解でした。

実行結果

Java

C:\developments\java20>java -cp . Program 40000
Hello World!
・・・
Hello World!
Hello World!
Hello World!
処理回数: 40000回
処理時間: 4565ミリ秒

C:\developments\java20>

C#

C:\developments\cs6\HelloWorld\bin\Debug\net6.0>Helloworld 40000
Hello World!
・・・
Hello World!
Hello World!
Hello World!
処理回数: 40000回
処理時間: 4206.8631ミリ秒

C:\developments\cs6\HelloWorld\bin\Debug\net6.0>

なでしこ3

C:\nadesiko\sample1>helloworld3.nako.bat 40000
Hello World!
・・・
Hello World!
Hello World!
Hello World!
処理回数:40000回
処理時間:7267ミリ秒

C:\nadesiko\sample1>

実行結果まとめ

表1 「Hello World」コンソール出力の反復実行時間(ミリ秒)

実行回数 Java C# なでしこ3
40 8 16 15
400 72 57 120
4,000 563 468 899
40,000 4,565 4,206 7,267
400,000 42,618 40,075 67,793

※Java C#ナノ秒台は切り捨て

おわりに

いかがでしたでしょうか?コンソール出力を単純にループさせているだけですので、各言語、実装によってはいろいろな差異がでるものと思われますので、この件はあくまで参考情報です。

余談

余談ですが、ナデシコパッドでなでしこ3コンソールを実行させると、コマンドプロンプロが開いて生成されたbatが実行されるのですが、再現状況不明でnako.bakファイルが生成されずにbatが実行エラーになる場合がありました。
nako.bakファイルはソースのnakoファイルのコピーですが、このbatは直接nakoファイルを開かずnako.bakファイルをトランスパイラ本体に読み込ませているのですね。

エラー内容 C:\nadesiko\sample1>helloworld3.nako.bat [cnako3のエラー] Error: ENOENT: no such file or directory, open 'C:\nadesiko\sample1\helloworld3.nako.bak' at Object.readFileSync (node:fs:453:20) at CNako3.execCommand (file:///C:/nadesiko/node_modules/nadesiko3/src/cnako3mod.mjs:154:24) at file:///C:/nadesiko/node_modules/nadesiko3/src/cnako3.mjs:10:22 at file:///C:/nadesiko/node_modules/nadesiko3/src/cnako3.mjs:17:3 at ModuleJob.run (node:internal/modules/esm/module_job:218:25) at async ModuleLoader.import (node:internal/modules/esm/loader:329:24) at async loadESM (node:internal/process/esm_loader:34:7) at async handleMainPromise (node:internal/modules/run_main:113:12) { errno: -4058, code: 'ENOENT', syscall: 'open', path: 'C:\\nadesiko\\sample1\\helloworld3.nako.bak' }

C:\nadesiko\sample1>

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0