Penglibatan C++ dalam Pembangunan Web Oleh Hazman Halid, Consultant C++ Developer, Ford Motor Company, Dearborn, MI 48126, USA Bila kita bercakap tentang pembangunan web, kerapkali teknologi/bahasa yang keluar merupakan ASP, PHP, Java dan bahasa-bahasa yang sudah diketahui umum sebagai 'bahasa internet'. Di sini saya akan menceritakan tentang peranan yang boleh dimainkan oleh bahasa C++ dalam pembangunan web. Bahasa C++ selalunya diklasifikasikan sebagai 'bahasa sistem' yang digunakan untuk menghasilkan perisian-perisian dalaman -- seperti device drivers, system services, batch processor dan aplikasi-aplikasi desktop bukan-internet. Persepsi ini timbul kerana bahasa C++ telah dicipta jauh sebelum bahasa-bahasa internet ini menjadi ikutan, dan memang benar bahawa kebanyakan penggunaan C++ masih terhad kepada skop-skop di atas. Namun akhir-akhir ini, bahasa C++ sudah mula mendapat tempat di alam internet. Bahasa C++ lebih sukar dipelajari dari bahasa-bahasa peringkat tinggi seperti VBScript, tetapi terdapat aplikasi-aplikasi yang advanced di mana penggunaan C++ bukan sahaja mendatangkan manfaat, malah ada kalanya diperlukan. Satu kelebihan program yang dihasilkan melalui C++ yang ketara ialah kelajuannya dan kemampatannya (saiz footprint yang lebih kecil berbanding bahasa-bahasa lain). Tetapi kekuatan utamanya ialah kuasa yang diberi oleh C++ terhadap program tersebut. Program-program C++ mampu menggunakan struktur data yang kompleks, lalu dapat mewakili keadaan dunia sebenar dengan lebih tepat dan efisien. C++ boleh digunakan dalam 3 senario dalam pembangunan web. 1. CGI. Dalam senario ini, program C++ ditulis untuk menjanakan dan mengoutputkan keseluruhan laman HTML melalui saluran output yang normal. Inputnya (maklumat yang dihantar melalui HTML form), boleh datang sama ada melalui saluran input normal atau melalui environment variables, bergantung kepada cara form tersebut dihantar (Cara POST atau cara GET). Program C++ yang ditulis kelihatan sama saja seperti program C++ biasa, dan yang membezakannya hanyalah format output yang dikeluarkan (ia menjanakan output dalam bahasa HTML) dan cara input difahami (input yang diterima adalah dalam bentuk pasangan-pasangan variable dan nilai). Program C++ tersebut perlu tahu mengasingkan pasangan-pasangan variable/nilai tersebut dari ayat yang diterima sebagai input. Gateway CGI bertanggungjawab untuk menterjemahkan input yang datang dari web server kepada program C++ tersebut, dan begitu juga sebaliknya. Di sini, CGI mengaut output yang keluar dari "saluran normal" tersebut lalu menghantarnya ke web server. Begitu juga, input yang diterima dari web server dimasukkan oleh CGI ke dalam input normal program C++ tersebut atau ke dalam environment variable. CGI menjadi penterjemah antara web server dengan C++. Setiap kali program C++ ini dipanggil oleh browser, satu salinan program ini akan dilarikan dalam ruangan memorynya sendiri. Dalam suasana di mana terdapat banyak pengunjung serentak, keadaan ini boleh menyebabkan web server crash kerana setiap pengunjung mengakibatkan penggunaan memory yang tinggi. ISAPI Extension (akan saya bincangkan nanti) membetulkan keadaan ini. Kita akan lihat perbezaannya kelak. 2. ISAPI Extension. Yang ini juga dikenali sebagai ISAPI DLL. Tapi untuk ringkaskan, saya panggil IE saja. IE merupakan jawapan Microsoft untuk menangani kelemahan-kelemahan CGI seperti yang saya sudah ceritakan di atas. IE hanya boleh digunakan bila web server tersebut menggunakan Microsoft IIS. Dari segi prestasi, perbezaan yang paling ketara ialah apa yang berlaku ketika seorang pengunjung memanggil sesuatu IE. Seperti yang saya ceritakan, dalam CGI, satu proses baru akan dicipta dan proses ini akan diber keseluruhan sumber yang diperlukan oleh satu proses baru. Bukan saja terdapat kerja ke atas CPU untuk melancarkan proses baru ini, tetapi banyak memory akan dibazirkan. Dalam IE, sebuah proses baru hanya dicipta buat kali pertama sesuatu IE dipanggil. Bila IE yang sama dipanggil berkali-kali oleh pengunjung-pengunjung, IIS tidak mencita sebuah proses baru untuk setiap panggilan. Sebaliknya, IIS mengguna-kembali proses yang telah diciptanya awal tadi. Yang dicipta hanyalah sebuah thread kecil untuk membolehkan IE tersebut memproses permintaan pengunjung serentak dengan permintaan-permintaan lain. Dengan strategi begini, penggunaan CPU dan memory hanya tinggi pada panggilan pertama, tetapi panggilan-panggilan seterusnya akan mengguna-kembali sebanyak mungkin sumber yang telah diperuntukkan ini. Sepertimana CGI, sebuah program IE juga perlu menjanakan keseluruhan laman HTML. Bahawa IE menjanakan keseluruhan laman ini ada baik dan buruknya. Dari segi keburukan, adalah sukar untuk melakukan perubahan kepada layout laman ini kerana kod HTMLnya bercampur-aduk dengan kod C++. Ini juga menghalang kita dari menggunakan peralatan-peralatan WYSIWYG seperti FrontPage atau InterDev. Untuk mengatasi kekurangan ini, kita boleh gunakan komponen-komponen COM, dan sebentar lagi kita akan belajar tentangnya. 3. Komponen COM Setakat ini kita telah lihat CGI dan ISAPI Extension, di mana kita perlu menjanakan kod untuk keseluruhan laman web dalam satu program. Akibat dari kengkangan ini, kerapkali bahagian visual laman tersebut sukar untuk dikemaskini. Dan jika boleh dikemaskini sekalipun, ia akan mengakibatkan program CGI atau ISAPI Extension tersebut perlu dikompil dan di install semula. Untuk mengatasi masalah ini, kita gunakan komponen COM. Di antara ketiga-tiga cara yang telah saya bincangkan, membuat komponen COM merupakan tugas yang paling mencabar kerana ia memerlukan latarbelakang yang kukuh bukan sahaja dari segi C++ dan pemprograman berorientasikan objek (OOP), tetapi juga perlu mengetahui arkitektur Component Object Model yang merupakan extension kepada OOP. Namun, setelah mengharungi cabaran-cabaran tersebut, kita dapat menggunakan satu hasil teknologi yang dapat menolong meringkaskan kerja serta melakukan kerja-kerja pemprosesan yang rumit. Bila kita mencipta komponen, komponen yang kita cipta itu hanya bertanggung-jawab ke atas satu bidang kecil di dalam laman web kita. Ertinya, kita boleh mencipta komponen-komponen yang melakukan tugas-tugas khas, dan hanya mengoutputkan hasil dari tugas individu mereka ke laman web. Selebihnya, laman web tersebut boleh diprogramkan menggunakan ASP -- iaitu satu arkitektur yang jauh lebih mudah digunakan daripada C++. Menggunakan komponen, laman web kita kini terbahagi kepada dua. Pertamanya, kod untuk menghasilkan laman web itu secara am -- menggunakan ASP -- dan keduanya, kod khas untuk mengeluarkan hasil pemprosesan yang khusus, dihasilkan oleh komponen. Adanya sempadan ini menyenangkan kerja-kerja mengemaskini. Sekiranya bahagian yang perlu dikemaskini tiada kena-mengena dengan komponen tersebut, maka komponen tersebut tidak perlu disentuh, dikompil dan diinstall semula. Hanya kod ASP yang berkaitan saja yang perlu dirombak. Adanya sempadan ini juga membolehkan sesuatu laman web dihasilkan secara bersepadu oleh sepasukan programmer. Programmer-programmer ASP bertanggungjawab untuk menghasilkan layout yang menarik misalnya, dan programmer-programmer C++ bertanggungjawab melakukan pemprosesan di belakang tabir. Dengan ini, setiap programmer dapat menumpukan perhatian terhadap satu bidang tugas yang kecil dan khas. 4. ActiveX Control Kesemua penggunaan yang telah kita lihat sebelum ini merupakan pemprosesan di sebelah server. Saya terlupa untuk mention bahawa C++ juga boleh menghasilkan komponen-komponen yang memproses di sebelah client. Sekiranya antaramuka yang dibekalkan oleh JavaScript, VBScript dan HTML tidak memadai untuk aplikasi kita, maka kita boleh mencipta antaramuka yang lebih canggih dan interaktif menggunakan teknologi ActiveX. ActiveX Control merupakan sejenis komponen COM yang ditulis berlandaskan satu piawaian tertentu supaya dapat bekerjasama dengan aspek-aspek GUI (graphical user interface) yang terdapat dalam sistem operasi Windows. Komponen ActiveX Control ini di install secara automatik ke dalam komputer pengunjung bilamana laman web yang mengandungi Control ini dilawati. Caranya hampir menyerupai Java Applet yang terdapat di merata-rata. Tetapi berlainan dengan Java Applet, ActiveX Control tidak ditulis dalam bahasa Java, sebaliknya diprogramkan menggunakan C++. Sepertimana yang mungkin anda ketahui, bahasa Java merupakan satu bahasa cross-platform yang mampu menghasilkan program untuk pelbagai sistem operasi tanpa perlu dikompil semula. Bahawa bahasa ini cross-platform mempunyai kelebihan dan kelemahan. Dari segi kelebihan, Java Applet boleh mencapai audiens yang lebih besar. Tetapi dari segi kelemahan, program-program Java terbatas dari kebolehannya mempergunakan facility-facility yang khas dalam satu-satu sistem operasi tertentu. Oleh kerana ActiveX Control bukan cross-platform, malah ditulis khas untuk Windows, maka ActiveX Control mampu mempergunakan ciri-ciri GUI yang hanya terdapat dalam Windows dan memberikan "look and feel" yang setara dengan aplikasi desktop biasa. ActiveX Control juga boleh digunakan untuk melakukan tugas-tugas sistem seperti membersihkan harddisk dan membuang virus. Sebagai rumusannya, bahasa C++ mempunyai masa hadapan yang cerah di dalam dunia internet. Meskipun tahap teknologi perisian di Malaysia masih membangun, dan belum memerlukan aplikasi-aplikasi C++ seperti yang saya ceritakan, tetapi saya percaya bahawa semakin Malaysia menghampiri kemajuan teknologi, keperluan terhadap C++ juga akan semakin dirasai.