evilfactorylabs

Cover image for Node Bindings di sebuah kulit kacang (nutshell)
fnc
fnc

Posted on

Node Bindings di sebuah kulit kacang (nutshell)

Perkenalan

Nampilin hello world dari C++ ke Javascript aja udah seneng = Node Bindings.

Isi

Bindings adalah proses dimana kita menggunakan library bahasa pemrograman lain di bahasa pemrograman yang kita gunakan, tujuannya supaya library yang bisa digunakan di bahasa pemrograman A bisa digunakan di bahasa pemrograman B.

Javascript dibangun menggunakan V8 Engine, dimana V8 Engine ditulis menggunakan bahasa C++, C++ inilah yang memberi koneksi dan memberi support Event Loop yang didalamnya memiliki Asynchronous I/O untuk Javascript melalui library yang bernama libuv yang ditulis menggunakan C, selain itu fungsi filesystem seperti core module fs juga ditulis menggunakan C++ di Node.js.

Ada juga socket dan http yang sama sama dibuat menggunakan C++ di Node.js, karena Javascript by default tidak tau bagaimana menghandle filesystem, alasannya adalah tujuan awal Javascript adalah membuat website menjadi lebih interaktif (e.g menggunakan DOM) yang digunakan di browser, karena security, tidak mungkin juga browser memperbolehkan filesystem access pada setiap website menggunakan Javascript (sebelum node.js menyerang), socket maupun http, maka dari itu browser (serta node.js) menggunakan bindings yang dibuat menggunakan c++ karena dapat memberi perintah langsung kepada sistem (system call).

Salah satu open source Javascript yang menggunakan node bindings adalah sqlite3 https://github.com/mapbox/node-sqlite3, node bindings sangat membantu sekali untuk membuat library" yang keren dari C++ dapat digunakan di Javascript, ini adalah salah satu alasan penulis belajar node bindings, meskipun ujungnya harus belajar C++ dari awal lagi haha :').

Node bindings memiliki build tools juga (ibaratnya seperti webpack untuk frontend assets) yaitu node-gyp, node-gyp ini berguna untuk mengcompile API native addons untuk Node.js (seperti yang saya tampilkan di video disini) seperti N-API yang sekarang berganti nama menjadi Node-API, jika kamu tidak ingin mengurus NODE_MODULE_VERSION (ABI version number dari Node.js) bisa menggunakan nan, dimana disediakan abstraksi yang sudah diisi logic untuk tidak perlu lagi mengurus NODE_MODULE_VERSION dari Node.js.

Penutup

Yuk yang mau belajar c++ dan rust dengan gaya, yuk bisa dicoba node bindings ini.

Discussion (0)