rksoftware

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

プログラミング言語 Swift (3) - クイックスタート 失敗

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

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

目次はこちら

rksoftware.hatenablog.com

チュートリアルの URL

今回見つけた公式チュートリアルの URL です。
http://swift-lang.org/swift-tutorial/doc/tutorial.html

と思ったけどまずは クイックスタート

というところまで見てクイックスタートを見つけました。まずはこちらで環境を整えるチャレンジをしてみたいと思います。
http://swift-lang.org/guides/release-0.96/quickstart/quickstart.html

[ 最初に ] 今回の記事は成功しなかったパターンです

今回の記事は試してみて成功しなかったパターンです。うまくいかない方法を一つ見つけた、というやつです。実際高価値記事!

■ Java の準備

ドキュメントによると JDK 1.7 以上が必要という事です。私の環境には Microsoft OpenJDK 11 がインストール済みでした。
この Java でやっていきます。

■ Swift コマンド

次の URL から Java で作られた Swift コマンドをダウンロードします。
http://swift-lang.org/packages/swift-0.96.2.tar.gz

ダウンロードしたら tar コマンドで展開します。今の Windows には tar コマンドがあるので PowerShell のターミナルを開いて次のように。

tar xfz swift-0.96.2.tar.gz

展開してみると bin フォルダの中に swift.bat ファイルがありました。もしや Windows でも動くのか!? と思ったらダメでした。というのが今回の記事です。

■ swift.bat

実行してみると......動きません。

PS > \swift-0.96.2\bin\swift.bat
-Djava.endorsed.dirs=C:\Users\XXXXXXXXXXXX\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.

どうもこの -Djava.endorsed.dirs という Java の起動オプション、Java 9 以降には存在せずエラーになるようです。ということはこの bat、Java 8 以前、2017 年以前のものということですね。公式サイト等を見ていると Swift は 2016 年にほとんど止まっているようなのでそういうことなのでしょう。

とりあえず起動オプションを外してみます。場所は \swift-0.96.2\bin\swift.bat ファイルの 52 行目です。

set OPTS=-DCOG_INSTALL_PATH="%SWIFT_HOME%" -Dswift.home="%SWIFT_HOME%"%COG_OPTS% -Djava.endorsed.dirs="%SWIFT_HOME%\lib\endorsed"

set OPTS=-DCOG_INSTALL_PATH="%SWIFT_HOME%" -Dswift.home="%SWIFT_HOME%"%COG_OPTS% 

実行すると

PS > \swift-0.96.2\bin\swift.bat
Swift 0.96.2 git-rev: b9611649002eecd640fc6c58bbb88cb35ce03539 heads/release-0.96-swift 6287
No Swift script specified

動作はしました。ただ Swift で実行するコードを指定していないのでエラーになっています。

■ Swift のコード

環境はできたようなので、クイックスタートのコードファイルを次の URL からダウンロードします。
http://swift-lang.org/guides/release-0.96/quickstart/hello.swift

ダウンロードしたファイルの中のコードはこんな感じでした。これが 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");

■ もういちど Swift 実行

実行してみます。

PS > \swift-0.96.2\bin\swift.bat hello.swift
2023-01-22 XX:XX:XX,XXX+0900 DEBUG Loader Detailed exception:
com.typesafe.config.ConfigException$BadPath: path parameter: Invalid path 'env.=::': Token not allowed in path expression: '=' (you can double-quote this token if you really want it here)
        at com.typesafe.config.impl.Parser.parsePathExpression(Parser.java:1095)
        at com.typesafe.config.impl.Parser.parsePath(Parser.java:1135)
        at com.typesafe.config.impl.Path.newPath(Path.java:224)
        at com.typesafe.config.impl.PropertiesParser.fromPathMap(PropertiesParser.java:79)
        at com.typesafe.config.impl.ConfigImpl.fromAnyRef(ConfigImpl.java:260)
        at com.typesafe.config.impl.ConfigImpl.fromPathMap(ConfigImpl.java:200)
        at com.typesafe.config.ConfigFactory.parseMap(ConfigFactory.java:855)
        at com.typesafe.config.ConfigFactory.parseMap(ConfigFactory.java:866)
        at org.griphyn.vdl.util.SwiftConfig.getSubstitutions(SwiftConfig.java:336)
        at org.griphyn.vdl.util.SwiftConfig.load(SwiftConfig.java:253)
        at org.griphyn.vdl.karajan.Loader.loadConfig(Loader.java:598)
        at org.griphyn.vdl.karajan.Loader.main(Loader.java:148)
Could not start execution:
        path parameter: Invalid path 'env.=::': Token not allowed in path expression: '=' (you can double-quote this token if you really want it here)

動きません!

ちょっと Java のことは全然わからないので。org.griphyn.vdl.karajan is 何ぞ......。

次回

■ Swift はどうもかつては Windows でも動いていた形跡

Swift はどうもかつては Windows でも動いていた形跡があります。しかし動かなかったので、おとなしく次回は WSL で試してみようと思います。