D (bahasa pemrograman): Perbedaan antara revisi

Konten dihapus Konten ditambahkan
Amirobot (bicara | kontrib)
Losstreak (bicara | kontrib)
kTidak ada ringkasan suntingan
 
(39 revisi perantara oleh 27 pengguna tidak ditampilkan)
Baris 1:
{{rapikan|topik=teknologi informasi}}
'''D''', juga dikenal dengan '''dlang''', adalah sistem pemrograman multi-paradigma yang dibuat oleh Walter Bright pada [[Digital]] Mars dan dirilis pada 2001. Andrei Alexandrescu bergabung dengan upaya desain dan pengembangan pada 2007. Meskipun ini berasal sebagai rekayasa ulang dari [[C++]], D adalah bahasa yang sangat berbeda — fitur D dapat dianggap sebagai ide yang disederhanakan dan diperluas dari C++,<ref>{{Cite web|title=Programming in D for C++ Programmers - D Programming Language|url=https://dlang.org/articles/cpptod.html|website=dlang.org|access-date=2022-04-05}}</ref> Namun, D juga menarik inspirasi dari bahasa pemrograman tingkat tinggi lainnya, khususnya [[Java (programming language)|Java]], [[Python (programming language)|Python]], [[Ruby (bahasa pemrograman)|Ruby]], [[C Sharp (bahasa pemrograman)|C#]], dan [[Eiffel (bahasa pemrograman)|Eiffel]].
 
[[Pengetikan disimpulkan]], [[Pengumpulan sampah (ilmu komputer)|manajemen memori otomatis]] dan [[gula sintaksis]] untuk [[Tipe data|tipe umum]] memungkinkan [[Pengembangan perangkat lunak|pengembangan yang lebih cepat]], sementara [[Pengecekan batas|pemeriksaan batas]] dan [[desain dengan kontrak]] menemukan ''bug'' lebih awal saat waktu penggunaan, dan [[sistem tipe]] sadar [[Konkurensi (ilmu komputer)|konkurensi]] menangkap ''bug'' pada waktu kompilasi.<ref>Archived at [https://ghostarchive.org/varchive/youtube/20211211/RlVpPstLPEc Ghostarchive]{{cbignore}} and the [https://web.archive.org/web/20101025114033/http://www.youtube.com//watch?v=RlVpPstLPEc Wayback Machine]{{cbignore}}: {{Cite AV media|url=https://www.youtube.com/watch?v=RlVpPstLPEc|title=Three Cool Things About D|date=2 August 2010|people=Andrei Alexandrescu}}{{cbignore}}</ref>
 
{{Infobox programming language
| name = Bahasa pemrograman D
| logo = D Programming Language logo.svg
| logo size = 120px
| paradigm = [[Bahasa pemrograman multi-paradigma|Multi-paradigma]]: [[pemrograman fungsional|fungsional]], [[pemrograman imperatif|imperatif]], [[pemrograman berorientasi objek|berorientasi objek]]
| released = {{start date and age|df=y|2001|12|08}}<ref name="D1 changelog1" />
| designer = [[Walter Bright]], [[Andrei Alexandrescu]] (sejak 2007)
| developer = [[D Language Foundation]]
| typing = [[Pengetikan yang disimpulkan|Disimpulkan]], [[pengetikan statis|statis]], [[pengetikan yang kuat|kuat]]
| implementations = [https://github.com/dlang/dmd DMD] ([[implementasi referensi]]), [https://gcc.gnu.org/ GCC],
[https://gdcproject.org/ GDC],
[https://github.com/ldc-developers/ldc LDC], [https://github.com/SDC-Developers/SDC SDC]
| dialects =
| influenced = [[Genie (bahasa pemrograman)|Genie]], MiniD, [[Qore (bahasa pemrograman)|Qore]], [[Swift (bahasa pemrograman)|Swift]],<ref name="Swift - Getting the location of a caller">{{cite web |url=https://developer.apple.com/swift/blog/?id=15 |title=Building assert() in Swift, Part 2: __FILE__ and __LINE__ |access-date=25 September 2014}}</ref> [[Vala (bahasa pemrograman)|Vala]], [[C++11]], [[C++14]], [[C++17]], [[C++20]], [[Go (bahasa pemrograman)|Go]], [[C Sharp (bahasa pemrograman)|C#]], dan lainnya.
| license = [[Boost Software License|Boost]]<ref name="D-frontend-license" /><ref name="boost-backend">{{cite web |url=https://forum.dlang.org/post/oc8acc$1ei9$1@digitalmars.com |title=dmd Backend converted to Boost License |date=7 April 2017 |access-date=9 April 2017}}</ref><ref>{{cite web |url=http://dlang.org/faq.html |title=D 2.0 FAQ |access-date=11 August 2015}}</ref>
<!--GDC: [[GNU General Public License#Version 3|GPLv3+]];<br />
LDC: GPLv2+, partially [[BSD licenses|BSD]]
| wikibooks = D Programming
| caption =
| file_ext = .d<ref>{{cite web |url= https://fileinfo.com/extension/d |title=D Programming Language - Fileinfo.com |access-date=15 November 2020}} {{citation needed|date=September 2020}}</ref><ref>{{cite web |url= https://dlang.org/dmd-windows.html |title=D Programming Language - dlang.org |access-date=15 November 2020}} {{citation needed|date=September 2020}}</ref><!-- DO NOT ADD .di HERE. It is not part of the language, it is part of the implementation. -->| latest release version = {{wikidata|property|reference|edit|P348}}
| latest release date = {{start date|{{wikidata|qualifier|P348|P577}}}}
| influenced_by = [[BASIC]],<ref>{{cite web |url=https://news.ycombinator.com/item?id=33846139 |title=On: Show HN: A nice C string API |date=December 3, 2022 |access-date=4 December 2022 |website=[[Hacker News]]}}</ref> [[C (bahasa pemrograman)|C]], [[C++]], [[C Sharp (bahasa pemrograman)|C#]], [[Eiffel (bahasa pemrograman)|Eiffel]],<ref>{{cite book |last1=Alexandrescu |first1=Andrei |title=The D programming language |url=https://archive.org/details/dprogramminglang00alex |url-access=limited |date=2010 |publisher=Addison-Wesley |location=Upper Saddle River, New Jersey |isbn=978-0321635365 |page=[https://archive.org/details/dprogramminglang00alex/page/n341 314] |edition=First}}</ref> [[Java (bahasa pemrograman)|Java]], [[Python (bahasa pemrograman)|Python]]
| operating_system = [[FreeBSD]], [[Linux]], [[macOS]], [[Microsoft Windows|Windows]]
}}
 
== Sejarah Perkembangan D ==
D (bahasa pemrograman ) adalah bahasa yang dibuat oleh [[wiki-indonesia.club/Walter Bright|Walter Bright]]. D mulai dibuat pada tahun 1999 dan disebarkan ke publik pertama kali pada tahun 2001,<ref>{{Cite web|url=http://www.digitalmars.com/d/1.0/changelog1.html|title=Change Log - D Programming Language 1.0 - Digital Mars|website=www.digitalmars.com|language=en-US|access-date=2018-06-17}}</ref> kemudian mencapai versi 1.0 pada tahun 2007.<ref>{{Cite web|url=http://www.digitalmars.com/d/1.0/changelog2.html|title=Change Log - D Programming Language 1.0 - Digital Mars|website=www.digitalmars.com|language=en-US|access-date=2018-06-17}}</ref>
[[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.
 
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<ref>{{Cite web|url=http://forum.dlang.org/post/en9ou4$23hr$1@digitaldaemon.com|title=Announcing a new library|website=forum.dlang.org|language=en-US|access-date=2018-06-17}}</ref> Tango memakai pendekatan yang berbeda dengan Phobos, dimana Tango lebih mirip dengan Pustaka pemrograman Java.
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.
 
kemudian pada Juni 2007<ref>https://dlang.org/blog/2018/03/03/dmd-2-079-0-released</ref> 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 ===
 
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.
* [https://dlang.org/dmd-windows.html DMD], compiler yang dibuat Walter Bright, pencipta D
* [https://gdcproject.org/ GDC], compiler D yang dibuat dengan backend GCC
* [https://wiki.dlang.org/LDC LDC], compiler D yang dibuat dengan backend LLVM
 
== 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:
 
pustaka pemrograman dari D1 ada 2, satu phobos dan satu lagi tango( dibuat oleh komunitas D ):
* [http://www.digitalmars.com/d/2.0/phobos/phobos.html Phobos]
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.
* [http://www.dsource.org/projects/tango Tango]
Merupakan pengembangan dari pustaka Ares dan Phobos, dengan pengembangan yang lebih komprehensif dan menyeluruh.
 
* Phobos, dibuat oleh Walter Bright
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 [http://www.dsource.org/projects/tangobos Tangobos].
* 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<ref>{{Cite web|url=https://github.com/SiegeLord/Tango-D2|title=SiegeLord/Tango-D2|website=GitHub|language=en|access-date=2018-06-17}}</ref>
 
=== Pustaka GUI ([[Graphical User Interface]]) ===
Baris 25 ⟶ 60:
DWT merupakan salah satu pustaka grafis jendela [[OOP]] untuk Windows. DWT diterjemahkan dari [[SWT]] yang dimiliki [[Eclipse (perangkat lunak)|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.
* [http://wiki.dprogramming.com/Dfl/HomePage DFL] ([http://wiki.dprogramming.com/Dfl/HomePage D Framework Library])
DFL merupakan salah satu pustaka [[grafis]] jendela OOP untuk Windows yang memadukan pemrograman jendela dengan operasi [[socket]], [[registry]] dan fungsi lainnya pada Windows. Dalam prakteknyapraktiknya, penggunaan pustakan ini benar-benar memudahkan kita seperti halnya menggunakan object Windows pada C#.
* [[GLFW]]
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.
 
* [https://github.com/buggins/dlangui DlangUI]
== [[Integrated Development Environment]] ==
Banyak pihak yang telah membuat [[IDE]] untuk bahasa pemrograman D. Beberapa diantaranya adalah
* [[Poseidon]] (Windows & Linux)
Sebuah [[editor]] tingkat menengah dengan kemampuan [[auto completion]] dan [[manajemen file]] serta integrated debugging.
* [http://www.dprogramming.com/dcode.php DCode] (Windows)
Sebuah editor sederhana dengan [[line number]] dan pewarnaan [[keyword]] tertentu.
* [[LEDS]] (Linux)
* [http://www.dprogramming.com/entice.php Entice] (Windows)
Sebuah editor yg memiliki antarmuka [[visual]] untuk pengembangan [[aplikasi]] [[GUI]] berbasis [[DFL]].
* [http://scite4d.chinese-blog.org/ scite4d]
Sebuah editor dengan fasilitas auto completion, Code Folding dll.
 
DlangUI merupakan pustaka gratis untuk membuat aplikasi dengan GUI
== Contoh-contoh ==
=== Hello World ===
Berikut ini program '''Helo Dunia''' menggunakan Phobos
 
== [[Integrated Development Environment]]<ref>{{Cite web|url=https://wiki.dlang.org/IDEs|title=IDEs - D Wiki|website=wiki.dlang.org|language=en|access-date=2018-06-18}}</ref> ==
<source lang="D">
import std.stdio;
 
* [https://wiki.dlang.org/CodeBlocks Code::Blocks].
void main(char[][] args)
{
writefln("Halo Dunia");
}
</source>
 
memiliki fungsi membuat project D, auto completion, dll
Berikut ini program Hello World menggunakan Tango
tersedia di Windows, Linux, Mac OSX, FreeBSD
 
* [https://github.com/BBasile/Coedit Codeit] {{Webarchive|url=https://web.archive.org/web/20170303233646/https://github.com/BBasile/Coedit |date=2017-03-03 }}
<source lang="D">
* [https://github.com/buggins/dlangide DlangIDE]
import tango.io.Stdout;
 
IDE yang ditulas dalam D, dengan menggunakan DlangUI, yang dibuat oleh pencipta yang sama
 
* [https://github.com/intellij-dlanguage/intellij-dlanguage D plugin untuk Intellij]
* [http://rainers.github.io/visuald/visuald/StartPage.html plugin D untuk Visual Studio]
* [https://bitbucket.org/KuanHsu/poseidond Poseidon]
* [http://www.zeusedit.com/d.html Zeus]
 
== Contoh-contoh ==
=== Hello World ===
Berikut ini program '''Helo Dunia''' dalam Dlang<syntaxhighlight lang="d" line="1">
import std.stdio;
 
void main(char[] string[] args )
{
Stdout writeln( "Halohello Duniaworld" ).newline;
}
</syntaxhighlight>
</source>
 
=== 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
<sourcesyntaxhighlight lang="D">
// 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
Baris 77 ⟶ 108:
{
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)
{
Baris 114 ⟶ 145:
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);
}
</syntaxhighlight>
</source>
 
==== Konkurensi ====
Konkurensi sepenuhnya diterapkan di pustaka, dan tidak memerlukan dukungan dari kompilernya. Implementasi alternatif dan metodologi penulisan kode bersamaan dimungkinkan. Penggunaan sistem pengetikan D memang membantu memastikan keamanan memori.<syntaxhighlight lang="d">
import std.stdio, std.concurrency, std.variant;
 
void foo()
{
bool cont = true;
 
while (cont)
{
receive( // Delegates digunakan untuk mencocokkan jenis pesan.
(int msg) => writeln("int received: ", msg),
(Tid sender) { cont = false; sender.send(-1); },
(Variant v) => writeln("huh?") // Varian cocok dengan jenis apa pun
);
}
}
 
void main()
{
auto tid = spawn(&foo); // membuat sebuah thread foo() berjalan baru
 
foreach (i; 0 .. 10)
tid.send(i); // mengirim beberapa integer
 
tid.send(1.0f); // mengirim sebuah float
tid.send("hello"); // mengirim sebuah string
tid.send(thisTid); // mengirim sebuah struct (Tid)
 
receive((int x) => writeln("Thread utama menerima pesan: ", x));
}
</syntaxhighlight>
 
=== Thread ===
Berikut ini tentang pemrograman Thread yang menggunakan library Phobos. Skenarionya, ini merupakan pemrograman berbasis console, dimanadi 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.
<sourcesyntaxhighlight lang="D">
import std.thread;
import std.stdio;
Baris 141 ⟶ 205:
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()
{
Baris 170 ⟶ 234:
super();
}
 
override public int run()
{
Baris 181 ⟶ 245:
return 0;
}
 
public void stopIt()
{
Baris 197 ⟶ 261:
a.start();
utsa.start();
 
while(a.getState() == Thread.TS.RUNNING && utsa.getState() == Thread.TS.RUNNING)
{
Baris 205 ⟶ 269:
if(utsa.getState() == Thread.TS.RUNNING) utsa.stopIt(); // pastikan berhenti
}
</syntaxhighlight>
</source>
 
=== Fungsional ===
<syntaxhighlight lang="d" line="1">
import std.stdio;
import std.algorithm: map;
 
void main( string[] args )
{
int[] arr = [ 1, 2, 3, 4, 5 ];
arr = map!( x => x + 1 )( arr );
writeln( arr ) //[ 2, 3, 4, 5, 6 ]
}
</syntaxhighlight>
 
=== Metaprogramming ===
contoh template dalam D<syntaxhighlight lang="d">
auto add( T )( T a, T b )
{
return a + b;
}
 
import std.stdio;https:/
 
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
}
</syntaxhighlight>
 
== Pranala Berkenaan ==
 
* [httphttps://wwwdlang.digitalmars.comorg/d/2.0/index.html Situs utama bahasa D]
* [httphttps://wwwcode.dsourcedlang.org/ Project open source Bahasa D]
* [httphttps://wwwtour.dsourcedlang.org/projects/tango Situs Utama PustakaTutorial TangoD]
* [http://www.dprogramming.com/ DProgramming - situs utama terkait]
 
== Referensi ==
[[Kategori:Bahasa pemrograman|D]]
{{reflist}}
[[Kategori:Bahasa pemrograman sistem]]
{{Authority control}}
 
[[Kategori:Bahasa pemrograman sistem]]
[[bg:D (език за програмиране)]]
[[ca:Llenguatge D]]
[[cs:D (programovací jazyk)]]
[[de:D (Programmiersprache)]]
[[en:D (programming language)]]
[[eo:D (programlingvo)]]
[[es:Lenguaje de programación D]]
[[fa:زبان برنامه‌نویسی دی]]
[[fi:D (ohjelmointikieli)]]
[[fr:D (langage)]]
[[gl:Linguaxe de programación D]]
[[hu:D programozási nyelv]]
[[it:D (linguaggio di programmazione)]]
[[ja:D言語]]
[[ko:D (프로그래밍 언어)]]
[[ms:Bahasa pengaturcaraan D]]
[[nl:D (programmeertaal)]]
[[no:D (programmeringsspråk)]]
[[pl:D (język programowania)]]
[[pt:D (linguagem de programação)]]
[[ru:D (язык программирования)]]
[[sk:D (programovací jazyk)]]
[[sv:D (programspråk)]]
[[tr:D programlama dili]]
[[zh:D語言]]