D (bahasa pemrograman)

Dari Wikipedia bahasa Indonesia, ensiklopedia bebas
Jump to navigation Jump to search

Sejarah Perkembangan D[sunting | sunting sumber]

D( bahasa pemrograman ) adalah bahasa yang dibuat oleh Walter Bright. D mulai dibuat pada tahun 1999 dan disebarkan ke publik pertama kali pada tahun 2001[1] , kemudian mencapai versi 1.0 pada tahun 2007[2].

pada awalnya, ketika D berada pada versi 1.0, banyak programmer yang merasa kurang puas dengan pustaka pemrograman phobos saat itu, komunitas D membuat pustaka pemrograman mereka sendiri yang mereka namakan Tango dan diberitakan beberapa tanggal setelah D versi 1.0 diluncurkan[3]Tango memakai pendekatan yang berbeda dengan Phobos, dimana Tango lebih mirip dengan Pustaka pemrograman Java.

kemudian pada Juni 2007[4] D2 diluncurkan, dimana banyak fitur baru dimasukkan ke dalam D, seperti sistem constant, functional, contract.

Andrei Alexandrescu meluncurkan buku D yang berjudul The D Programming Language pada tanggal 12 Juni 2010

Distribusi D[sunting | sunting sumber]

  • DMD, compiler yang dibuat Walter Bright, pencipta D
  • GDC, compiler D yang dibuat dengan backend GCC
  • LDC, compiler D yang dibuat dengan backend LLVM

Pustaka pemograman D[sunting | sunting sumber]

Pustaka pemograman standar[sunting | sunting sumber]

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.

pustaka pemrograman dari D1 ada 2, satu phobos dan satu lagi tango( dibuat oleh komunitas D ) :

  • Phobos, dibuat oleh Walter Bright
  • Tango, dibuat oleh komunitas D, lebih popular di masa D1, namun, tidak bisa digunakan bersama dengan phobos

Pustaka pemrograman dari D2 ada 1, phobos, meskipun begitu ada projek untuk membawa Tango dari D1 ke D2[5]

Pustaka GUI (Graphical User Interface)[sunting | sunting sumber]

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 praktiknya, 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.

DlangUI merupakan pustaka gratis untuk membuat aplikasi dengan GUI

Integrated Development Environment[6][sunting | sunting sumber]

memiliki fungsi membuat project D, auto completion, dll tersedia di Windows, Linux, Mac OSX, FreeBSD

IDE yang ditulas dalam D, dengan menggunakan DlangUI, yang dibuat oleh pencipta yang sama

Contoh-contoh[sunting | sunting sumber]

Hello World[sunting | sunting sumber]

Berikut ini program Helo Dunia dalam Dlang

1 import std.stdio;
2 
3 void main( string[] args )
4 {
5     writeln( "hello world" );
6 }

char [][sunting | sunting sumber]

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[sunting | sunting sumber]

Berikut ini tentang pemrograman Thread yang menggunakan library Phobos. Skenarionya, ini merupakan pemrograman berbasis console, di mana 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
}

Functional[sunting | sunting sumber]

1 import std.stdio;
2 import std.algorithm : map;
3 
4 void main( string[] args )
5 {
6     int[] arr = [ 1, 2, 3, 4, 5 ];
7     arr = map!( x => x + 1 )( arr );
8     writeln( arr ) //[ 2, 3, 4, 5, 6 ]
9 }

Metaprogramming[sunting | sunting sumber]

contoh template dalam D

auto add( T )( T a, T b )
{
    return a + b;
}

import std.stdio;

void main( string[] args )
{
    int a = 10;
    int b = 20;
    writeln( add( a + b ) ) //30
    float x = 10.3;
    float y = 20.4;
    writeln( add( x, y ) ) //30.7
}

Pranala Berkenaan[sunting | sunting sumber]

Referensi[sunting | sunting sumber]

  1. ^ "Change Log - D Programming Language 1.0 - Digital Mars". www.digitalmars.com (dalam bahasa Inggris). Diakses tanggal 2018-06-17. 
  2. ^ "Change Log - D Programming Language 1.0 - Digital Mars". www.digitalmars.com (dalam bahasa Inggris). Diakses tanggal 2018-06-17. 
  3. ^ "Announcing a new library". forum.dlang.org (dalam bahasa Inggris). Diakses tanggal 2018-06-17. 
  4. ^ https://dlang.org/blog/2018/03/03/dmd-2-079-0-released
  5. ^ "SiegeLord/Tango-D2". GitHub (dalam bahasa Inggris). Diakses tanggal 2018-06-17. 
  6. ^ "IDEs - D Wiki". wiki.dlang.org (dalam bahasa Inggris). Diakses tanggal 2018-06-18.