Windows GraalVM 㧠Clojure 製CLI ãã¼ã«ã® native-image ä½ã£ã¦ã¿ã
2020/07/01 追è¨
GraalVM 20.1.0åºãã®ã§
ã¤ã³ã¹ãã¼ã«ãã¦ãæ native-image
ã gu install native-image
ã§å
¥ãããã¨ããæã«
å
¥ããããªãã£ãã®ã§ãã¼ã«ã«ã§ã¤ã³ã¹ãã¼ã«ããæé ã追å ã20.0 ã§ãåã PKIX ãªãã¡ããã®ã¨ã©ã¼ã ã£ãã®ã§
ãããã証ææ¸ããããã¯ã¼ã¯ã®åé¡ã ã¨æã keytool
ã§è²ã
ãã£ã¦ããä¸æãè¡ããªãã£ãã®ã§ã
GraalVM 20.0.0
ã«ãªã£ã¦ native-image
ã® Windows 対å¿ã experimental ã¯ã¾ã åãã¦ãªãã
improves significantly
ãªç¶æ
ã«ãªã£ããããªã®ã§ããããã©ãããªã¨è©¦ãã¦ã¿ãã
- 2020/07/01 追è¨
- èªåã® native-image ã®ç解
- ãã«ãå®äºã¾ã§ã®æé
- æ¯è¼
- ãã«ãã§ããã¾ã§ã«èª¿ã¹ãäº
èªåã® native-image
ã®ç解
- JDK, JRE ç¡ãã§åä½åä½ãã exe ãä½ãã
- JVM èµ·åæéãç¡ãããããã°ã©ã ã®èµ·åãéã
- èµ·åå¾ã®åä½ã«ã¤ãã¦ã¯ JVM ã§åä½ãããã®ã¨æ¯ã¹å¿
ãããéãã¨ã¯éããªã
- æ¤è¨¼ãã人ã«ããã°ãããé ãããã
ä»ã§ãè¨ããã¦ãããããããªãJava(Clojure)製ã¢ããªã®é å¸ã大å楽ã«ãªããéçºã§ã¯ãªããä»äºã§å¿ è¦ã«å¿ãã¦ã¡ããã¡ãã CLI ãã¼ã«ãä½ã£ã¦ããèªåã«ã¨ã£ã¦ã¯åããæ°ã«ãªã£ã¦ããã
ãã«ãå®äºã¾ã§ã®æé
Graal VM æ¬ä½ JDK11 ã¤ã³ã¹ãã¼ã«
å
¬å¼GithubããWindowsçã®graalvm-ce-java11-windows-amd64-xx.x.x.zip
ããã¦ã³ãã¼ã(xx.x.x ã¯ææ°çãä»å㯠20.0.0)
ãããå±éãããã©ã«ãã®bin
ã PATH ã«éãã¦ããã
èªåã¯æ¢ã«å
¥ãã¦ãã OpenJDK13 ã¨ç«¶åããªããã JAVA_HOME
ç°å¢å¤æ°ã
GraalVM ã®æ¹ã¸åãæ¿ããPATH
ã« %JAVA_HOME%\bin
ãè¨å®ããã
java -version
ã§è¡¨ç¤ºãããä¸ã« GraalVM ãè¦ãã¦ããã° OKã
Native Image ã³ã³ãã¼ãã³ãã¤ã³ã¹ãã¼ã«
GraalVM 20.0.0 ãªãªã¼ã¹ãã¼ã
ã«ãã㨠Native Image ã³ã³ãã¼ãã³ã㯠GraalVM ãã¤ã³ã¹ãã¼ã«ãããã©ã«ãã® bin
以ä¸ã«ãã gu
çµç±ã§ã¤ã³ã¹ãã¼ã«ãã¦ãã¨ããã®ã§ããã«å¾ããgu
ã£ã¦ã®ã¯ GraalVM Updater
ã®äºãããã
å
¬å¼ããã¥ã¡ã³ãã®Installation from Catalog
ã®é
ç®ã«ããã¨ä»¥ä¸ã§ãã¦ã³ãã¼ãã»ã¤ã³ã¹ãã¼ã«ã¾ã§ãã¦ãããã
gu install native-image
ä»ã«ã©ããªã³ã³ãã¼ãã³ããå
¥ããããã®ãã¯gu available
ã§ä¸è¦§ãåºãã
Windows ã 㨠20.0.0 æç¹ã§ã¯ native-image
ã®ã¿ã®æ¨¡æ§ãä» OS ã 㨠Ruby ã¨ãã®ã³ã³ãã¼ãã³ãããã®ããªï¼
gu install native-image
ã§å¤±æããå ´å [2020/07/01 追è¨]
ãã¼ã«ã«ã«ã³ã³ãã¼ãã³ãããã¦ã³ãã¼ããã¦ãã gu ã§ãã¡ã¤ã«æå®ãã¦ãã¼ã«ã«ã¤ã³ã¹ãã¼ã«ãå¯è½ã 試ããã®ã¯ GraalVM 20.1.0ã
Github ã®ãªãªã¼ã¹ãã
Windows ã 㨠graalvm-ce-java8-windows-amd64-20.1.0.zip
ããã¦ã³ãã¼ããã
ã³ãã³ãããã³ããã§ãã¦ã³ãã¼ããããã©ã«ãã«ç§»åã gu -L install graalvm-ce-java8-windows-amd64-20.1.0.zip
ã¨ããã
>gu -L install native-image-installable-svm-java11-windows-amd64-20.1.0.jar Processing Component archive: native-image-installable-svm-java11-windows-amd64-20.1.0.jar Installing new component: Native Image (org.graalvm.native-image, version 20.1.0)
å ¬å¼ããã¥ã¡ã³ã ã§ã¯ Enterprise çã§ã®èª¬æã«ãªã£ã¦ãã Community çã§ãåæ§ã«ã§ããã¿ããã
Visual Studio 2019 ã¤ã³ã¹ãã¼ã«
native-image ã§åä½åä½ãã exe ãä½ãã«ã¯ã©ããã C/C++ ã³ã³ãã¤ã©ãå¿ è¦ããããã¾ã Windows ã§ã¯ ã³ã³ãã¤ã©ã§ exe ãä½ãã®ã«å¿ è¦ãªããããã©ã¤ãã©ãªããããããæå®ããç¶æ ã§ç«ã¡ä¸ããéçºè ç¨ã³ãã³ãããã³ãããã native-image ã å®è¡ããå¿ è¦ãããã¿ããã
ã§ãããããæºããã«ã¯ãã®è¨äºæç¹ã 㨠Visual Studio 2019 ãã¤ã³ã¹ãã¼ã«ããå¿ è¦ãããã
ãã ãã®è¾ºãã¯ä¸æãåããæ¨æ¸¬ã§è©±ãã¦ããã®ã§ééã£ã¦ãããä½è¨ãªæé ããããããããªãã
å®éã®æé
- Visual Studio 2019ã®ã¤ã³ã¹ãã¼ã©ãã¦ã³ãã¼ã
- ã¤ã³ã¹ãã¼ã©èµ·åå¾ã
ã¯ã¼ã¯ãã¼ã
ã§C++ã«ãããã¹ã¯ãããéçº
ãé¸æ
ãµã¤ãºããã«ãã®ã§ãã°ããå¾ ã¤ã
lein-native-image ã®ã¤ã³ã¹ãã¼ã«ã»è¨å®
leiningen ã®ã¿ã¹ã¯ã§ native-image ãçæãã¦ããã lein-native-image ã¨è¨ããã©ã°ã¤ã³ãæ¢ã«ããã®ã§ãããããããã使ããã¦ãããã
ä»åãã¹ããããã¼ã«ã®project.clj
ã¯ãããªæããå¤åãããæä½éã®è¨å®ã
ãã¼ã«ã¨ãã¦ã¯è©³ç´°ã¯æ¸ããªããè¤æ°ãã¡ã¤ã«ã® CSV ãèªã¿è¾¼ãã§ã´ãã§ã´ãã§ãããã®ãClojure 1.9 ãªã®ã¯å
ã
Java7 JRE ã§åããäºãæ³å®ãã¦ããããã
(defproject native-image-test "1.0.0" :plugins [[io.taylorwood/lein-native-image "0.3.1"]] :dependencies [[org.clojure/clojure "1.9.0"] [org.clojure/data.csv "1.0.0"] [commons-io/commons-io "2.6"]] :main ^:skip-aot native-image-test.core :target-path "target/%s" :profiles {:uberjar {:aot :all :native-image {:opts ["--initialize-at-build-time"] :jvm-opts ["-Dclojure.compiler.direct-linking=true"]}}})
native-image
ã«æ¸¡ããªãã·ã§ã³ã®--initialize-at-build-time
ã¯ãããä»ããªãã¨ã³ã³ãã¤ã«éä¸ã§ä»¥ä¸ã®ã¯ã¼ãã³ã°ãåºã¦ exe ãçæããã¦ã JDK ãç¡ãã¨åããªããã®ã«ãªãã®ã§å¿
é ã
Warning: Aborting stand-alone image build due to unsupported features
JVM ã®æ¹ã«æ¸¡ãclojure.compiler.direct-linking=true
ã¯ã³ã³ãã¤ã«æéæ¹åã«ãªããããã®ã§ä»ãã¦ããã
ä»ã«ããªãã·ã§ã³è¨å®ãè²ã
ããã
ã¨ããããã¯ããã ã追å ãã¦ããã
Reflection ã¸ã®å¯¾å¦
ãã¦ãã©ã㪠Java ã³ã¼ããçæã§ããããã§ã¯ãªãããã§ã è²ã ã¨å¶éãããã¿ããã
ãã®ä¸ã¤ã Reflection ã§ãèªå㯠Clojure ã§éçºããéãã¾ãæ°ã«ããã«ä½ã£ã¦ããããä»å native-image å®è¡æã«åãã¦ã¤ã¾ã¥ããã
å
·ä½çã«ã¯ Clojure ã³ã¼ã㧠*warn-on-reflection*
ã true
ã«ãã¦ã³ã³ãã¤ã«æã«åºã Reflection warning ãæ¾ç½®ã㦠lein native-image
ãå®è¡ããã¨ã³ã³ãã¤ã«éä¸ã§ä»¥ä¸ã®ã¯ã¼ãã³ã°ãåºã¦ JDK ã«ä¾åãã exe ããçæãããªãã
Warning: Aborting stand-alone image build due to unsupported features
ä»åã®å ´åã¯èªåãæ¸ããã³ã¼ãã§çºçãã¦ãããã®ã§ä½ã®åãåãåããåãã£ã¦ããã®ã§ã¿ã¤ããã³ããä»ã㦠Reflection warning ã解æ¶ããäºã§è§£æ±ºã§ããã
ãããå¤é¨ã©ã¤ãã©ãªã§åºãããã ã£ããé¢åãããä¸å¿ æåä½æããè¨å®ãã¡ã¤ã«ã§æ示çã«æå®ãã æ¹æ³ãããã¿ããã ã極åãã®æ¹æ³ã¯é¿ãããã¨ããã
ãã«ã
- 64bit åãéçºè
ç¨ã³ãã³ãããã³ããã®èµ·å
- VS2019 ãåè¿°ã®æé ã§ã¤ã³ã¹ãã¼ã«ããã¨ã¹ã¿ã¼ãã¡ãã¥ã¼ã«è²ã
ãªç¨®é¡ã®ã³ãã³ãããã³ãããåºãããã¤ã³ã¹ãã¼ã«ãã GraalVM 㯠64bit çãªã®ã§
x64 Native Tools Command Prompt for VS 2019
ãé¸æãã¦èµ·å
- VS2019 ãåè¿°ã®æé ã§ã¤ã³ã¹ãã¼ã«ããã¨ã¹ã¿ã¼ãã¡ãã¥ã¼ã«è²ã
ãªç¨®é¡ã®ã³ãã³ãããã³ãããåºãããã¤ã³ã¹ãã¼ã«ãã GraalVM 㯠64bit çãªã®ã§
- ããã§
lein native-image
å®è¡- ãããªãã«æéããããã®ã§ãã°ããå¾ ã¤ã
æ¯è¼
å®è¡æéã®è¨æ¸¬
ãã¡ã¤ã«ãããã£ãããããã®ã ã£ãã Clojure ã® -main
ã®ä¸ã®å¦çå
¨ä½ã time
ãã¯ãã§å²ã£ã¦ãã¾ãã®ãæ軽ã ãããã㧠UNIX ã® time
ã³ãã³ãã®ããã« Windows ã§ãå¤é¨ããå®è¡æéã測ãæ¹æ³ããªããã®ãã¨èª¿ã¹ã¦ã¿ãã
PowerShell ã® Measure-Command
ãè¯ããã(åè)
ã¨è¨ãããã§ä»¥ä¸ã®ååãtime
ã«ãªããªãããããã¡ã¤ã«ã PATH ã®éã£ãæã«ç¨æãã(æå»è¨å®ãããåå DOS ã³ãã³ããããã®ã§)ã
@echo off powershell -C (Measure-Command {%*}).TotalMilliseconds
batch ããããã«å¥ã®ããã»ã¹å¼ã³åºããããªã®ã¯å¥ããã»ã¹å®è¡åã®æéã¯æ¸¬ããªãã®ã¨ã«ã¬ã³ããã¹ã® exe ã®å ´å .\
ãæ示çã«æå®ããå¿
è¦ããããããã¯ã¾ãè¯ãã¨ããã
çµææ¯è¼
lein uberjar
ãã¦ä½ã£ãstandaloneçã®ãã¡ã¤ã«ãµã¤ãºã¨å®è¡æéã¯ä»¥ä¸ã
Java7 JRE | native-image | |
---|---|---|
ãã¡ã¤ã«ãµã¤ãº | 4.41MB | 10.3MB |
å®è¡æé | 1563.58ms | 418.89ms |
ä¸è¦ãã¡ã¤ã«ãµã¤ãºãå¢å¤§ãã¦ãããJRE7ãã©ã«ãã®ãµã¤ãºã122MBãªäºãå å³ããã° ç¸å½å°ãããªã£ã¦ããã
å®è¡æéãéãããã ãããã¯ãã¨ã㨠CPU æéã大ãã¦ä½¿ããªãããã°ã©ã ãªã®ã§ 大é¨åã¯èµ·åæéãç縮ãããäºã大ããã¨æããJava ããã°ã©ã ç¹æã®èµ·åæã®ã¢ã¿ã¤ããªãåãã®ã¯ã¡ãã£ã¨ããæåã
ããã°ã©ã æ¬å¦çé¨ååä½ã®åä½ãã¡ã¢ãªä½¿ç¨éãã©ãããªã©ãæ°ã«ãªãæã§ã¯ãããããã¯ã¾ãå¥ã®æ°ãåããæã«ã§ãã
ãã«ãã§ããã¾ã§ã«èª¿ã¹ãäº
以ä¸ã¯ããã¾ã§ã®æé ã«å°éããã¾ã§ã®èª¿æ»çµç·¯ã¡ã¢ãèå³ãªããã°é£ã°ãã¦æ§ããªãã
æåã¯VS2019ã¤ã³ã¹ãã¼ã«ããåã«lein-native-image
ã®ã¤ã³ã¹ãã¼ã«ã»è¨å®ã®ã¿çµãããã¦lein native-image
ãå®è¡ããã®ã ãã以ä¸ã®ã¨ã©ã¼ãåºã¦ã¤ã¾ã¥ããã
Error: Unable to compile C-ABI query code. Make sure native software development toolchain is installed on your system. Error: Use -H:+ReportExceptionStackTraces to print stacktrace of underlying exception Error: Image build request failed with exit status 1 Failed to create native image
åã£ç«¯ã«ã¨ã©ã¼ãåºãå¾ã°ã°ãã¨ä»¥ä¸ãããåºãã
Unable to compile C-ABI query code #1258
Windows SDK for Windows 7 ãã¤ã³ã¹ãã¼ã«ã㦠SDK éçºè ç¨ã³ãã³ãããã³ããããå®è¡ããã¨è¯ãã¨ã®äºãèªåã®ç°å¢ã¯ Windows10 ã ã Windows 10 SDK ã§ããã ãã¨å ¥ãã¦ã¿ããã®ã®è¦å½ãããªãã
Windows 10 ã§ã®éçºè ç¨ã³ãã³ãããã³ããã£ã¦ã©ããªã£ã¦ãã®ã¨æ¢ãã¦ã¿ã㨠Windows 7.1 SDKãéçºè ç¨ã³ãã³ãããã³ãããå«ã¾ãã¦ãæçµãã¼ã¸ã§ã³ ãããããã以é㯠Visual Studio ã®æ¹ã«å«ã¾ãã¦ãããããã©ããããã¯ä¸æãç´åãªã³ã¯ã«ããããã ã¨å°ãªãã¨ã VS2015 以éã¯ãããªã£ã¦ãã£ã½ãã
ã¾ããVisual Studio ç¨éçºè ã³ãã³ã ããã³ãã ã£ã¦ä½ãªã®ã¨è¨ãã®ãæ°ã«ãªã£ã¦ã¿ã¦ã¿ãã¨ã å ¬å¼ããã¥ã¡ã³ã ã«ããã°ã
ããã¯ãç¹å®ã®ç°å¢å¤æ°ãèªåçã«è¨å®ããã³ãã³ã ããã³ããã§ãã
ã¨ã®äºã
ããããã®è¾ºã®äºã¯ å ¬å¼ããã¥ã¡ã³ãã® Prerequisites 辺ãã«æ¸ãã¦ãããã®ããªããã©ãæ¸ãã¨è¯ãã®ã決ãããã¦ãããã¾ã experimental ãªã®ããã