Archive
Going Native untuk C# dan .NET Developer
Beberapa bulan belakangan ini Microsoft dengan gencar menggalakkan program Going Native atau sering juga disebut sebut C++ Renaissance. Hal ini tentu menarik perhatian banyak programmer managed code (c# .net). Ada mungkin yang merasa terusik dengan kebangkitan kembali c++, ada juga yang skeptic dsb.
Sebelum memberikan banyak komentar mengenai Going Native ini, mungkin terlebih dahulu kita harus terlebih dahulu mengakui bahwa software di dunia ini paling banyak ditulis dengan c. Sebut saja operating system linux dan windows. Sehingga bagaimanapun kita tidak akan lepas dari native code.
Dunia Windows
Saya bekerja di lingkungan Windows, wajar saja karena saya adalah .NET developer. Sistem operasi Windows tentu saja tidak dapat dipungkiri yang paling banyak penggunanya. So we have to face it. We’re living in Windows World.
Code base dari Windows sendiri banyak ditulis dengan menggunakan C. Seiring dengan berjalannya waktu maka code c tersebut dibungkus dengan menggunakan C++ sehingga terlihat Object Oriented. – -“
Tetapi tetap saja native dari C tidak hilang.
Untuk sejenak kita tinggalkan dunia .Net dan kilas balik ke dunia sebelumnya dimana Win32 adalah segalanya. Anda akan berkenalan dengan MFC, COM dan ATL. Kesemuanya itu familiar untuk kalangan Win32 programmer.
.NET dan keterbatasannya
Sejak kemunculan .NET framework maka banyak orang beranggapan bahwa C++ sudah tidak relevan lagi di dunia industry. Hal ini bisa jadi benar tergantung di lingkungan mana orang tersebut berada. Jika kesehariannya pekerjaannya adalah membuat business application yang berkutat dengan data,data dan data binding ? Maka tidak ada gunanya untuk menggunakan c++ untuk hal tersebut, karena salah satu inti dari software development adalah produktifitas dari programmer.
Tetapi…. Kadang kala kita akan berhubungan dengan kasus dimana .NET mencapai keterbatasannya. Tidak semua Win32 API di ekspose ke managed c#. Kadang kala kita harus membuat wrapper untuk mengakses Win32 API tersebut.
Meskipun Microsoft sudah menyediakan alternative untuk menutupi kekurangan managed code tersebut dengan menyediakan Windows API Code Pack. Tetap library tersebut tidak mencakup keseluruhan dari Win32 API. Kita juga tidak dapat mengharapkan Microsoft untuk menulis ulang dari library tersebut sepenuhnya ke c#. Coba lihat Visual Studio 2010. Visual Studio 2010 memanfaatkan ketangguhan dari WPF and XAML. Tetapi tetap saja code native sebelumnya tidak bakalan dibuang begitu saja. Native code still exist. That’s the point. Library tersebut pasti di reuse dan di wrap sehingga dapat diakses dari .NET.
http://archive.msdn.microsoft.com/WindowsAPICodePack
http://windowsteamblog.com/windows/b/developers/archive/2009/05/18/windows-7-managed-code-apis.aspx
http://www.microsoftpdc.com/2009/CL12
Suatu saat mungkin anda akan merasakan hal yang sama ketika dihadapkan kepada kasus dimana .NET tidak dapat menyelesaikan masalah anda sepenuhnya. Saya juga pernah mengalaminya ketika mengerjakan tugas kantor yang berhubungan dengan Video dan Audio processing. Pada akhirnya tetap saja kita harus mengakses dan menggunakan library Win32, COM dengan menggunakan interoperability.
Interoperability juga harus dilakukan dengan hati2 karena kita bisa kena performance penalty jika melakukannya sembarangan.
Beberapa website ini akan memberikan anda gambaran dan pembuktian mengenai keterbatasan .NET dalam beberapa hal sehingga membutuhkan c++.
http://wpfmediakit.codeplex.com/
Ada beberapa cara untuk melakukan interop .NET ke C++. Saya hanya akan memberikan pointer kepada anda untuk melakukan eksplorasi sendiri.
http://blogs.microsoft.co.il/blogs/sasha/archive/2008/02/16/net-to-c-bridge.aspx
http://msdn.microsoft.com/en-us/library/aa730837(v=vs.80).aspx
http://stackoverflow.com/questions/1933210/c-cli-why-should-i-use-it
Apakah anda sudah dapat menerima mengapa managed guy juga membutuhkan native code ?
Tentu saja saya akan melanjutkan inception ini 🙂
Dari penjelasan di atas saya akan memberikan beberapa point dimana kita membutuhkan native c++. Seperti yang kita ketahui bahwa c++ merupakan bahasa yang dekat ke mesin, memiliki abstraksi yang bagus tanpa mengorbankan performance. Sehingga c++ sangat bagus untuk hal-hal berikut
- Mengakses Operating System resource,
- Hardware
- Graphical processing
- Computing power
- Game programming dengan DirectX
- Mengunakan code yang sudah ada dan ditulis dengan menggunakan c, c++
Saya tidak mengatakan bahwa kita harus sepenuhnya pindah agama ke c++. Saya hanya mengingatkan bahwa kita sebaiknya mempersiapkan diri jika dihadapkan dengan keterbatasan managed code. Saya berharap agar kita dapat mengantisipasi hal ini.
C++11
C++ sendiri sudah mengalami perubahan yang sangat besar belakangan ini. C++11 yang baru saja disahkan akhir tahun lalu benar-benar berbeda dengan c++ yang dulu anda kenal. Seperti yang dikatakan oleh pembuatnya Bjarne Stroustrup, c++11 feels like a new language. Jika anda merupakan programmer c++ veteran maka anda dapat mengupgrade pengetahuan anda mengenai perkembangan yang ada. Jika anda merupakan pendatang baru maka anda dapat saja langsung belajar style baru dengan c++11.
Learning something new wouldn’t hurt right ?
Windows 8
Dengan datangnya Windows 8 dengan MetroStyle UI yang diprediksi bakalan release tahun ini, semakin membuat dunia Windows bervariasi. JavaScript dan HTML developer sekarang sudah menjadi first class language untuk melakukan pembangunan aplikasi MetroStyle. Apakah ini membuat c# dan c++ menjadi tidak relevant lagi ?
Tentu saja tidak.
Masing-masing developer dapat memilih alat yang dirasa sesuai dan nyaman digunakan. Tapi…
Satu hal yang pasti adalah keterbatasan di JavaScript, C# tetap masih ada di MetroStyle Apps. Sama saja seperti kasus di Windows sebelumnya. Kedatangan WinRT mungkin membawa angin segar bagi Windows Developer yang tidak familiar dengan COM dan kerumitannya. Tetapi tetap saja untuk saat ini tidak semua Win32 yang dibungkus oleh WinRT.Sebagian harus diakses langsung dengan menggunakan Win32 atau kita harus membuat WinRT component dan mengaksesnya dari JavaScript atau C#.
Tidak jauh berbeda bukan dari jaman ke jaman.
C++ selalu menghantui hidup kita. Kita mungkin bisa lari dan mengabaikan tetapi suatu saat kita pasti dihadapkan kepada keterbatasan itu. One language that can do it all is c++.
Berikut salah satu video yang saya rasa menggambarkan pentingnya interoperability ke c++
http://channel9.msdn.com/posts/Raman-Sharma-Building-Metro-Style-Apps-with-C-and-JavaScript
Anda ingin membuat games dengan DirectX di MetroStyle?
Yeah. That’s should be in c++ I think. There’s no other choice.
Parallelism
Salah satu hal yang makin marak belakangan ini juga adalah mengenai parallelism. C# 5 juga sangat gencar dengan fitur ini.
Nah bagaimana dengan c++ ?
Pagi ini saya baru saja menonton video yang mungkin membuat anda semakin yakin bahwa c++ pantas untuk dipelajari. J. Video ini mengenai c++ AMP (
http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-802T
Video tersebut mengenai C++ AMP (Accelerated Massive Parallism)
Nama yang cukup menakutkan bukan ?
Saya langsung saja mencari padanan dari hal tersebut di c#. Kemudian saya pulang dengan tangan hampa. L. Kita harus melakukan interoperability lagi untuk hal ini.
http://blogs.msdn.com/b/pfxteam/archive/2011/09/21/10214538.aspx
http://blogs.msdn.com/b/pfxteam/archive/2011/11/12/10236375.aspx
C++ untuk c# developers ?
Jadi tidak aneh saya rasa jika dengan kemunculan Windows 8 dan MetroStyle appsnya, c++ semakin relevan di industry. Saatnya bagi kita programmer c# untuk belajar c++. Ingat bahwa ini adalah investasi. Kita tidak akan merasakan efeknya sekarang tetapi di masa yang mendatang. J. Berikut adalah buku yang membantu anda untuk melakukan pengenalan dengan c++
http://blogs.msdn.com/b/jerrynixon/archive/2012/02/20/c-for-c-developers.aspx
Persiapkan diri anda untuk menyambut Windows 8 dengan c++. :).
Go Native!!
Memulai Windows Programming
Setelah menonton presentasi pentolan2 c++ yang ada di GoingNative2012, minat untuk memperdalam skill c++ dan segala sesuatu yg berhubungan dengan windows programming pun muncul. Presentasi yang disajikan tersebut cukup provokatif. Herb Sutter, Bjarne, dkk memang benar2 veteran yang sudah berpengalaman sekali dalam memarketingkan c++ sebagai first class language.
Hal yang pertama kali saya lakukan adalah mencari sample yang dapat dijalankan. Sample yang saya temukan untuk Windows 7 ini adalah HILO Application. Dengan belajar dari sample kita dapat mempercepat learning curve kita untuk sesuatu hal. Hal ini juga dapat digunakan untuk membuktikan bahwa instalasi dan environment setup kita berhasil. Get it running first. !!
Terlebih dahulu saya persiapkan environment terlebih dahulu. Anda perlu mempersiapkan Visual Studio Express 2010. Jika anda sudah memiliki Visual Studio Proffesional atau Ultimate anda sudh bisa lanjut ke step berikutnya.
Berikutnya adalah instalasi Microsoft Windows SDK untuk Windows 7. Anda dapat melakukan instalasi dengan menggunakan online installer atau dapat juga mendownload isonya. Saya disini lebih memilih untuk mendownload ISO, extract dan kemudian lakukan instalasi. Jadi kita dapat mereuse hasil download tersebut dan mendistribusikannya.
Pertama kali saya menjalankan installer tersebut saya mengalami error. Hal ini disebabkan oleh karena pada komputer saya sudah terlebih dahulu terinstall Visual Studio yang mencakup Visual Studio C++ x86. Untuk solusinya jika anda menemukan error pada saat instalasi dapat dilihat pada link berikut ini.
Untuk kasus yang saya alami maka langkahnya cukup sederhana yaitu tinggal melakukan uninstall terhadap Visual Studio C++ x86 dari Add/remove program via control panel.
Setelah instalasi anda dapat melihat bahwa pada C:\Program Files\Microsoft SDKs\Windows\v7.1 sudah lengkap tools, library dan header file yang dibutuhkan untuk melakukan Windows 7 Development.
Langkah berikutnya adalah menjalankan program HILO yang sudah saya sebutkan sebelumnya untuk memastikan bahwa lingkungan kerja kita sudah siap untuk digunakan. Download terlebih dahulu source code dari HILO application.
Jika anda menemukan error berikut ini pada saat melakukan kompilasi dengan Visual Studio. Anda dapat menambahkan C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin ke PATH environment variable. Hal ini dibutuhkan agar visual studio dapat mengakses tools untuk melakukan build terhadap solution tersebut.
Solusi tersebut saya temukan dari link berikut ini
http://social.msdn.microsoft.com/Forums/en/vssetup/thread/c1982f50-0a32-47f2-ab2b-78e53fdb3d77
Tekan F5 untuk menjalankan dan anda sekarang sudah dapat melihat HILO Application. Environment anda telah ready. Anda dapat melakukan development dengan Windows 7 sekarang.
Jika anda ingin mendapatkan dasar-dasar mengenai programming windows maka anda dapat mengikuti tutorial singkat Learn to Program for Windows in C++.
Tutorial singkat lainnya untuk basic programming windows yang cukup komprehensif adalah Developing Windows Application in C++. Tutorial tersebut dibuat oleh Kate Gregory yang merupakan MVP C++. Jadi sudah pasti artikel tersebut berkualitas. 🙂
Setelah mendapatkan seluruh dasar diatas anda bisa melanjutkan HILO Application Step by Step. Sehingga konsep-konsep yang ada dapat langsung di praktekkan.
Anda dapat mendalami Windows Programming dari resource atau link yang tersedia di Windows SDK Page berikut.
Windows Programming merupakan topik yang sangat luas. Anda harus mengerti fundamental dari C++, COM, MFC, ATL Win32 API, and windows internal. Tetapi hal tersebut sangat berharga untuk dipelajari. Setelah anda mengetahui hal tersebut anda dapat lebih mengerti kinerja dari Sistem Operasi Windows anda.
Pengetahuan yang anda dapatkan dengan mempelajari Windows Programming fundamental juga akan bermanfaat pada saat anda membangun aplikasi MetroStyle apps dengan menggunakan C++. Jika anda ingin membuat MetroStyle Games di Windows 8 dengan DirectX maka anda wajib menggunakan C++. So i think it’s very worth it, right ?
Start Learn Now. Windows 8 is coming. Prepare for your equipment. 🙂