اسکالا و جاوا


#41

پس در نهایت این نظریه که میشه برنامه رو به صورت کتابخانه های مستقل نوشت و در نهایت با اسکالا کامپایل به native بشه! می تونه درست باشه؟


#42

شما می تونی ubjerjar رو که با هر زبانی باشه به کد native تبدیل کنی.


#43

اگر امکانش هست یک لینک ازش بدید


#44

برای اینکار شما به GraalVM نیاز داری که در واقع همون OpenJDK 1.8 هست. یه ابزار داره به اسم native-image که باید کد های جاوا و یا uberjar رو به کد نیتیو کامپایل می کنه و کارشم خوب انجام می ده. اما تا جایی که من می دونم و استفاده کردم static link انجام نمی ده.

https://www.graalvm.org/docs/getting-started/#native-images


#45

برای مثال همین الان یه Hello world با clojure ساختم و کامپایلش کردم:

target
└── uberjar
    ├── classes # Java bytecodes compiled from clojure 
    │   ├── hello
    │   │   ├── core.class
    │   │   ├── core$fn__38.class
    │   │   ├── core__init.class
    │   │   ├── core$loading__5569__auto____36.class
    │   │   └── core$_main.class
    │   └── META-INF
    │       └── maven
    │           └── hello
    │               └── hello
    │                   └── pom.properties
    ├── hello-0.1.0-SNAPSHOT.jar
    ├── hello-0.1.0-SNAPSHOT-standalone # Compiled binary
    ├── hello-0.1.0-SNAPSHOT-standalone.jar #Compiled uberjar
    └── stale
        └── leiningen.core.classpath.extract-native-dependencies

8 directories, 10 files

این هم پروفش:

  [ 0  0  ] ~/src/tmp/hello/target/uberjar --------------------------------------------------------------------------------------------------------------------------------------------------------------------
   ldd hello-0.1.0-SNAPSHOT-standalone
        linux-vdso.so.1 (0x00007fff2c76e000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4ccf627000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4ccf409000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f4ccf1ef000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f4ccefe7000)
        libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f4ccedaf000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4cce9f5000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f4cd0292000)

  [ 0  0  ] ~/src/tmp/hello/target/uberjar --------------------------------------------------------------------------------------------------------------------------------------------------------------------
   file hello-0.1.0-SNAPSHOT-standalone
hello-0.1.0-SNAPSHOT-standalone: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=c23b83bd31febecd070b1a9fb6bd67e0b416ba1b, with debug_info, not stripped

  [ 0  0  ] ~/src/tmp/hello/target/uberjar --------------------------------------------------------------------------------------------------------------------------------------------------------------------
 

البته بد نیست که در مورد محدودیت هاش هم بدونید:

این فایل رو شما رو هر سیستم X86_64 ی که کتابخونه های مورد نیاز رو که در بالا اومده ببرید اجرا می شه.