Kotlin Native - Những bước đầu chập chững


#1

Kotlin được Google giới thiệu vào năm 2017 như là một ngôn ngữ chính thức phát triển Android app bên cạnh Java và C++ , nhưng thật ra Kotlin đã có tuổi đời đâu đó cỡ 05 năm rồi và bản thân Kotlin không gói gọn trong việc phát triển ứng dụng Java ! Có nhiều hướng phát triển trong Kotlin, ở đây mình sẽ cùng các bạn đi vào một nhánh của Kotlin khi build các ứng dụng native được gọi là Kotlin Native !
image
Native thường được gọi tên cho các ứng dụng build trực tiếp ra mã máy, không cần qua một bộ thông dịch hoặc máy ảo nào cả. Tính trên phương diện này, các ứng dụng Java không được gọi là native vì chúng cần thông qua JVM thông dịch trước khi thành mã máy, quá trình này được cho là tốn thời gian khiến ứng dụng chậm hơn sơ với native, cũng có một số giải pháp như JIT để giúp tiệm cận native nhưng tốc độ thường là không vượt qua ứng dụng biên dịch ra kiểu native như C/C++ được. Ở hiện tại, với sự phổ biến của cái “máy ảo” như JVM cùng với phần cứng mạnh, người ta không quan tâm nhiều như trước tuy nhiên một số yêu cầu vẫn cần tới native như các ứng dụng đòi hỏi hiệu suất cao hoặc đơn giản hơn là cần một ứng dụng chạy trực tiếp mà không cần cài trước một máy ảo như JVM, Python hay Erlang nào cả ! Một trong những project giúp mang native đến hầu hết các ngôn ngữ là LLVM (Low Level Virtual Machine), nó giống như một trình biên dịch chung giúp dịch mã từng ngôn ngữ được hỗ trợ ra mã máy (thực ra là ra một mã trung gian IR - intermediate representation - trước khi ra mã máy). Thật may mắn, LLVM hỗ trợ hầu hết các hệ điều hành phổ biến như Windows, MacOS, Linux, Android và cả iOS … các bạn có thể đọc thêm tại : https://en.wikipedia.org/wiki/LLVM
image
Và, Kotlin Native được build trên LLVM, tức là bạn có thể viết code Kotlin và build ra mã máy , cool !
Có nhiều ý kiến cho rằng Kotlin Native sinh ra là để thay thế JVM nhưng theo mình thì nó còn khá sơ khai, hiện tại 2018 chỉ là bản beta 0.9 và thiếu rất nhiều thứ, nhưng cũng là một hướng đáng để thử chứ. Nói về độ cool ngầu của Kotlin Native thì các bạn hình dung chúng ta viết một source code mà có thể share giữa ứng dụng desktip, web, ứng dụng mobile (cả Android và iOS) cùng với frontend chỉ với Kotlin syntax! Ở bài này chỉ mang tính chất giới thiệu, mình thử đoạn code huyền thoại “Hello world” compile trên 02 hệ điều hành chính là Linux và Windows nhé !

Đầu tiên, bạn là developer và bạn cần cài đặt Kotlin trên máy tính của bạn cùng với JVM(chú ý là bạn không cần cài lại Kotlin Native hay Java hay bất cứ gì khác trên máy người dùng nhé). Cũng có cách để cài riêng Kotlin Native compiler thôi để compile native nhưng mình xin phép không đề cập ở đây tránh gây rối. Chúng ta sẽ cũng phát triển ứng dụng native theo cách thông thường như các bạn đã làm với web hoặc android app. Bắt đầu từ việc tạo một dự án từ Gradle với một thư mục và file gradle.build như sau :

plugins {
  id 'org.jetbrains.kotlin.konan' version '0.9.1'
}

konan.targets = [ 'linux', 'mingw' ] //'mingw' nếu bạn sử dụng Windows

konanArtifacts {
  program("vnkotlin") {
    enableOptimizations(true)
  }
}

cùng với file build, chúng ta có cấu trức thư mục như sau :
image
Ở đây mình tạo project trên là native , sau khi có thư mục như trên, bạn có thể mở bàng IntelliJ, import như là một Gradle project, nhớ chọn Use gradle ‘wrapper’ điều này sẽ giúp download gradle và các plugin,cũng tốn kha khá thời gian


Quá trình download hoàn tất các bạn sẽ thấy phía dưới IntelliJ thông báo :
image
Còn phía bên phải IntelliJ, bạn mở tab Graldle sẽ có dạng :
image
Konan là cái plugin giúp mình compile native, và vì mình sử dụng linux nên có cái bòng Linux và Linux_x64. Giờ thì bắt đầu viết dòng code thần thánh, tạo một file trong thư mục src/main/kotlin/hello.kt, nội dung sâu sắc như sau :

fun main(args:Array<String>){
    println("VNKotlin : Hello Kotlin Native")
}

Và giờ các bạn không ngần ngại bấm task ‘build’ ở tab Gradle, chờ khoảng chục phút tùy hệ điều hành mà gradle sẽ download gói compile llvm phù hợp , với Linux laptop, các bạn sẽ thấy dòng như sau :


với Windows:

chú ý là dung lượng khá lớn nhưng chỉ download lần đầu tiên khi các bạn compile thôi nên cũng tạm chấp nhận được
Sau khi build hoàn tất ta sẽ có thư mục build như sau với Linux :
image
và với Windows :
image
Dung lượng ứng dụng sau khi compile khá nhỏ tùy thuộc vào thư viện bạn sử dụng, đây cũng là ưu điểm đến từ LLVM
Trên linux, file có đuôi là kexe khá kỳ cục, còn trên Windows là .exe như các file chạy khác, các bạn chạy file này trên máy tương ứng sẽ cho cùng kết quả :

VNKotlin : Hello Kotlin Native

Đây là một ví dụ đơn giản để giúp chúng ta hình dung được cách mà Kotlin Native làm việc, các file sau khi compile đã là mã máy và các bạn có thể copy đến các máy tính khác để chạy mà không cần cài đặt gì khác. Bên cạnh đó thì Kotlin còn cung cấp klib giúp định nghĩa các thư viện tái sử dụng cũng như các làm việc để compile ra Android và iOS cũng như nền tảng MacOS, những phần này gồm khá nhiều bước mà khi làm việc với từng nền tảng cụ thể sẽ có khác nhau đôi chút. Ngoài ra thì Kotlin Native không đơn giản là viết dòng hello world như mình, mà nó cung cấp các thư viện cơ bản nhất cùng với đó là syntax Kotlin quen thuộc, cho phép chúng ta share code chung giữa các nền tảng khác nhau mà mình sẽ đề cập trong một bài viết khác.

Nhìn chung Kotlin Native còn khá nhiều việc phải làm để tạo ra các thư viện cần thiết cũng như xây dựng cộng đồng, nhưng chúng ta hoàn toàn có thể hy vọng viết một chương trình native với cú pháp hiện đại của Kotlin, điều mà golang đã và đang làm

Source code : https://github.com/vnkotlin/basic/tree/master/native

  • Dở
  • Tạm
  • Thường
  • Đỉnh kao

0 người bình chọn


#2

Chào mod, ko biết là thảo luận ở đây có tiện ko, nhưng tôi nghĩ nên thảo luận trực tiếp ở đây để nội dung súc tích dễ hiểu hơn, tôi có tìm hiểu về 1 platform được gọi là MOE, plaform này cũng suport việc build từ java sang nhiều platform khác, có cả việc support Kotlin, và tôi thấy platform này rất hay nhưng ko hiểu sao rất ít người quan tâm, có thể xem qua Insights trên Github để biết. Vì vậy tôi đều nghị chúng ta hãy cùng nhau thảo luận về MOE sử dụng Kotlin và cố gắng support platform này để nó ko chết yểu.


#3

cảm ơn bạn đã suggest , mình chưa thử với MOE, trước đây cũng có project tương tự là robovm mà hiện nay đã terminated rất đáng tiếc. Mình cũng hy vọng MOE sẽ tiếp tục phát triển, nếu bạn có kiến thức về MOE với Kotlin mong bạn chia sẻ với các thành viên


#4

Mình thực sự rất hứng thú với Kotlin nhưng nó còn mới và hầu như không thấy nhà tuyển dụng nào. Đây là một trở ngại lớn


#5

vâng, mình cũng thấy vậy, cũng là nguyên nhân có diễn đàn này với mong muốn tập họp mọi người cùng yêu thích Kotlin cũng như các công nghệ liên quan, tạo một cộng đồng nhỏ Kotlin ở Việt Nam cũng như có tiếng nói với cộng đồng Kotlin khác. Mình đã đăng ký diễn đàn này như một kênh chính thức các bạn có thể xem trên trang web của http://kotlinlang.org/community/user-groups.html. Cách hiện giờ mình sử dụng Kotlin là làm Kotlin song song với Java, vì bản thân Kotlin build ra lib để Java sử dụng được