rksoftware

Visual Studio とか C# とかが好きです

プログラミング言語 Swift (4) - クイックスタートが WSL 上で動いた!

Swift とは JVM 上で動くスクリプト言語だという事は知っています。
非常に有名なプログラミング言語であるにも関わらず、しかし事前知識はそれだけで他のことは全く知りませんでした。

こんな有名なプログラミング言語を知らないなんて、それは少し恥ずかしいな思い立って、プログラミング言語 Swift を調べてみます。少しずついくつかの記事にかに分けて調べていってみようと思います。

目次はこちら

rksoftware.hatenablog.com

クイックスタートの URL

今回やってみるクイックスタートの URL です。
http://swift-lang.org/guides/release-0.96/quickstart/quickstart.html
前回は Windows 用の起動 bat らしきファイルが見えたので Windows で試してみましたが動きませんでした。今回は WSL でやってみます。

■ WSL の準備

まずは Windows の WSL (Windows Subsystem for Linux) の準備です。ターミナルでコマンドを実行します。

wsl --install Ubuntu

今回は Ubuntu 22.04.01 がインストールされました。

■ swift コマンド実行

前回ダウンロードしていた swift コマンドを実行します。
http://swift-lang.org/packages/swift-0.96.2.tar.gz
http://swift-lang.org/guides/release-0.96/quickstart/hello.swift

xxxxxxxxxx@XXXXXXXXXX:/mnt/x/xxxxxxxxxxxx$ /mnt/x/xxxxxxxxxxxx/swift-0.96.2/bin/swift hello.swift
/mnt/x/xxxxxxxxxxxx/swift-0.96.2/bin/swift: line 178: java: command not found

java コマンドが見つからない、と怒られました。それはそうですね。Java をインストールします。

■ Java のインストール

Java のインストール方法はこちら。
learn.microsoft.com

# Valid values are only '18.04' and '20.04'
# For other versions of Ubuntu, please use the tar.gz package
ubuntu_release=`lsb_release -rs`
wget https://packages.microsoft.com/config/ubuntu/${ubuntu_release}/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install msopenjdk-17
$ java --version
openjdk 17.0.6 2023-01-17 LTS
OpenJDK Runtime Environment Microsoft-7209853 (build 17.0.6+10-LTS)
OpenJDK 64-Bit Server VM Microsoft-7209853 (build 17.0.6+10-LTS, mixed mode, sharing)

openjdk 17.0.6 がインストールされました。

■ 実行

満を持して実行!

$ /mnt/x/xxxxxxxxxxx/swift-0.96.2/bin/swift hello.swift
-Djava.endorsed.dirs=/mnt/c/Users/owner/Downloads/swift-0.96.2/lib/endorsed is not supported. Endorsed standards and standalone APIs
in modular form will be supported via the concept of upgradeable modules.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

エラーになりました。これは 前回 見たやつですね。
rksoftware.hatenablog.com

■ swift ファイルを編集

\swift-0.96.2\bin\swift ファイルを編集してみましょう。\swift-0.96.2\bin\swift ファイルの 44 行目です。

OPTIONS="$OPTIONS -Djava.endorsed.dirs=$SWIFT_HOME/lib/endorsed"

OPTIONS="$OPTIONS "

■ もういちど実行

$ /mnt/x/xxxxxxxxxxxx/swift-0.96.2/bin/swift hello.swift
Swift 0.96.2 git-rev: b9611649002eecd640fc6c58bbb88cb35ce03539 heads/release-0.96-swift 6287
RunID: run008
Progress: Xxx, xx Jan 2023 xx:xx:31+0900
Progress: Xxx, xx Jan 2023 xx:xx:32+0900  Active:1
Final status: Xxx, xx Jan 2023 xx:xx:32+0900  Finished successfully:1

うごいたっぽいです。

ここで実行した Swift のコードを見てみましょう。

// Define file as a type
type file;

// A simple app that echo's a string to a file
app (file output) echo (string s) {
   echo s stdout=@output ;
}

// Map a filename to a variable of type file
file output <"hello.out">;

// Call the app
output = echo("hi");

どうやら hello.out というファイルに hi と書き込むコードですね?

■ 実行結果確認

実際 hello.out というファイルが作られているので中身を見てみましょう。

hi

計画通り! 動作しました。

次回

次回こそ、チュートリアルをやって完全に理解したいと思います。