D (bahasa pemrograman)

Revisi sejak 5 Maret 2008 08.59 oleh IVP (bicara | kontrib) (←Membatalkan revisi 1297866 oleh Yfktn (Bicara)don removeing wikifysation)

Sejarah Perkembangan D

Bahasa Pemrograman D ditemukan oleh Walter Bright. Bahasa pemrograman ini pada awalnya bernama bahasa pemrograman Mars, yang kemudian seiring berjalannya waktu karena dorongan dari para sahabatnya yang sering menyebutnya dengan nama D maka kemudian namanya berubah menjadi D. Dalam perkembangannya bahasa pemrograman ini banyak mendapat pengaruh dari C, C++, JAVA, C#, Ruby, Python. Bahasa pemrograman ini memiliki banyak kesamaan dengan C.

Walaupun banyak memiliki kesamaan dengan bahasa C - berbeda dengan C++ yang dikatakan sebagai pengembangan dari C - D adalah sebuah bahasa yang didesain dengan menggunakan pendekatan dari pengalaman praktek menggunakan bahasa C++, dibandingkan dari pendekatan yang dilakukan secara teoritis. Bahkan walaupun bisa dibilang bahwa bahasa D ini menggunakan banyak pendekatan dari bahasa C++, D juga telah menghilangkan beberapa konsep C++ dalam pengembangan bahasa ini, sehingga bahasa D tidak 100% compatible dengan C/C++. D seperti yang dimaksudkan juga telah menambahkan banyak sekali fungsionalitas baru yang sangat berguna untuk meningkatkan produktivitas Anda dalam membuat sebuah aplikasi untuk sistem; seperti testing per-unit, GC (garbage Collection), inner class, anonymous function, delegate, array class, template yang lebih mumpuni, multiple inheritance dengan Interface seperti yang dimiliki oleh JAVA, Hyper-threading dan beberapa macam penambahan lainnya. Walaupun demikian, karena D dimaksudkan untuk pemrograman pada level sistem maka fungsionalitas untuk menggunakan bahasa assembler seperti yang dikenalkan pada C/C++ pun masih didukung.

Distribusi D

Sampai saat ini terdapat 2 distribusi bahasa pemrograman D ini di internet. Distribusi pertama dari Digital Mars oleh Walter Bright yang dapat berjalan di Windows dan Linux. Distribusi kedua dari GCC D Compiler yang dapat berjalan di Windows, Mac OS X, dan lainnya.

Pustaka pemograman D

Pustaka pemograman standar

Pustaka pemrograman standar adalah pustaka software yang bisa Anda gunakan langsung untuk membuat aplikasi yang Anda inginkan dengan menggunakan konsep OOP yang telah diimplementasikan oleh bahasa D. Secara garis besar pustaka standar yang digunakan oleh programmer bahasa D ada 2, yaitu:

Phobos adalah pustaka pemrograman yang akan diikutsertakan saat Anda pertama kali menginstal kompiler dan linker bahasa D, bisa dikatakan ini adalah pustaka standar yang dimiliki oleh D. Pustaka ini walaupun sederhana, sudah bisa digunakan untuk membuat beberapa program secara lebih cepat dengan cara menyediakan beberapa fungsi dan rutin yang sangat bermanfaat untuk membuat proses pengembangan program bisa lebih cepat.

Merupakan pengembangan dari pustaka Ares dan Phobos, dengan pengembangan yang lebih komprehensif dan menyeluruh.

Amat disayangkan memang, diantara Phobos dan Tango memiliki pustaka utama yang tidak saling mendukung, sehingga Anda tidak bisa begitu saja mencomot pustaka milik Phobos dan Tango secara bersamaan. Namun pada perkembangannya telah ada proses untuk mensinkronkan penggunaan Tango dan Phobos; proses ini melahirkan satu pustaka standar yang kemudian memungkinkan kita untuk menggunakan Phobos dan Tango secara bersamaan. Project ini dikenal dengan nama Tangobos.

Telah banyak pihak yang membuat pustaka ataupun menerjemahkan berbagai pustaka dari bahasa pemrograman lain. Beberapa pustaka tersebut yang populer digunakan, yaitu:

DWT merupakan salah satu pustaka grafis jendela OOP untuk Windows. DWT diterjemahkan dari SWT yang dimiliki Eclipse yang menggunakan bahasa JAVA. Aplikasi yang dikembangkan dengan pustaka ini akan memiliki antarmuka seperti aplikasi jendela pada JAVA dengan SWT. Poseidon merupakan salah satu editor untuk D yang dikembangkan dengan DWT.

DFL merupakan salah satu pustaka grafis jendela OOP untuk Windows yang memadukan pemrograman jendela dengan operasi socket, registry dan fungsi lainnya pada Windows. Dalam prakteknya, penggunaan pustakan ini benar-benar memudahkan kita seperti halnya menggunakan object Windows pada C#.

GLFW merupakan salah satu pustaka gratis untuk pemrograman Open GL. Walaupun aplikasi ini dikembangkan untuk berbagai kompiler bahasa C seperti Borland, Pelles, Visual C, tetapi pustaka ini juga memiliki dukungan terhadap bahasa pemrograman lain seperti Visual Basic, LUA, Assembler, D.

Banyak pihak yang telah membuat IDE untuk bahasa pemrograman D. Beberapa diantaranya adalah

Sebuah editor tingkat menengah dengan kemampuan auto completion dan manajemen file.

Sebuah editor sederhana dengan line number dan pewarnaan keyword tertentu.

Sebuah editor yg memiliki antarmuka visual untuk pengembangan aplikasi GUI berbasis DFL.

Sebuah editor dengan fasilitas auto completion, Code Folding dll.

Contoh-contoh

Hello World

Berikut ini program Helo Dunia menggunakan Phobos

import std.stdio;

void main(char[][] args)
{
  writefln("Halo Dunia");
}

Berikut ini program Hello World menggunakan Tango

import tango.io.Stdout;

void main(char[][] args)
{
  Stdout("Halo Dunia").newline;
}

char []

Berikut ini pengaksesan array of char, yang notabene merupakan String dalam bahasa kasarnya. Perhatikan bahwa ini tidak diperlukan apabila kita benar-benar ingin menggunakan D. Contoh ini hanya cara saya ingin menunjukkan kemudahan dalam D, dibandingkan Anda yang sudah pernah berurusan dengan char dan pointer :)

// saya hanya ingin menggunakan fungsi writefln di pustaka std.stdio milik phobos
import std.stdio: writefln; 
/*
 * I can't found any of it function in phobos lib
 */
class MString
{
	static public char [] midDex(char [] a, int indexA, int indexB)
	{	
		return a[indexA .. (indexB+1)];
	}
	
	static public char [] mid(char [] a, int indexA, int dlength=0)
	{
		return a[indexA .. ((dlength>0)?indexA+dlength:a.length)];
	}
		
	static public char [] left(char [] a, int width)
	{
		return midDex(a, 0, width-1);
	}
	static public char [] right(char [] a, int width)
	{
		return midDex(a, (a.length - width), a.length-1);
	}
}

/**
 * perhatikan unittest, salah satu fungsionalitas dalam bahasa D. Yang bisa memberikan kepada kita
 * kemampuan untuk melakukan testing terhadap salah satu bagian program yang kita miliki
 */
unittest
{
	assert(MString.midDex("0123456789", 3, 6) == "3456");
	assert(MString.left("0123456789", 3) == "012");
	assert(MString.right("0123456789", 3) == "789");
	assert(MString.mid("0123456789", 3, 2) == "34");
	assert(MString.mid("abcdefghijklmn", 5, 3) == "fgh");
	assert(MString.mid("abcdefghijklmn", 5) == "fghijklmn");
}

void main(char [][] args)
{
	char [] a = MString.left("Aku suka kamu D?");
	// perhatikan tanda ~ adalah concatenation
	writefln("Ini adalah isi dari a" ~ a ~ " mudah kan :) ");
	writefln("Ini adalah isi dari %s mudah kan", a); // bisa juga begini
	char [] b = "Berpikirlah dengan mudah\n" ~ a ~ " cobain ini";
	writefln("Asyik kan: %s", b);
}

Thread

Berikut ini tentang pemrograman Thread yang menggunakan library Phobos. Skenarionya, ini merupakan pemrograman berbasis console, dimana seorang user bisa menghentikan proses yang sedang terjadi dengan menekan tombol q atau Q di keyboard. Proses yang sedang terjadi dijalankan melalui sebuah Thread dan proses menunggu juga dilakukan dalam Thread yang dipanggil dari sebuah Thread utama di fungsi main.

import std.thread;
import std.stdio;
import std.c.stdio;
import std.date;
// Thread proses utama ....
class mythread:Thread
{
	private char [] d_name = "";
	private long d_nloop = 10;
	private bool d_stop = false;
	this(char [] name, long nloop)
	{
		super();
		writefln(name ~ " called");
		this.d_name = name;
		this.d_nloop = nloop;
	}
		
	override public int run()
	{	
		long i = 0;
		for(i=0;(i<this.d_nloop && (!d_stop));i++)
		{
		    //writefln(d_name ~ " called again ");			
		}
		if( d_stop )
		    writefln(d_name ~ " stopped by user in " 
		        ~ std.string.toString(i) ~ " times of loop");
		else
			writefln(d_name ~ " Finished ..." ~ std.string.toString(d_nloop));
		return 0;
	}
	
	public void stopIt()
	{
		d_stop = true;
	}
}
// thread untuk menunggu pengguna menekan q atau Q
class UserToStopAllThread: Thread
{
	private bool d_stop = false;
	this()
	{
		super();
	}
	
	override public int run()
	{
		while(!d_stop)
		{
			char ch = getch();
			if(ch == 'q' || ch == 'Q')
				break;
		}
		return 0;
	}
	
	public void stopIt()
	{
		d_stop = true;
	}
}
// ini adalah Thread utama ....
void main(char [][] args)
{
	int i = 0;
	mythread a = new mythread("A", 9999999999999);

	writefln("Tekan q untuk menghentikan proses ....");
	UserToStopAllThread utsa = new UserToStopAllThread;
	a.start();
	utsa.start();
	
	while(a.getState() == Thread.TS.RUNNING && utsa.getState() == Thread.TS.RUNNING)
	{
		// tunggu sampai a selesai atau user menekan tombol 'Q' or 'q'
	}
	if(a.getState() == Thread.TS.RUNNING) a.stopIt(); // pastikan berhenti
	if(utsa.getState() == Thread.TS.RUNNING) utsa.stopIt(); // pastikan berhenti
}

Pranala Berkenaan