Di dunia Microsoft Windows ada DLL, yang bukan singkatan dari "dan lain-lain" atau "dan lagi-lagi" (walau yang terakhir ini mungkin agak mirip dengan maksud hidup DLL itu *smile*).
DLL disitu adalah singkatan dari Dynamic Link-Library.
Yang artinya kurang lebih adalah kumpulan (pustaka/library, -red) fungsi program yang bisa digunakan oleh program-program lain.
Belakangan ini aku lagi belajar cara bikin semacam DLL itu, tapi di dunia Linux, or I should've say GNU/Linux to not upset anyone. Di dunia ini dia dikenal dengan nama shared objects (CMIIW). Tentu saja aku menggunakan bahasa C untuk membuatnya... :-)
Kalau dilihat dari sudut pandang bahasa C, sebetulnya nggak ada yang spesial tentang pembuatan shared-objects ini, satu hal yang mudah untuk diingat adalah tidak adanya fungsi main(), boleh buat beragam fungsi, asal namanya bukan main(). Ini bisa dimengerti, karena memang dia tidak akan dijalankan langsung.
Beda yang kedua adalah, pada waktu kompilasi, perintah yang digunakan agak sedikit berbeda. Kalau pakai gcc (compiler yang hebat itu!) , gunakan perintah
gcc -shared -fPIC namafile.c -o namafileoutput.so
Dengan demikian maka kumpulan fungsi kita tadi bisa diakses dari program-program lain atau bahkan dari pustaka-pustaka lainnya (detailnya agak sedikit lebih rumit, tapi ya gampangnya gitu dech).
Namun bagaimana jika kita ingin membuat pustaka kita ini dapat melihat fungsi ataupun variabel yang ada di program yang memanggil pustaka kita ini? Ini dinding yang bikin ku kepentok kemarin.
Aku coba teknik standar dalam bahasa C seperti mendeklarasikan variabel/fungsi itu dengan deklarasi extern yang artinya variabel/fungsi itu tidak dideklarasikan dalam pustaka tadi. Dan harus dicari deklarasi jelasnya dimana nanti belakangan. Namun teknik ini tidak berhasil.
Ternyata ada 1 lagi argumen di gcc yang bisa dipakai untuk mengatasi masalah ini. Argumen itu adalah argumen -rdynamic. Digunakan ketika kita mengkompilasi program yang akan memanggil pustaka kita tadi, agar variabel/fungsi-2 yang ada di program ini di eksport dan bisa diakses dari pustaka kita tadi pada saat dijalankan.
Dan masalah ini namanya adalah Reverse Dependencies. Gitu.
Capek dech.
Friday, November 24, 2006
Wednesday, November 15, 2006
Hmm... Free Software... yummy
Jadi,
Java, yang bahasa dan framework pemrograman, dan god knows what apaan lagi dia itu sebenarnya, yang dibuat oleh James Gosling dari Sun yang hebat itu, akhirnya menjadi Free Software dengan menggunakan lisensi GPLv2.
Hmm... ini artinya apa ya?
Java, yang bahasa dan framework pemrograman, dan god knows what apaan lagi dia itu sebenarnya, yang dibuat oleh James Gosling dari Sun yang hebat itu, akhirnya menjadi Free Software dengan menggunakan lisensi GPLv2.
Hmm... ini artinya apa ya?
Friday, November 10, 2006
Jumpa lagi...
Pernah coba mrogram pakai bahasa tingkat Enak (e gede) kayak php atau perl atau ruby? Segalanya sudah enak tersedia disitu. Paling tidak, hampir segalanya.
Ada beberapa yang bisa dicatat, tapi saat ini, enaknya kita ngomongin soal "associative-array", salah satu jenis struktur data yang didukung oleh bahasa-bahasa tersebut. Dengan associative-array ini, kita bisa melakukan hal-hal sebagai berikut:
daftar_harga["apel"] = 2000;
daftar_harga["mangga"] = 3000;
Sekarang, mari bermain dengan bahasa C. Bahasa tingkat enak (e kecil) yang satu ini sungguh ajaib. Konsepnya gak banyak, cukup untuk bisa disimpen di alamat memori akses langsung di otak kita. Ini keliatan awalnya. Nyatanya, setan didalamnya cukup banyak untuk bisa bikin stress orang-orang yang gak siap mental.. :-)
Nah, di C, tidak ada yang namanya associative-array. Jenis data array memang ada di C, namun tidak associative, semua array hanya bisa punya indeks angka. Jadi kalau ingin melakukan hal seperti diatas dalam C, kita jadi harus melakukan, kira-kira, hal berikut:
#define APEL 0
#define MANGGA 1
daftar_harga[APEL] = 2000;
daftar_harga[MANGGA] = 3000;
penjelasan detailnya apa itu #define, silahkan cari di kamus-kamus terdekat.
Problem ini tentu saja selesai, kalau kita memang hanya ingin melihat daftar harga Apel dan Mangga. Bagaimana bila kita tiba-tiba ingin melihat juga daftar harga Jeruk, Salak, dan Semangka?
Di php dan kawan-kawan, ini bukan masalah besar, malah jika ingin kita bisa saja membuat associative-array secara dinamis dengan mengambil daftar buah dan harga dari sebuah file atau mungkin dari tabel di database.
Bagaimana melakukan hal yang sama dalam C?
Untuk itu, kita jadi perlu berkenalan dengan hash dan linked list, dua format struktur data yang bisa digambarkan dengan 1 kata; "Menarik"!
Dari dulu waktu mulai belajar C, kalau ketemu linked list, aku selalu garuk-garuk kepala. Pertama pusing, bagaimana sebenarnya dia bekerja, kemudian pusing, mengapa implementasi linked-list ku selalu berhasil mengeluarkan pesan "Segmentation fault". Dan terakhir, suka terkagum-kagum sendiri karena akhirnya (mengira) berhasil mengerti dan membuat linked list sendiri :-)
Cukup dengan nostalgianya.
Sekarang bagaimana kita bisa menggunakan hash dan linked list untuk implementasi sesuatu seperti associative array?
Konsep-nya sederhana, begini mungkin ceritanya:
1. Mengingat bahwa di C segala array itu hanya bisa diindex dengan angka, maka kita perlu merubah kata-kata yang ingin kita jadikan indeks itu menjadi angka terlebih dahulu. Inilah gunanya hash. Dengan menggunakan fungsi hash, kita bisa merubah kata-kata "pisang" jadi angka 1, misalnya.
2. Keliatannya selesai? Belum. Mengingat bahwa tidak ada fungsi hash yang sempurna, dalam artian selalu menghasilkan angka yang berbeda untuk setiap macam kata, maka tabrakan (collission) pasti akan terjadi. Misalnya, kalau hash("pisang") => 1, maka bukan tidak mungkin kalau hash("rambutan") juga => 1. Kalau begini, apa yang bisa kita lakukan? Ada dua yang kuketahui, 1 yang disebut dengan Chaining, dan 2 yang disebut dengan Open-Addressing.
3. Berhubung kita lagi ngomongin linked-list (dan aku gak ngerti Open-addressing *smile*), maka kita memilih metode Chaining untuk memecahkan masalah tabrakan tadi. Chaining ini artinya, semua data yang mau kita associate-kan kita simpan dalam sebuah hash-table dalam bentuk linked-list.
Susah juga ya menjelaskannya.
Mungkin aku harusnya menjelaskan soal apa itu linked-list dulu kali ya?
to-be continued aja dech... :-)
ps: anyone interested, please lookup the details on Google or Wikipedia, they should have it and should provide better explanations than what I can give.
Ada beberapa yang bisa dicatat, tapi saat ini, enaknya kita ngomongin soal "associative-array", salah satu jenis struktur data yang didukung oleh bahasa-bahasa tersebut. Dengan associative-array ini, kita bisa melakukan hal-hal sebagai berikut:
daftar_harga["apel"] = 2000;
daftar_harga["mangga"] = 3000;
Sekarang, mari bermain dengan bahasa C. Bahasa tingkat enak (e kecil) yang satu ini sungguh ajaib. Konsepnya gak banyak, cukup untuk bisa disimpen di alamat memori akses langsung di otak kita. Ini keliatan awalnya. Nyatanya, setan didalamnya cukup banyak untuk bisa bikin stress orang-orang yang gak siap mental.. :-)
Nah, di C, tidak ada yang namanya associative-array. Jenis data array memang ada di C, namun tidak associative, semua array hanya bisa punya indeks angka. Jadi kalau ingin melakukan hal seperti diatas dalam C, kita jadi harus melakukan, kira-kira, hal berikut:
#define APEL 0
#define MANGGA 1
daftar_harga[APEL] = 2000;
daftar_harga[MANGGA] = 3000;
penjelasan detailnya apa itu #define, silahkan cari di kamus-kamus terdekat.
Problem ini tentu saja selesai, kalau kita memang hanya ingin melihat daftar harga Apel dan Mangga. Bagaimana bila kita tiba-tiba ingin melihat juga daftar harga Jeruk, Salak, dan Semangka?
Di php dan kawan-kawan, ini bukan masalah besar, malah jika ingin kita bisa saja membuat associative-array secara dinamis dengan mengambil daftar buah dan harga dari sebuah file atau mungkin dari tabel di database.
Bagaimana melakukan hal yang sama dalam C?
Untuk itu, kita jadi perlu berkenalan dengan hash dan linked list, dua format struktur data yang bisa digambarkan dengan 1 kata; "Menarik"!
Dari dulu waktu mulai belajar C, kalau ketemu linked list, aku selalu garuk-garuk kepala. Pertama pusing, bagaimana sebenarnya dia bekerja, kemudian pusing, mengapa implementasi linked-list ku selalu berhasil mengeluarkan pesan "Segmentation fault". Dan terakhir, suka terkagum-kagum sendiri karena akhirnya (mengira) berhasil mengerti dan membuat linked list sendiri :-)
Cukup dengan nostalgianya.
Sekarang bagaimana kita bisa menggunakan hash dan linked list untuk implementasi sesuatu seperti associative array?
Konsep-nya sederhana, begini mungkin ceritanya:
1. Mengingat bahwa di C segala array itu hanya bisa diindex dengan angka, maka kita perlu merubah kata-kata yang ingin kita jadikan indeks itu menjadi angka terlebih dahulu. Inilah gunanya hash. Dengan menggunakan fungsi hash, kita bisa merubah kata-kata "pisang" jadi angka 1, misalnya.
2. Keliatannya selesai? Belum. Mengingat bahwa tidak ada fungsi hash yang sempurna, dalam artian selalu menghasilkan angka yang berbeda untuk setiap macam kata, maka tabrakan (collission) pasti akan terjadi. Misalnya, kalau hash("pisang") => 1, maka bukan tidak mungkin kalau hash("rambutan") juga => 1. Kalau begini, apa yang bisa kita lakukan? Ada dua yang kuketahui, 1 yang disebut dengan Chaining, dan 2 yang disebut dengan Open-Addressing.
3. Berhubung kita lagi ngomongin linked-list (dan aku gak ngerti Open-addressing *smile*), maka kita memilih metode Chaining untuk memecahkan masalah tabrakan tadi. Chaining ini artinya, semua data yang mau kita associate-kan kita simpan dalam sebuah hash-table dalam bentuk linked-list.
Susah juga ya menjelaskannya.
Mungkin aku harusnya menjelaskan soal apa itu linked-list dulu kali ya?
to-be continued aja dech... :-)
ps: anyone interested, please lookup the details on Google or Wikipedia, they should have it and should provide better explanations than what I can give.
Thursday, November 09, 2006
Bersyukur pada-Mu...
ya Allah,
aku sering lupa dan kurang bersyukur.
Untuk hidup yang Kau berikan...
atas setiap hembusan nafas.
Untuk mendung hari ini,
atau panas esok hari.
aku sering lupa dan kurang bersyukur.
Untuk hidup yang Kau berikan...
atas setiap hembusan nafas.
Untuk mendung hari ini,
atau panas esok hari.
Subscribe to:
Posts (Atom)