Haxe: Rahasia Terbaik Pengembangan Lintas Platform

Diterbitkan: 2022-03-11

Bahasa pemrograman modern Haxe terkenal di beberapa kalangan, namun banyak yang membaca ini tidak akan pernah mendengarnya. Namun, jangan biarkan status niche membodohi Anda. Sejak pertama kali muncul pada tahun 2005, ia telah diuji oleh para pengikut setianya—jika agak pendiam—. Ini membanggakan kombinasi fitur pragmatis dan matang untuk pengembangan dalam bisnis, game, dan bahkan konteks akademis.

Disney, Hasbro, dan BBC menggunakan Haxe, jadi mengapa belum banyak pengembang yang mendengarnya? Mungkin keserbagunaannya berarti tidak ada satu "aplikasi pembunuh" tunggal untuk bahasa pemrograman Haxe.

Atau mungkin karena salah satu aplikasi pembunuhnya yang paling awal—jalur migrasi dari platform Flash yang sekarat—dalam beberapa hal agak ceruk. Pasar game kasual terkemuka telah berebut selama beberapa tahun terakhir di bawah bayang-bayang ketidakpastian Adobe, dan sekarang akhirnya jelas bahwa apa pun yang berbasis Flash secara resmi harus dipindahkan pada tahun 2020.

Insinyur perangkat lunak bisnis dan pengembang web—bahkan, banyak pengembang game juga—mungkin mendengar "Flash" dan segera mengabaikannya. Oleh karena itu Yayasan Haxe mengambil FlashDevelop IDE dan mengubah citranya menjadi Haxe IDE, HaxeDevelop.

Tetapi mungkin sulit untuk melepaskan sebuah asosiasi—terutama ketika asosiasi itu terus menjadi cukup relevan. Misalnya, FlowPlay, yang game sosialnya memiliki 75 juta pengguna, memilih Haxe daripada Unity dan HTML5 untuk transisi dua tahun terakhir mereka dengan 1,4 juta baris kode dari Flash. (Rincian lebih lanjut tersedia dalam studi kasus.)

Mungkin sulit bagi Haxe Foundation untuk dapat menyoroti kasus penggunaan seperti ini, sambil tetap menarik bagi pengembang perangkat lunak non-game. Tapi jangan biarkan hal itu menghalangi Anda dari sedikit eksplorasi.

Apa Masalah Besarnya dengan Haxe?

Proyek Debian menggambarkan Haxe sebagai "bahasa pemrograman universal." Ada beberapa aspek untuk itu.

Secara umum, bahasa Haxe berarti menggunakan kembali kode (baik) . Maksud saya: Anda dapat menggunakan kembali kode Haxe di banyak platform, Anda dapat mengintegrasikannya dengan kode Haxe dan non-Haxe yang ada, dan untuk good , bahasa Haxe menyediakan banyak paradigma yang terbukti benar, seperti keamanan tipe.

Melanjutkan tema keserbagunaan, ini diterjemahkan ke dalam beberapa kategori utama kasus penggunaan—kecuali migrasi Flash, tentu saja.

Mengembangkan aplikasi atau game lintas platform dari awal. Haxe dapat menargetkan platform desktop, seluler, dan web, semuanya dari basis sumber satu bahasa. Bahasa pemrograman lintas platform bukanlah hal baru, dan ada solusi khusus untuk aplikasi dan game desktop dan seluler lintas platform. Tetapi Haxe melakukan sesuatu yang sedikit lebih istimewa dalam arti bahwa ia dapat menargetkan tidak hanya beberapa platform, tetapi juga beberapa paradigma, misalnya HTML5 dan binari asli.

Satu bahasa “untuk mengatur mereka semua.” Maafkan referensi Tolkien, tetapi sama seperti Node.js yang memuji era penggunaan bahasa yang sama di bagian depan dan belakang situs web, proyek apa pun dengan sesuatu yang menyerupai arsitektur client-server dapat menggunakan Haxe untuk kedua bagian.

Misalnya, aplikasi web FontStruct menggunakan Haxe baik untuk menggambar pada kanvas HTML5 di bagian depan dan melalui Java2D di bagian belakang. (Namun seperti yang disebutkan, pendekatan ini opsional—Haxe juga berfungsi dengan baik dengan kode non-Haxe yang ada, karena dirancang untuk tidak mengikat Anda.) Menjaga aplikasi, game, bisnis, dan bahkan logika rendering konsisten di semua konteks, platform, dan bahasa keluaran jauh lebih mudah dengan cara ini.

Melarikan diri dari JavaScript untuk mengetik keamanan. Tunggu, bukankah ini gunanya TypeScript? Ya, jika Anda ingin tetap terbatas pada keluaran JavaScript. Bahasa Haxe, sebaliknya, juga dapat diubah menjadi Java, C++, C#, Python, dan Lua, antara lain.

Sementara itu, bahasa pemrograman Haxe cukup mudah dipelajari dari JavaScript—sintaksisnya tidak berarti perubahan paradigma yang besar seperti, katakanlah, Rebol, meskipun manfaat dari perubahan semacam itu. Pengembang inti Haxe Dr. Andy Li menulis perbandingan yang lebih mendalam antara TypeScript dan Haxe yang masih relevan hingga saat ini, meskipun kedua bahasa tersebut terus berkembang.

Alur kerja yang cukup cepat untuk kompiler. Ini adalah bagian yang lebih baru ditambahkan (meskipun Neko adalah opsi sebelumnya): HashLink adalah mesin virtual lintas platform (VM) yang tampaknya mencapai keseimbangan antara menjadi sangat cepat untuk dikompilasi, namun juga cukup berkinerja saat runtime untuk berbagai hal seperti game 3D. Tetapi bahkan di sisi web, Haxe dapat mengungguli TypeScript baik pada waktu kompilasi maupun pada saat dijalankan.

Perbatasan yang mengasyikkan. Haxe sendiri adalah open-source dan memiliki komunitas yang aktif, dengan fitur bahasa baru yang ditambahkan setiap saat. Sub-rahasianya yang paling terjaga mungkin hanya sistem makro waktu kompilasinya, yang dengan sendirinya memiliki banyak kasus penggunaan yang menarik, memungkinkan Anda melakukan meta-program sepuasnya. (Saya menyebutkan beberapa contoh di bawah ini.)

Siapa Lagi yang Menggunakan Haxe?

Sebagai permulaan, pengembang game, tentu saja: Madden NFL Mobile, Evoland II, Double Kick Heroes…ini dan ratusan game lain yang diterbitkan dikembangkan menggunakan Haxe. Tapi Haxe juga membuat gelombang di luar dunia game:

  • Kembali pada tahun 2014, TiVo menggunakan Haxe untuk meningkatkan kinerja pada kotak TiVo Premiere mereka lebih dari 30%.
  • Massive Interactive, yang kliennya termasuk DAZN dan Telecine untuk sistem “TV pintar” berbasis Haxe (keduanya dengan basis pengguna yang besar) telah menggunakan Haxe selama bertahun-tahun. Arsitek UI mereka Philippe Elsass mencatat kepada saya bahwa dalam pengalamannya bekerja dengan proyek web besar, Haxe cenderung lebih sederhana untuk digunakan daripada TypeScript dan tentang urutan besarnya lebih cepat untuk dikompilasi.
  • Synolia menggunakan bahasa Haxe untuk alat kustomisasi online mereka Heidi, yang digunakan oleh merek besar Prancis Carrefour dan La Fnac, dan juga Nickelodeon. Menurut Synolia, toolkit Haxe memungkinkan mereka untuk secara efisien mengelola transisi dari Flash ke HTML5, sementara juga mampu mengambil peluang pengembangan bisnis baru di bidang seluler. Heidi sebagai aplikasi SaaS, toolkit Haxe memungkinkan mereka untuk berbagi kode sumber yang sama di antara berbagai lapisan dan layanan aplikasi.
  • Perusahaan multinasional Docler Holding menjadi mitra strategis Haxe Foundation pada tahun 2017.

Seperti Apa Ekosistem Haxe?

Ketika berbicara tentang game dan Haxe, ini adalah dunia yang luas dan luas dalam hal kerangka kerja dan perpustakaan sumber terbuka. Dari tim indie independen hingga studio sukses dengan klien internasional, pengguna Haxe berbagi kode di semua tempat:

  • Flambe digunakan oleh merek seperti Disney, Coca-Cola, dan Toyota untuk mengembangkan game HTML5.
  • Heaps adalah kerangka kerja game berkinerja tinggi di balik strategi 3D baru-baru ini yang menghantam Northgard.
  • Mendukung jutaan gameplay seluler, perpustakaan pengembangan cepat awe6 mungkin merupakan permata tersembunyi di dalam permata tersembunyi.
  • Kha, yang dapat menargetkan Xbox One, Nintendo Switch, dan PlayStation 4 selain desktop dan seluler, memiliki lebih dari 20 mesin game yang dibangun di atasnya. Ini termasuk Armory, yang memiliki integrasi Blender penuh dan baru-baru ini menjadi open-source.
  • Awalnya dimodelkan setelah perpustakaan Flixel lama untuk Flash, HaxeFlixel adalah pilihan populer di balik game seperti Defender's Quest yang terkenal.
  • Jalak Gamua, kerangka kerja yang digunakan untuk port Facebook Angry Birds beberapa tahun yang lalu, sekarang memiliki port Haxe sumber terbuka.
  • OpenFL, berdasarkan Flash API, juga akan segera menjadi cara untuk menargetkan beberapa konsol—yaitu PlayStation 4, PlayStation Vita, XBox One, dan Nintendo Switch—tanpa biaya lisensi tambahan. HaxeFlixel dan Starling keduanya dibangun di atas OpenFL, tetapi beberapa game dikembangkan di OpenFL secara langsung, seperti Papers, Please .
  • Native Media Engine, NME, dari mana OpenFL bercabang bertahun-tahun yang lalu, masih merilis versi utama juga.
  • Mungkin Anda melihat ketika HaxePunk (turun dari FlashPunk) ditampilkan di blog Rilis Radar GitHub.
  • Nape Physics Engine yang sangat dioptimalkan sangat bagus untuk mesin game 2D atau simulator apa pun yang membutuhkan fisika yang lebih canggih.

Memang, adegan pengembangan game adalah bagian yang lebih terlihat dari ekosistem bahasa Haxe. (Mungkin ini karena sifat dari game jam seperti Ludum Dare?) Tapi bisnis dan bahkan sisi perusahaan juga terlihat. Sebagai contoh:

  • Kerangka kerja aplikasi modular hexMachina mendukung penggunaan bahasa khusus domain (DSL) dan arsitektur model-view-controller (MVC), di antara banyak fitur lainnya.
  • Mesin tata letak UI HaxeUI secara aktif berkembang dan memiliki dukungan perusahaan. Produk seperti 3DVista dan Kaizen for Pharma telah mengirimkan aplikasi produksi bersamanya.
  • Ini bukan satu-satunya, tetapi perpustakaan thx.core dan kerabatnya menyediakan ekstensi tujuan umum untuk Haxe, seperti yang dilakukan Lodash untuk JavaScript.
  • Berbicara tentang JavaScript, proyek Haxe yang menargetkannya dapat mengambil manfaat dari memanfaatkan Haxe Modular, yang membantu Telecine dan FlowPlay untuk menskalakan proyek besar mereka sambil tetap memuatnya dengan cepat di sisi klien.
  • Ekosistem Haxe juga terus berkembang untuk berinteraksi dengan teknologi saat ini; misalnya sekarang ada perpustakaan GraphQL.
  • Terakhir, Tinkerbell yang patut dicontoh memanfaatkan sistem makro Haxe untuk semua jenis tugas yang berguna. Ini memiliki kerangka kerja untuk perutean web, pengujian unit, dan penyematan SQL, serta pustaka untuk semuanya, mulai dari templating dan penguraian pemilih CSS hingga async/menunggu dan penanganan status reaktif kurva belajar yang lebih rendah.

Ini hanyalah sorotan dari beberapa arahan yang telah diambil oleh pengguna bahasa Haxe sejauh ini. Haxe.org menyimpan daftar lengkap perpustakaan yang diurutkan berdasarkan popularitas yang juga dapat Anda telusuri berdasarkan tag. Tetapi ada baiknya juga menyoroti beberapa proyek yang dikelola oleh Haxe Foundation sendiri:

  • Untuk sudut DevOps, ada repo Haxe Docker resmi.
  • Dari segi stabilitas, bahkan dengan pembaruan versi utama, Haxe 4 akan memiliki beberapa bantuan kompatibilitas bagi mereka yang memiliki proyek yang bergantung pada Haxe 3.

Itu semua terdengar bagus, tetapi bagaimana rasanya mendapatkan lingkungan pengembangan di sistem Anda?

Mulai Cepat Hax

Baik untuk Win, Mac, atau Linux, langkah pertama adalah mengunduh Haxe. Pemasang di sana akan memberikan beberapa hal berbeda:

  1. Kompiler Haxe itu sendiri , yang memungkinkan Anda menjalankan haxe dari terminal atau command prompt Anda.
  2. Pustaka standar Haxe , memungkinkan untuk dasar-dasar tingkat rendah, tetapi juga beberapa dukungan tujuan umum tingkat tinggi. Misalnya, XML, pemrosesan ZIP, dan akses MySQL semuanya difasilitasi di sini.
  3. Manajer paket Haxelib , yang memungkinkan Anda menginstal paket baru melalui perintah haxelib . (Catatan: Sebaiknya periksa lix untuk manajemen paket yang lebih canggih daripada yang disediakan Haxelib, terutama jika Anda mempertimbangkan untuk menggunakan Haxe dalam konteks profesional.)
  4. Neko , target mesin virtual yang memungkinkan kompilasi ulang dan debugging yang cepat dan efisien.

(Konon, ada lebih dari satu cara untuk menyiapkan. Jika Anda sudah menginstal npm , misalnya, petunjuk penginstalan OpenFL memiliki opsi untuk menginstal Haxe melalui perintah Yeoman. Homebrew dan Chocolatey juga menyediakan jalur serupa.)

Bagaimanapun, setelah Anda memiliki Haxe, Anda dapat menggunakannya dari baris perintah dengan sendirinya, tetapi pengembang sering memilih untuk menggunakan IDE. FlashDevelop/HaxeDevelop sebagian besar masih didukung di bawah Windows saja. Sebagian besar opsi lainnya adalah lintas platform (Win/Mac/Linux):

  • Plugin Haxe VSCode didukung dengan baik.
  • IntelliJ IDEA juga memiliki plugin Haxe.
  • Kerangka permainan Kha memiliki IDE sendiri yang disebut Kode Studio (Win/Mac/Linux).
  • Sublime Text dan Atom keduanya memiliki plugin Haxe, seperti halnya banyak editor lainnya, beberapa di antaranya khusus untuk platform.

Untuk tujuan panduan memulai cepat ini, kita akan menggunakan VSCode. Mungkin paling sederhana untuk mendapatkan Paket Ekstensi Haxe melalui Ctrl+P dan ext install haxe-extension-pack , tetapi jika Anda seorang minimalis, Anda mungkin hanya ingin ext install vshaxe untuk plugin Haxe dasar itu sendiri, dan pilih mana saja bagian lain dari paket yang mungkin Anda inginkan.

Membuat Proyek Haxe

Karena bahasa Haxe dapat diubah menjadi banyak target, mengelola bagaimana hal ini dilakukan untuk setiap target menjadi lebih mudah menggunakan file build. Namun, untuk memulai, yang kita butuhkan hanyalah satu file kelas Haxe dengan ekstensi .hx .

Adapun kode yang akan kita masukkan ke dalamnya, mari kita ambil contoh Array Comprehension dari try.haxe.org dan masukkan ke dalam file bernama Test.hx :

 class Test { static function main() { var a = [for (i in 0...10) i]; trace(a); // [0,1,2,3,4,5,6,7,8,9] var i = 0; var b = [while(i < 10) i++]; trace(b); // [0,1,2,3,4,5,6,7,8,9] } }

Sekarang, dari lokasi Test.hx , Anda dapat menjalankan Haxe dalam mode interpretasi, yaitu tanpa transpiling sama sekali, untuk melihat output dari dua panggilan trace() tersebut:

 $ haxe -main Test --interp Test.hx:4: [0,1,2,3,4,5,6,7,8,9] Test.hx:8: [0,1,2,3,4,5,6,7,8,9]

Bagus, itu berhasil!

Transpiling Kode Haxe ke JavaScript

Misalkan Anda ingin berbagi ini dengan dunia melalui beberapa JavaScript di halaman web Anda. Itu ada di dalam Haxe, dan semudah:

 $ haxe -main Test -js haxe-test.js

Jika Anda telah menginstal Node.js, Anda dapat memeriksa output dari baris perintah seperti ini:

 $ node my-cool-test.js [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

Jika tidak, kode di haxe-test.js siap digunakan—jika Anda memasukkannya ke dalam halaman web, Anda akan melihat output di konsol pengembang browser web Anda saat dimuat.

Transpiling dan Kompilasi ke Biner Asli

Katakanlah Anda juga menginginkan biner asli untuk desktop yang sedang Anda kembangkan. Untuk melakukan ini, kita akan melakukan transpile ke target C++, sehingga kita dapat menggunakan C++ (dengan asumsi Anda telah menginstalnya) untuk mengkompilasi output .cpp ke biner asli. Untuk itu, kita memerlukan hxcpp , jadi kita perlu menginstalnya:

 $ haxelib install hxcpp

Setelah itu, kita bisa melakukan transpilasi dan kompilasi sekaligus dengan perintah ini:

 $ haxe -main Test -cpp bin

Dan kemudian biner kami siap dijalankan:

 $ bin/Test Test.hx:4: [0,1,2,3,4,5,6,7,8,9] Test.hx:8: [0,1,2,3,4,5,6,7,8,9]

(Pada Windows, ini akan menjadi bin\Test.exe sebagai gantinya.)

Membuat File Pembuatan Haxe (.hxml)

Meskipun ekstensi sugestif, file .hxml bukan XML—tidak seperti file .hxproj yang digunakan oleh HaxeDevelop dan FlashDevelop, tapi saya tidak akan membahasnya di artikel ini. Berikut tampilan build-all.hxml untuk menyelesaikan transpiling yang kami lakukan di atas:

 -main Test # tells Haxe our main class is Test (case-sensitive) --each # all of the above commands will be applied to each target -js haxe-test.js # our first transpilation target --next # no other options, time to move to the next target -cpp bin # our second transpilation (and compilation) target

Perhatikan perbedaan awalan: -main , -js , dan -cpp adalah setiap parameter yang akan Anda berikan ke haxe secara langsung, sementara --each dan --next (dua tanda hubung) naik ke level meta, memberi tahu kompiler apa yang harus dilakukan dengan parameter lainnya.

Sekarang Anda dapat mencapai target JavaScript dan native hanya dengan menjalankan haxe build-all.hxml .

Jika Anda ingin mentranspile ke JavaScript dan kemudian segera menjalankan hasilnya menggunakan Node, Anda dapat menjalankan haxe run-js.hxml , di mana run-js.hxml terlihat seperti ini:

 -main Test -js haxe-test.js -cmd node haxe-test.js

Demikian pula, "build and run" untuk biner asli akan terlihat seperti ini (di Linux, yaitu—variasi diperlukan untuk Windows):

 -main Test -cpp bin -cmd bin/Test

Bagaimana dengan VSCode? Bagian itu sederhana: Ekstensi yang Anda instal akan secara otomatis mengambil file .hxml ini, memberi Anda tugas build yang dibuat secara otomatis (tanpa tasks.json ) dalam drop-down, memungkinkan Anda memilih file build mana yang akan digunakan.

Catatan: Hati-hati jika Anda membuka beberapa jendela VSCode—pada tulisan ini, ini dapat menyebabkan masalah dengan membangun melalui Ctrl+B. (Anda masih dapat menggunakan baris perintah, tidak masalah.)

Hax 4

Jika Anda mengikuti pengaturan di atas, Anda mungkin memperhatikan bahwa halaman unduhan menyertakan tautan ke cabang 3.x dan 4.x dari penginstal Haxe.

Kompiler Haxe versi 4 mutakhir membawa banyak fitur baru. Dalam satu kasus, ini juga merupakan bukti kekuatan sistem makronya: Kompilator Haxe dulunya kekurangan dukungan untuk fungsi lambda pendek, jadi pustaka slambda mengimplementasikan dukungan untuk mereka melalui makro. Pada versi 4, dukungan dibangun ke dalam kompiler, dan perpustakaan tidak digunakan lagi.

Jadi apa lagi yang dibawa Haxe 4?

Belum tentu terlalu banyak menarik perhatian. Sebaliknya, Haxe 4 memiliki banyak peningkatan yang lebih kecil. Lagi pula, Haxe sendiri adalah teknologi yang cukup matang, dikembangkan oleh tim yang lebih kecil dan lebih fokus, mungkin, daripada proyek serupa—dan mungkin agak sulit untuk menyebut satu proyek yang mirip dengan Haxe.

Banyak fitur yang paling menarik telah hadir untuk sementara waktu sekarang. Sebagai contoh, saya sebutkan di atas bahwa Haxe menyediakan alur kerja yang cepat melalui Neko atau HashLink. Tapi sejak 2016, itu juga menampilkan server kompilasi. Ini berarti bahwa untuk target non-VM, mengkompilasi ulang proyek yang bergantung pada perpustakaan besar akan jauh lebih cepat karena caching dalam memori—yang juga dapat dimanfaatkan oleh Haxe IDE untuk penyelesaian kode.

Tapi Haxe 4, khususnya, akan melihat:

  • Eksekusi makro menjadi 4x lebih cepat.
  • Dukungan PHP5 dibatalkan.
  • Beberapa pembaruan sintaksis yang dilakukan yang mungkin akan diterima oleh pengguna TypeScript, meskipun mereka sedikit berbeda di antara kedua bahasa tersebut. Yaitu, fungsi panah dan sintaks tipe fungsi baru.

Tutorial Haxe

Meskipun Anda selalu dapat menyelam langsung ke dalam API standar atau dokumentasi sintaks Haxe, ada beberapa materi Haxe yang lebih ramah-pemula yang tersedia juga.

Jika Anda lebih suka mendapatkan orientasi dengan video, Haxe US Summit 2018 di Seattle memiliki lokakaryanya bersama dengan lokakarya dari tahun-tahun lain, untuk mendapatkan lebih banyak pandangan orang dalam.

Tapi terkadang apa yang bisa membantu Anda memulai dengan lebih mudah adalah tutorial yang lebih spesifik. Seperti tutorial awal hingga akhir tentang cara membuat game dungeon crawler di HaxeFlixel. Ada juga serangkaian tutorial HaxeFlixel yang menjelaskan lebih banyak tentang apa yang terjadi di balik layar saat ini. Di ujung 3D, ada tutorial Haxe untuk memulai dengan Armory.

Atau mungkin Anda hanya ingin tutorial Haxe tentang pemrosesan cepat XML—ini adalah salah satu dari sekian banyak tutorial yang sekarang berumur beberapa tahun, tetapi masih cukup relevan. Seperti yang saya sebutkan sebelumnya, meskipun ada banyak batasan, banyak dasar pengembangan di Haxe stabil pada titik ini, jadi tutorial tidak selalu cepat basi. (Di mana mereka melakukannya, biasanya dari ketergantungan pada perpustakaan tertentu, bukan pada inti Haxe itu sendiri.)


Seperti yang Anda lihat, Anda dapat menggunakan bahasa Haxe—atau bahasa itu dapat membawa Anda—ke berbagai arah. Saya harap Anda menikmati pengenalan tentang dunia Haxe yang beragam dan menarik ini, dan saya berharap dapat mendengar apa yang akhirnya Anda lakukan dengan teknologi Haxe!

Terkait: Ulasan Haxe: Fitur dan Kekuatan Haxe 4