Apakah D alternatif yang kredibel untuk Java dan C ++? [Tutup]

163

Apakah bahasa D merupakan alternatif yang kredibel untuk Java dan C ++? Apa yang diperlukan untuk menjadi alternatif yang kredibel? Haruskah saya repot mempelajarinya? Apakah itu layak untuk diinjili?

Alasan utama saya bertanya adalah bahwa dengan standar C ++ yang baru (c ++ 0x) hampir di sini, jelas bagi saya bahwa bahasa tersebut telah melewati titik tidak dapat kembali sehubungan dengan siapa pun yang pernah memahaminya. Saya tahu bahwa C / C ++ tidak akan pernah mati tetapi pada titik tertentu kita harus melanjutkan. Bahkan COBOL memiliki masa dan Java dalam banyak hal dibatalkan C ++. Jadi apa selanjutnya? Apakah D mengisi tagihan?

Mark Kegel
sumber
23
COBOL akan kembali, tetapi teruskan dan pelajari D jika itu menggelitik kesukaan Anda. Membaca daun teh memiliki banyak kesempatan seperti yang lain dalam memprediksi Bahasa Besar Berikutnya.
Shog9
5
Saya tidak peduli dengan apa bahasa besar berikutnya, saya lebih khawatir jika saya memberi tahu lebih banyak majikan saya bahwa saya ingin menggunakan D pada proyek saya berikutnya bahwa saya tidak akan dianggap serius karena bahasanya bukan t belum.
Mark Kegel
22
Perlu dicatat bahwa halaman "D vs. C ++" oleh digital mars sangat diskriminatif terhadap C ++. berkali-kali mereka mengatakan "c ++ tidak bisa melakukannya", C ++ dapat melakukannya
Johannes Schaub - litb
23
@ Johnannes: Ini bukan tentang apa yang dimungkinkan oleh bahasa, itu yang membuat bahasa menjadi mudah. - Brian Hurt
missingfaktor
9
@Rahul, setuju tapi kemudian mereka harus mengatakannya. seperti "ini tidak mudah dilakukan di C ++" dan bukan karena itu tidak mungkin sama sekali.
Johannes Schaub - litb

Jawaban:

130

Apa yang menentukan keberhasilan dan popularitas bahasa pemrograman untuk pengembangan perangkat lunak dunia nyata hanya sebagian terkait dengan kualitas bahasa itu sendiri. Sebagai bahasa murni, D bisa dibilang memiliki banyak keunggulan dibandingkan C ++ dan Java. Paling tidak itu adalah alternatif yang kredibel sebagai bahasa murni, semua hal lain dianggap sama.

Namun, hal-hal lain penting untuk pengembangan perangkat lunak - hampir lebih dari bahasa itu sendiri: portabilitas (berapa banyak platform yang dijalankannya), dukungan debugger, dukungan IDE, kualitas perpustakaan standar, dukungan perpustakaan dinamis, binding untuk API umum, dokumentasi, pengembang komunitas, momentum, dan dukungan komersial, hanya untuk beberapa nama. Dalam setiap salam itu, D tidak ada harapan di belakang Java, C ++, dan C #. Bahkan, saya berpendapat itu bahkan di belakang apa yang disebut "scripting" bahasa seperti Python, Perl, PHP, Ruby, dan bahkan JavaScript dalam hal ini.

Untuk menjadi tumpul, Anda tidak bisa membangun aplikasi lintas-platform skala besar menggunakan D. Dengan pustaka standar yang belum matang, tidak ada dukungan dalam setiap IDE modern (ada plugin untuk Visual Studio dan Xamarin Studio / MonoDevelop), terbatas dukungan perpustakaan dinamis / bersama, dan sedikit ikatan ke bahasa lain, D sama sekali bukan pilihan hari ini.

Jika Anda menyukai apa yang Anda lihat dari D, tentu saja, pelajarilah - tidak akan lama jika Anda sudah tahu Java dan C ++. Saya tidak berpikir penginjilan akan membantu - pada titik ini jika D akan berhasil, yang benar-benar dibutuhkan adalah lebih banyak orang diam-diam menggunakannya dan mengatasi kekurangan utamanya seperti perpustakaan standar dan dukungan IDE.

Akhirnya, untuk C ++, sementara sebagian besar setuju bahasanya terlalu rumit, ribuan perusahaan berhasil menggunakan C ++ sebagai bagian dari campuran bahasa yang sehat dengan hanya mengijinkan sebagian kecil dari bahasa yang didefinisikan dengan baik. Masih sulit untuk mengalahkan C ++ ketika kinerja mentah dan penggunaan memori kecil diperlukan.

dmazzoni
sumber
8
mengatakan itu "tidak memiliki dukungan dalam IDE modern" melebih-lebihkannya sedikit. Ada dukungan dalam gerhana. Ini belum kelas 1, tapi sudah ada dan menjadi lebih baik.
BCS
46
Tidak adanya bukti bukanlah bukti ketidakhadiran.
FeepingCreature
29
Jika seseorang membuat pernyataan positif seperti 'ada unicorn merah muda', seseorang harus menawarkan bukti sebelum masuk akal untuk menerimanya. Memang, itu tidak berarti tidak ada unicorn merah muda seperti yang dinyatakan @FeepingCreature, tetapi hanya menyatakan bahwa itu bukan argumen yang meyakinkan atau valid.
JoshD
8
@Feeping: Itu ucapan lucu James Randi yang suka berkeliling, tapi itu tidak benar. Jika tes Anda memiliki bukti masuk akal yang mendukung bahwa tes harus menemukan sesuatu, tetapi tidak, itu adalah bukti ketidakhadiran.
GManNickG
9
Saya ingin menambahkan bahwa kami membangun aplikasi skala besar dengan D1 dan Tango. Oke, kami bukan cross-platform tetapi hanya linux, tapi tetap saja. Seluruh infrastruktur kami ditulis dalam D dan kami memproses lebih dari 30rb permintaan per jam dengan back-end DHT yang besar juga ditulis dalam D.
Marenz
108

Hanya untuk menambahkan pengalaman saya sendiri ke dalam campuran:

Sekitar setahun yang lalu saya bekerja pada proyek game skala kecil (3 coders) yang berlangsung 3 bulan, di mana kami menggunakan D sebagai bahasa utama kami. Kami memilihnya sebagian sebagai percobaan, sebagian karena sudah memiliki ikatan untuk SDL dan beberapa alat lain yang kami gunakan, dan sebagian besar untuk manfaatnya tampaknya lebih dari C ++.

Kami senang menggunakannya. Itu cepat dipelajari dan mudah untuk ditulis. Banyak fitur itu terbukti sangat berharga, dan saya rindu mereka telah kembali ke C ++.

Namun, poin-poin berikut membuat hidup kita lebih sulit:

  1. Tidak ada IDE yang baik pada saat itu yang merupakan masalah besar. Kami akhirnya membuat sendiri dengan menyesuaikan Scite. Ini bekerja dengan baik, tetapi tidak ideal.
  2. Tidak ada debugger pada saat itu. Kami berhasil membuat WINDBG bekerja berdasarkan hit-or-miss, tetapi itu tidak dapat diandalkan. Kode debugging tanpa debugger membuat hidup menjadi neraka di kali.
  3. Ada 2 perpustakaan standar untuk dipilih pada saat itu (Tango dan Phobos). Kami mulai dengan satu, beralih ke yang lain, dan benar-benar membutuhkan campuran fitur dari keduanya (Tangobos!). Ini menyebabkan sakit kepala dan beberapa kode menulis ulang.
  4. Ikatan ke alat lain tidak tersedia. Pada akhirnya kami harus beralih ke DirectX (untuk alasan saya tidak akan masuk). Tidak ada binding untuk DirectX yang tersedia sehingga kami harus menulis sendiri di C ++, membangunnya sebagai .dll dan mengikatnya. Ini adalah pekerjaan yang cukup buruk dan membutuhkan waktu.

Secara keseluruhan, kami suka menulis D. Itu membuat menulis kode sebenarnya mudah dan cepat dipelajari. Masalah yang saya sebutkan menggemakan jawaban yang telah diterima untuk pertanyaan ini - itu adalah bit "ekstra" yang perlu ditangani dalam D, inti dari itu adalah padat.

xan
sumber
4
masukan keren ... sekarang ada debugger !! :)
bbqchickenrobot
13
Saya tidak mengerti mengapa DirectX menjadi masalah. Saya bukan programmer D, tapi saya pikir D bisa mengerti C? Dan DirectX memiliki API C?
itu relatif mudah untuk menggunakan hal-hal DirectX dengan antarmuka D asli, jadi menulis pembungkus dalam c ++ tidak diperlukan kecuali untuk beberapa kasus khusus
Quonux
@ Quonux: Itu adalah pengalaman kami pada saat itu, kembali pada 08. Tidak diragukan lagi banyak hal telah berubah sejak saat itu. Saya tidak dapat mengingat detail darah lagi.
xan
1
Pembaruan 2019: Bahasa Pemrograman D telah berkembang secara signifikan. Anda sekarang dapat menggunakan GDB di luar kotak dengan Dlang. DPP mari Anda langsung memasukkan header C di Dlang. Calypso mari kita gunakan pustaka C ++ apa pun di Dlang, termasuk Qt-- ia memiliki beberapa bug, tetapi sebagian besar berfungsi.
noɥʇʎԀʎzɐɹƆ
60

Saya setuju bahwa C ++ menjadi bahasa buntu - dan saya merasa sedih untuk mengatakan itu, setelah menggunakannya selama 17 tahun terakhir.

Saya pikir D adalah penerus yang sah untuk C ++. Dari perspektif bahasa itu "melakukan semua hal yang benar" (bahkan jika saya tidak setuju dengan keputusan setiap menit). Saya pikir dengan C dan C ++ pada penurunan tidak ada bahasa tingkat sistem lain yang benar-benar dapat melakukan apa yang mereka lakukan, sambil menahan diri di dunia bahasa modern - kecuali D! D tidak hanya mengisi peran ini - ia juga unggul dalam hal itu! Melihat D1.x seharusnya cukup untuk meyakinkan Anda tentang hal itu - tetapi ketika Anda melihat D2.0 itu membuat Anda terkejut. Saya berpendapat bahwa tidak ada bahasa lain di sekitar hari ini yang berfungsi serta D2.0 dalam menjembatani paradigma pemrograman imperatif dan fungsional - yang hanya akan menjadi lebih signifikan di tahun-tahun mendatang.

Kekurangan penerimaan utama - atau bahkan visibilitas - serta skala besar, matang, perpustakaan - adalah hambatan tentu saja. Namun saya tidak berpikir Anda dapat menghapusnya karena ini. Saya yakin bahwa D akan tumbuh menjadi salah satu bahasa paling penting di sekitar dalam beberapa tahun mendatang - dan mereka yang menganggapnya serius sekarang akan ditempatkan dengan baik untuk memimpin ketika waktu itu tiba.

Saya pikir perbedaan akan terjadi, sebagian besar, karena keterlibatan Andrei Alexandrescu. Itu bukan untuk mendiskreditkan Walter Bright dengan cara apa pun, yang telah melakukan pekerjaan penting dalam membawa D ke dunia. Tapi Alexandrescu adalah sosok yang penting, dan menarik, tentunya di komunitas C ++ - dan di situlah sebagian besar pengalih D potensial berasal. Dan dia juga telah memberikan kontribusi yang penting dan penting bagi D2.0 dalam dukungannya untuk pemrograman fungsional.

Mungkin masih berubah bahwa D ditakdirkan untuk menjadi Betamax bahasa tingkat sistem - tetapi uang saya ada di dalamnya berbalik dalam dua tahun ke depan.

philsquared
sumber
20
C tidak menurun untuk pemrograman tingkat sistem. Linux, Windows, dan OS X semuanya dikembangkan dalam C. Demikian juga, banyak mikro-pengendali dan OS untuk mikro-pengendali diprogram menggunakan C.
Kevin
12
Saya tidak berpikir D "melakukan semua hal yang benar". Hal yang benar adalah memulai dari awal, bukan mencoba membuat C ++ yang lebih baik. Saya pikir perubahan yang lebih radikal diperlukan untuk membenarkan peralihan skala besar dari C ++.
jalf
9
Kevin: Windows dan OS X tidak dikembangkan di C. Potongan kernel, tentu saja, tetapi Windows menggunakan banyak C ++, dan OS X Obj-C. Linux adalah satu-satunya OS yang saya tahu di mana C telah dinaikkan ke status Satu Bahasa Sejati dan tidak ada lagi yang digunakan.
jalf
16
Prediksi yang bagus. Sudah 2 tahun sejak posting ini, dan D tidak lebih dekat dengan adopsi arus utama.
mikerobi
18
@mikeobi LOL! Dua tahun dimulai dari setiap kali Anda membaca kalimat itu ;-)
philsquared
20

Saya suka bahwa D adalah karya seorang jenius, terutama satu pikiran - Walter Bright, yang kompiler Zortech-nya fantastis pada zamannya.

Sebaliknya C ++ terlalu banyak dirancang oleh komite, bahkan jika Bjarne adalah pengaruh. Terlalu banyak fitur add-on dan sintaks baru yang aneh. Perbedaan ini mencerminkan kemudahan belajar dan kemudahan penggunaan sehari-hari, lebih sedikit bug.

Bahasa yang lebih koheren mengarah pada produktivitas dan sukacita programmer yang lebih baik - tetapi ini subjektif dan dapat diperdebatkan! (Saya kira saya harus memilih jawaban saya sendiri)

DarW
sumber
9
Ada genius lain yang sedang mengerjakannya sekarang juga - Andrei Alexandrescu. Apa yang telah ia lakukan dengan D2.0 adalah, IMHO, setidaknya sama mencengangkannya dengan apa yang telah dilakukan Walter dengan D1.x. Di antara mereka berdua (tidak mengabaikan banyak kontributor lainnya) D menjadi bahasa yang harus diperhitungkan. Tonton ruang ini
philsquared
5
buat 3 (atau lebih) programmer yang sangat baik: Bartosz Milewski
BCS
7
Jadi C ++ pada awalnya dibuat oleh satu orang yang benar-benar pintar, dan sekarang dikendalikan oleh sebuah komite yang terdiri dari orang-orang yang benar-benar pintar, sedangkan D pada awalnya dibuat oleh satu orang yang benar-benar pintar, dan sekarang dikendalikan oleh ... sekelompok orang yang benar-benar pintar. Ya, saya melihat bagaimana itu membuat D unggul. ;) (petunjuk: keburukan C ++ tidak ada hubungannya dengan komite. Ini adalah konsekuensi dari tujuan desain bahasa. Itu dimaksudkan untuk (hampir) bagian dari C. D tidak, dan tidak dimaksudkan untuk menjadi seperti itu. , yang berarti dapat menghindari banyak kutil (dengan mengorbankan juga menghindari popularitas yang ditimbulkannya)
jalf
4
@jalf Anda benar bahwa "keburukan" C ++ bukan karena dirancang oleh komite. Memang lambatnya evolusi adalah.
philsquared
15

D adalah bahasa yang baik dan cukup populer , tetapi seperti semua bahasa, D hanyalah alat lain. Alat mana yang digunakan tergantung pada jenis orang Anda, bagaimana Anda berpikir, lingkungan tempat Anda bekerja, batasan bahasa apa yang menerapkan program, dan yang paling penting, program itu sendiri. Jika Anda punya waktu, saya pasti akan merekomendasikan belajar D. Skenario terburuk, Anda tidak akan pernah menggunakannya. Semakin besar kemungkinan Anda akan mempelajari aspek-aspek apa yang paling Anda sukai, dan dalam kondisi apa ia bersinar paling terang, dan manfaatkan hal itu ketika membuat program baru.

Saya akan merekomendasikan melihat grafik perbandingan D untuk melihat apa fitur untuk bahasa dan melihat apakah itu cocok untuk Anda.

Spodi
sumber
10

Bahasa D modern. Tidak ada bahasa yang sempurna, dan tidak ada keraguan tentang ini. Tetapi bahasa dilahirkan untuk membuat hidup lebih mudah. Di mana bahasa D dibandingkan dengan C ++ memiliki banyak fitur yang baik, dalam hal kompleksitas. Banyak spesialisasi kombinasi bahasa lain yang terlibat, yang membantu pembuat kode untuk kode lebih cepat, dengan fitur TOP yang diperkenalkan oleh bahasa lain. Silakan lihat juga: untuk detail lebih lanjut tentang D dan bahasa lainnya

  • D vs C ++, adalah kompatibilitas, di mana bahasa C ++ besar terlibat dan membutuhkan kompatibilitas dengan D. D memungkinkan kompatibilitas 100% dengan C, yang masih merupakan kemenangan yang baik.

  • D vs C ++, C ++ adalah pendapat saya bahasa yang sangat bagus, tetapi sulit untuk kode, dan memakan waktu, membutuhkan lebih banyak pengalaman untuk mendapatkan kesuksesan, tetapi D memungkinkan untuk melakukan hal yang sama dengan kesederhanaan

  • D vs C ++, saya tidak yakin apakah C ++ berhasil, tetapi D tidak mengizinkan penetapan variabel tipe tak menggunakan "otomatis", yang bagus untuk memiliki variabel dinamis, ketika mengharuskan Anda dapat membuat tipe yang ketat

  • D vs C ++, jika Anda memiliki pengalaman bahasa lain, Anda dapat langsung memulainya, ia memiliki peta jalan belajar yang mudah, dan dirancang oleh tim yang berpengalaman dan dukungan perusahaan

  • D vs C ++, hal yang sangat menyenangkan yang saya temukan dari D, adalah gaya kode, ini memberikan tampilan dan rasa persis sama seperti C / C ++, sementara coding mengingatkan saya melakukan C / C ++ yang benar-benar modern yang disebut D

Ada banyak alasan bagus untuk bahasa D, tidak ada alasan untuk meremehkan bahasa apa pun, selalu merupakan pilihan pengguna.

Komunitas
sumber
7

Ini benar-benar tergantung pada apa kebutuhan Anda - aplikasi komersial skala besar yang ditulis dalam D memang ada di sisi server, dan untuk itu D (biasanya menggunakan Tango / Mango) sangat cocok, dan Anda cenderung dapat melayani lebih banyak permintaan dibandingkan dengan bahasa / platform lainnya.

Untuk solusi yang lebih khusus dalam hal protokol dan interaktivitas (yang banyak) Anda akan memiliki lebih banyak masalah menemukan perpustakaan yang diperlukan, dan kurangnya alat kemungkinan akan lebih memengaruhi Anda.

larsivi
sumber
1
dapatkah Anda memberikan contoh aplikasi komersial seperti itu?
Alexander Malakhov
1
@ Alexander Malakhov: A ... hmm ... pertanyaan bagus .... Saya senang Anda bertanya apakah ada aplikasi komersial .... pertanyaan yang dipikirkan dengan baik ... tentu saja ..... saya kagumi ... ... ini adalah jenis pertanyaan yang harus kita tanyakan ..... menunjukkan kecerdasanmu ..... hmm ... biarkan aku mencari ... aplikasi komersial di D ... hmm .... yah .. .hanya tunggu ... Saya tahu tapi .... tidak bisa mengingatnya ... pasti ada .... tunggu sebentar ... saya masih mencari ... tunggu!
Rekan Sederhana
7

D sangat mengesankan, dan buku Andrei tentang itu ditulis dengan baik. Tetapi seperti yang orang lain katakan, Anda membutuhkan alat dan dukungan platform. GDC, dari waktu ke waktu, dapat menjadi jawaban bagi keduanya.

Pernahkah kamu melihat ini?

"GNU Debugger menambahkan dukungan bahasa D": http://www.linux.com/news/enterprise/biz-enterprise/358956-gnu-debugger-adds-d-language-support

Juga, situs digitalmars memiliki halaman yang membahas antarmuka ke C dan C ++ (untuk perpustakaan yang Anda tidak bisa hidup tanpanya). Saya bertanya-tanya apakah ada alat yang, diberi file header C, akan mencoba menulis prototipe D.

Secara pribadi saya pada saat ini tidak akan mendorong untuk melakukan proyek besar di D, tetapi saya akan menggunakan D untuk alat-alat internal, mendapatkan pengalaman dengan itu dan memperkenalkan orang lain untuk itu.

Pertanyaan aslinya adalah apakah D adalah alternatif yang kredibel untuk Java dan C ++. Saya tidak berpikir D dan Java benar-benar akan bersaing banyak dalam praktik; D bersaing dengan C ++ dan sekarang Go. Pertanyaan lain membahas perbedaan antara D dan Go, tetapi Go umumnya dianggap lebih mudah digunakan. Jadi saya curiga bahwa masa depan D sangat tergantung pada seberapa banyak ruang yang tersedia untuknya untuk bernapas antara C ++, raja bukit saat ini, dan Go, alternatif yang jauh lebih mudah yang didukung Google.

UPDATE: Saya baru saja menemukan bahwa bab favorit saya dari buku Andrei , yang ada di konkurensi, tersedia secara online gratis. Pasti layak dibaca!

Dan inilah diskusi loooong tentang relatif manfaat / tujuan / pendekatan dari Go dan D .

AmigoNico
sumber
Saya tidak tahu banyak tentang Rust; Saya menunggu untuk mencapai 1,0. Tapi Anda benar, itu benar-benar terlihat layak untuk dilihat dan tampaknya bermain di ruang yang sama ini.
AmigoNico
1
Satu-satunya hal yang saya tidak suka tentang D adalah sistem tipe. Itu terlihat tua. Hirarki OO mengganggu. Saya tidak suka itu sebagai titik awal. Karat lebih baik dalam hal ini.
Germán Diago
4

Sepertinya pertanyaan telah dijawab. D adalah bahasa yang lebih baik dibandingkan dengan C ++.

Pertanyaan apakah untuk tujuan praktis D memiliki infrastruktur yang lebih baik adalah yang kedua.

Singkatnya jika mereka berdua bahasa baru tanpa dukungan di sekitar mereka D adalah bahasa yang lebih baik, ergo itu adalah bahasa yang lebih baik.

vfclists
sumber
4

Sebagai bahasa, saya selalu merasa bahwa D lebih dekat ke C # daripada C ++. Bukan dalam fitur dan perpustakaan, tetapi dalam "perasaan". Jauh lebih bersih, lebih bagus ... menyenangkan (daripada C ++). IMHO kendala terbesar dalam menjadi alternatif yang kredibel adalah alat, IDE dan debugger. Jika D mengatasi beberapa hambatan penggunaan / adopsi yang meluas, lebih banyak alat dan perpustakaan akan muncul. (Saya sendiri akan kembali ke D, jika akan ada IDE dan debugger yang dapat digunakan.)

gerleim
sumber
bagaimana dengan plug-in mono-d ?: mono-d.alexanderbothe.com
user1284631
3

Bekerja bagus untuk proyek kesayangan saya sendiri. Saya akan menggunakannya untuk proyek-proyek pengusaha tetapi tidak mengetahui seberapa sulit bagi mereka untuk menemukan seseorang untuk mengambil alih sumber setelah saya pindah. Tidak ada alasan teknis untuk menghindarinya, setidaknya pada platform yang didukung. (amit-amit)

DarW
sumber
3

Salah satu pendekatan adalah mencari pekerjaan di daerah Anda. Temukan pekerjaan yang ingin Anda lakukan dan lihat keterampilan apa yang mereka minta. Jika mereka meminta C ++ atau Ruby atau Oracle atau D, maka itu adalah keterampilan yang sebagian besar untuk membantu Anda mendapatkan pekerjaan yang Anda inginkan.

Peter Lawrey
sumber
3

Sepertinya bahasa yang dirancang dengan sangat baik; jauh lebih baik daripada C - C ++ - Objective C. Saya dapat hidup tanpa IDE atau debugger untuk sementara waktu, tetapi bukan tanpa pustaka yang terdokumentasi dengan baik untuk D 2.0.

Saya akan periksa kembali dalam 6 bulan ...

Bill the Lizard
sumber