D Java ve C ++ için güvenilir bir alternatif mi? [kapalı]


163

Ge dil Java ve C ++ için güvenilir bir alternatif? Güvenilir bir alternatif olmak için ne gerekiyor? Öğrenmeye zahmet etmeli miyim? Evanjelleştirmeyi hak ediyor mu?

Sormamın ana nedeni, neredeyse burada yeni C ++ standardı (c ++ 0x) ile, dilin bunu anlayan herkese göre geri dönüş noktasının ötesine geçtiği benim için açık. C / C ++ 'nın asla ölmeyeceğini biliyorum ama bir noktada ilerlememiz gerekiyor. COBOL bile bir gün geçirdi ve Java birçok açıdan C ++ 'ı geri aldı. Sırada ne var? D faturayı dolduruyor mu?


23
COBOL geri geliyor, ama devam et ve eğer fantezi gıdıklıyorsa D öğrenin. Çay yapraklarını okumak, Bir Sonraki Büyük Dili tahmin etmek kadar başka bir şeye sahiptir.
Şut9

5
Bir sonraki büyük dilin ne olduğuyla ilgilenmiyorum, daha fazla işverenime bir sonraki projemde D'yi ciddiye almamam gerektiğini söylemek istediğimden daha fazla endişeliyim çünkü dil ' t henüz.
Mark Kegel

22
dijital marların "D ve C ++" sayfalarının C ++ 'a karşı oldukça ayrımcı olduğuna dikkat edilmelidir. onlar "c ++ bunu yapamaz" demek birçok kez, C ++ olabilir bunu
Johannes Schaub - LITB

23
@Johannes: Bu dilin neyi mümkün kıldığı değil, dilin kolaylaştırdığı şey. - Brian Hurt
missingfaktor

9
@Rahul, kabul ettiler ama sonra söylemeliler. "Bu C ++ ile yapmak kolay değil" gibi ve hiç de mümkün değil gibi.
Johannes Schaub - litb

Yanıtlar:


130

Gerçek dünyadaki yazılım geliştirme için bir programlama dilinin başarısını ve popülaritesini belirleyen şey, kısmen dilin kalitesiyle ilgilidir. Saf bir dil olarak, D'nin C ++ ve Java'ya göre birçok avantajı vardır. En azından saf bir dil olarak güvenilir bir alternatif, diğer her şey eşit.

Bununla birlikte, diğer şeyler yazılım geliştirme için önemlidir - dilin kendisinden neredeyse daha fazla: taşınabilirlik (kaç platformda çalışır), hata ayıklayıcı desteği, IDE desteği, standart kütüphane kalitesi, dinamik kütüphane desteği, yaygın API'lar için bağlamalar, belgeler, geliştirici topluluk, momentum ve ticari destek, sadece birkaç isim. Bu konuların her birinde D, umutsuzca Java, C ++ ve C #'ın arkasında. Aslında, bu konuda Python, Perl, PHP, Ruby ve hatta JavaScript gibi "komut dosyası" dillerinin bile arkasında olduğunu iddia ediyorum.

Kör olmak için, D'yi kullanarak büyük ölçekli, platformlar arası bir uygulama oluşturamazsınız. Olgunlaşmamış standart bir kitaplıkla, herhangi bir modern IDE'de destek yoktur (hem Visual Studio hem de Xamarin Studio / MonoDevelop için eklentiler vardır), sınırlı dinamik / paylaşılan kütüphane desteği ve diğer dillere çok az bağlanan D, bugün sadece bir seçenek değil.

Eğer D'de gördüğünüzü beğendiyseniz, elbette öğrenin - Java ve C ++ zaten biliyorsanız uzun sürmemelidir. Evangelizm'in yararlı olacağını düşünmüyorum - bu noktada D başarılı olacaksa, gerçekten ihtiyacı olan daha fazla insan sessizce kullanıyor ve standart kütüphane ve IDE desteği gibi önemli eksikliklerini gideriyor.

Son olarak, C ++ ile ilgili olarak, çoğu dil çok karmaşık olduğu konusunda hemfikir olsa da, binlerce şirket dilin sadece daha küçük, iyi tanımlanmış bir alt kümesine izin vererek C ++ 'ı sağlıklı bir dil karışımının parçası olarak başarıyla kullanmaktadır. Hem ham performans hem de küçük bellek kullanımı gerektiğinde C ++ 'yi yenmek hala zor.


8
"herhangi bir modern IDE'de destek olmadığını" söylemek biraz abartıyor. Tutulmada destek var. Henüz 1. sınıf değil, ama orada ve daha iyi oluyor.
BCS

46
Kanıt yokluğu, yokluğun kanıtı değildir.
FeepingCreature

29
Eğer kişi 'pembe tek boynuzlu atlar' gibi olumlu bir iddiada bulunursa, kabul etmeden önce kanıt sunmalıdır. Verilen, @FeepingCreature'ın belirttiği gibi pembe tek boynuzlu atların olmadığı anlamına gelmez, ancak bunun zorlayıcı veya geçerli bir argüman olmadığını belirtmek.
JoshD

8
@Feeping: Bu, James Randi'nin atmayı sevdiğini söyleyen sevimli bir şey, ama bu doğru değil. Testlerinizin, testin bir şey bulması gerektiğini destekleyen makul kanıtları vardır , ancak bu yokluğun kanıtıdır.
GManNickG

9
D1 ve Tango ile büyük ölçekli uygulamalar yaptığımızı da eklemek istiyorum. Tamam, platformlar arası değil sadece linux'uz, ama yine de. Altyapımızın tamamı D ile yazılmıştır ve saatte 30 binden fazla talebi D ile yazılmış büyük bir DHT arka ucu ile
işliyoruz

109

Sadece kendi deneyimlerimi karışıma eklemek için:

Yaklaşık bir yıl önce 3 ay süren küçük bir oyun projesi (3 kodlayıcı) üzerinde çalıştım, burada D'yi birincil dilimiz olarak kullandık. Kısmen bir deneme olarak seçtik, kısmen SDL ve kullandığımız bazı araçlar için zaten bağlamaları vardı ve çoğunlukla faydaları için C ++ üzerinde olduğu görülüyor.

Biz kullanarak ekledi. Öğrenmesi hızlı ve yazması kolaydı. Özelliklerinin birçoğu paha biçilmez oldu ve C ++ 'a geri döndüklerini özledim.

Ancak, aşağıdaki noktalar hayatımızı zorlaştırdı:

  1. Önemli bir sorun olan zamanda iyi bir IDE yoktu. Scite'ı kişiselleştirerek kendimizi yaptık. Bu Tamam çalıştı, ama ideal değildi.
  2. O sırada hiçbir hata ayıklayıcı yoktu. WINDBG'yi isabet veya kaçış esasına göre çalıştırmayı başardık, ancak güvenilmezdi. Bir hata ayıklayıcı olmadan kod hata ayıklama hayatı bazen cehennem yaptı.
  3. O zaman seçilebilecek 2 standart kütüphane vardı (Tango ve Phobos). Biriyle başladık, diğerine geçtik ve gerçekten her ikisinin de özelliklerinin bir karışımına ihtiyacımız vardı (Tangobos!). Bu, baş ağrılarına ve bazı kodların yeniden yazılmasına neden oldu.
  4. Diğer araçlara bağlamalar mevcut değildir. Sonunda DirectX'e geçmek zorunda kaldık (nedenlerden dolayı girmeyeceğim). DirectX için hiçbir bağlantı yoktu, bu yüzden C ++ 'da kendi yazmak, bir .dll olarak oluşturmak ve buna bağlamak zorunda kaldı. Bu oldukça kötü bir işti ve biraz zaman aldı.

Genel olarak, biz D yazmak için ekledi. Aslında kod yazma kolaylaştırdı ve öğrenmek hızlı oldu. Bahsettiğim konular bu soru için kabul edilen cevabı yansıtıyor - D'de ele alınması gereken "ekstra" bitler, çekirdeği sağlam.


4
serin giriş ... şimdi bir hata ayıklayıcı var !! :)
bbqchickenrobot

14
DirectX'in neden bir sorun olduğunu anlamıyorum. Ben bir D programcısı değilim, ama D'nin C'yi anlayabileceğini düşündüm. DirectX'in bir C API'sı var mı?

DirectX öğelerini doğal D arabirimleriyle kullanmak göreceli olarak kolaydır, bu nedenle bazı özel durumlar dışında c ++ 'da bir sarıcı yazmak gerekli değildir
Quonux

@Quonux: O zamanlar bizim deneyimimizdi, geri 08'de. Hiç şüphe yok ki o zamandan bu yana çok şey değişti. Kanlı detayları artık hatırlayamıyorum.
xan

1
2019 güncellemesi: D Programlama Dili önemli ölçüde genişledi. Artık GDB'yi Dlang ile hazır olarak kullanabilirsiniz. DPP, doğrudan Dlang'a herhangi bir C başlığı ekleyelim. Calypso, Dlang'da Qt dahil olmak üzere herhangi bir C ++ kütüphanesi kullanalım - birkaç hata var, ancak büyük ölçüde çalışıyor.
noɥʇʎԀʎzɐɹƆ

60

C ++ 'nın çıkmaz bir dil haline geldiğini kabul ediyorum - ve bunu son 17 yıldır kullandıktan sonra söylemek bana acı veriyor.

D'nin C ++ 'ın doğru halefi olduğunu düşünüyorum. Bir dil perspektifinden bakıldığında "tüm doğru şeyleri yapar" (her dakika kararını kabul etmese bile). Düşüşte C ve C ++ ile, gerçekten modern diller dünyasında ayakta dururken yaptıklarını gerçekten yapabilen başka bir sistem seviyesi dili olmadığını düşünüyorum - D hariç! D sadece bu rolü doldurmakla kalmaz, aynı zamanda mükemmeldir! D1.x'e bakmak sizi buna ikna etmek için yeterli olmalı - ama D2.0'a baktığınızda sizi uçuruyor. Benim görüşüme göre, bugünün D2.0'ın yanı sıra zorunlu ve fonksiyonel programlama paradigmalarını köprülemede çalışan başka bir dil olmadığı - ki bu da önümüzdeki yıllarda daha da önemli hale gelecektir.

, Olgun, yanı sıra büyük ölçekli kütüphaneleri - - hatta görünürlüğü - ana akım kabul eksikliği olan tabii bir engel. Ancak bu yüzden yazabileceğinizi sanmıyorum. Ben Ge ikna ediyorum edecektir etrafında önümüzdeki birkaç yıl içinde en önemli dillerden biri haline büyümek - ve ciddiye şimdi alarak olanlar iyi ki zamanı geldiğinde öne geçmek için yerleştirilmek için gidiyoruz.

Bence fark büyük ölçüde Andrei Alexandrescu'nun katılımından kaynaklanacak. Bu, D'yi dünyaya getirmek için çok önemli bir iş yapan Walter Bright'ı hiçbir şekilde itibarsızlaştırmamaktır. Ancak Alexandrescu kesinlikle C ++ topluluğunda önemli ve ilgi çekici bir figür - ve potansiyel D değiştiricilerinin çoğunun geleceği yer var. Ayrıca fonksiyonel programlama desteğinde D2.0'a önemli ve önemli bir katkıda bulunmuştur.

D'nin sistem seviyesi dillerinin Betamax'ı olmaya mahkum olduğu ortaya çıkabilir - ama param önümüzdeki iki yıl içinde dönüyor.


20
C, sistem düzeyinde programlama için düşüşte değil. Linux, Windows ve OS X'in hepsi C'de geliştirildi. Aynı şekilde, mikro kontrolörler için birçok mikro kontrolör ve işletim sistemi C kullanılarak programlanır.
Kevin

12
D'nin "tüm doğru şeyleri yaptığını" sanmıyorum. Doğru olanı sıfırdan başlamak, daha iyi bir C ++ yapmaya çalışmak değil. C ++ 'dan büyük ölçekli bir anahtarı haklı çıkarmak için daha radikal değişiklikler gerektiğini düşünüyorum.
jalf

9
Kevin: Windows ve OS X C'de geliştirilmemiştir. Çekirdeğin parçaları elbette, ancak Windows yığınları C ++ ve OS X Obj-C kullanıyor. Linux, C'nin One True Language statüsüne yükseltildiği ve başka hiçbir şeyin kullanılmadığı bildiğim tek işletim sistemi.
jalf

16
Güzel bir tahmin. Bu görevden bu yana 2 yıl geçti ve D ana akım benimsenmesine daha yakın değil.
mikerobi

18
@mikeobi LOL! İki yıl o cümleyi okuduğunuzda başlar ;-)
philsquared

20

D'nin Zortech derleyicisi gün içinde fantastik olan Walter Bright, bir deha, özellikle de bir zihin çalışmasıdır.

Buna karşılık C ++, Bjarne bir etki olsa bile komite tarafından çok fazla tasarlanmıştır. Çok fazla eklenti özelliği ve garip yeni sözdizimi. Bu fark, öğrenme kolaylığı ve günlük kullanım kolaylığı, daha az hata yansıtır.

Daha tutarlı diller daha iyi üretkenliğe ve programcı sevincine yol açar - ancak bu öznel ve tartışmalıdır! (sanırım kendi cevabımı oylamalıyım)


9
Şimdi üzerinde çalışan başka bir deha var - Andrei Alexandrescu. D2.0 ile yaptığı şey IMHO, en azından Walter'ın D1.x ile yaptığı kadar şaşırtıcı. İkisi arasında (diğer birçok katılımcıya indirim yapmamakla) D, dikkate alınması gereken bir dil haline geliyor. Bu alanı izleyin
philsquared

5
3 (veya daha fazla) lanet olsun iyi programcı olun: Bartosz Milewski
BCS

7
Bu yüzden C ++ başlangıçta gerçekten akıllı bir adam tarafından yaratıldı ve şimdi gerçekten akıllı insanlardan oluşan bir komite tarafından kontrol edilirken, D başlangıçta gerçekten akıllı bir adam tarafından yaratıldı ve şimdi ... bir grup gerçekten akıllı insan tarafından kontrol ediliyor. Evet, bunun D'yi nasıl üstün kıldığını görüyorum. ;) (ipucu: C ++ 'ın çirkinliği komitelerle ilgisi yoktur. Bu dilin tasarım hedeflerinin bir sonucudur. (neredeyse) C'nin bir alt kümesi olması amaçlanmıştır ve öyle olması amaçlanmamıştır. , bu da çok sayıda siğilden kaçınabileceği anlamına gelir (getirdiği popülerlikten de kaçınmak pahasına)
jalf

4
@jalf, C ++ 'ın "çirkinliğinin" komite tarafından tasarlanmadığından değil. Yine de evrimdeki yavaşlık.
philsquared

15

D iyi bir dildir ve oldukça popülerdir , ancak tüm diller gibi, sadece başka bir araçtır. Hangi aracı kullanacağınız, ne tür bir kişi olduğunuza, nasıl düşündüğünüze, çalıştığınız ortama, hangi dil kısıtlamalarının programı uyguladığına ve en önemlisi programın kendisine bağlıdır. Zamanınız varsa, kesinlikle D'yi öğrenmenizi tavsiye ederim. En kötü senaryo, asla kullanmayacaksınız. Daha çok hangi yönlerini en çok sevdiğinizi ve hangi koşullar altında en çok parladığını öğrenecek ve yeni programlar yaparken bundan yararlanacaksınız.

D için özelliklerin neler olduğunu görmek ve sizin için uygun olup olmadığını görmek için D karşılaştırma tablosuna bakmanızı tavsiye ederim.


10

D dili modern. Hiçbir dil mükemmel değildir ve bundan şüphe yoktur. Fakat diller hayatı kolaylaştırmak için doğarlar. D dilinin C ++ ile karşılaştırıldığında, karmaşıklık açısından birçok iyi özelliği vardır. Diğer diller tarafından sunulan TOP özellikleri ile kodlayıcıların daha hızlı kodlamasına yardımcı olan diğer birçok dil kombinasyonu uzmanlığı da söz konusudur. Lütfen ayrıca bakınız: D ve diğer diller hakkında daha fazla bilgi için

  • D vs C ++, büyük C ++ dillerinin dahil olduğu ve D ile uyumluluk gerektiren uyumluluktur. D, C ile% 100 uyumluluğa izin veriyor, bu da hala iyi bir kazanç.

  • D vs C ++, C ++ benim görüşüm çok güzel bir dil, ancak kodlaması zor ve zaman alıcı, başarı elde etmek için daha fazla deneyim gerektiriyor, ancak D aynı şeyi basitlikle yapmaya izin veriyor

  • D vs C ++, emin değilim C ++, ancak D hiçbiri türü kısıtlama değişken atama izin verir "auto" kullanarak, hangi bir değişken dinamik olması iyi, gerektiren zaman katı bir tür yapabilirsiniz

  • D vs C ++, başka bir dil deneyiminiz varsa, doğrudan başlayabilirsiniz, kolay öğrenen yol haritası vardır ve güçlü bir deneyimli ekip ve şirket desteği tarafından tasarlanır

  • D vs C ++, D bulduğum çok güzel bir şey, kod stili, görünüm ve C / C ++ gibi tam olarak aynı hissi verirken, kodlama D denilen gerçekten modern C / C ++ yaptığımı hatırlatıyor

D dili için çok daha iyi bir neden var, herhangi bir dili hafife almak için bir sebep yok, her zaman kullanıcı seçimi.


7

Bu gerçekten ihtiyaçlarınızın ne olduğuna bağlıdır - D' de yazılan büyük ölçekli ticari uygulamalar sunucu tarafında bulunur ve bunun için D (tipik olarak Tango / Mango kullanarak) mükemmel bir uyumdur ve muhtemelen daha fazla istekte bulunabilirsiniz. diğer dillerden / platformlardan daha iyi.

Protokoller ve etkileşim (daha birçoğu) açısından daha özelleşmiş çözümler için, gerekli kütüphaneleri bulma konusunda daha fazla sorun yaşayacaksınız ve araç eksikliği sizi daha fazla etkileyecektir.


1
böyle bir ticari uygulamaya örnek verebilir misiniz?
Alexander Malakhov

1
@ Alexander Malakhov: A ... hmm ... iyi bir soru .... Ticari bir uygulama olup olmadığını sorduğunuz için mutluyum .... iyi düşünülmüş bir soru ... kesinlikle ..... Hayranım ... ... bu sormamız gereken sorular tür ..... aklınızı gösterir ..... hmm ... beni arama ... D ... hmm .... ticari uygulama ... iyi .. Sadece bekle ... Biliyorum ama .... hatırlayamıyorum ... kesinlikle var ... sadece bekle ... Hala arıyorum ... bekle!
Basit Arkadaş

7

D oldukça etkileyici ve Andrei'nin bu konudaki kitabı iyi yazılmış. Ancak diğerlerinin söylediği gibi, araçlara ve platform desteğine ihtiyacınız var. GDC zamanla her ikisinin de cevabı olabilir.

Bunu gördün mü?

"GNU Hata Ayıklayıcısı D dili desteği ekler": http://www.linux.com/news/enterprise/biz-enterprise/358956-gnu-debugger-adds-d-language-support

Ayrıca, digitalmars sitesi C ve C ++ ile arayüzleri tartışan sayfalara sahiptir (onsuz yaşayamayacağınız kütüphaneler için). Bir C başlık dosyası verildiğinde, D prototiplerini yazarken bir bıçak alacak herhangi bir araç olup olmadığını merak ediyorum.

Şahsen ben değil D'de büyük bir proje yapmak için bu nokta basarak, ama ben ediyorum ediyorum onunla deneyimi alma ve buna başkalarını tanıtan, şirket içi araçlar için D kullanın.

Orijinal soru, D'nin Java ve C ++ için güvenilir bir alternatif olup olmadığıydı. D ve Java'nın pratikte çok fazla rekabet edeceğini sanmıyorum; D, C ++ ve şimdi Go ile rekabet ediyor. Diğer sorular D ve Go arasındaki farkları ele alır, ancak Go genellikle kullanımı daha kolay kabul edilir. Bu yüzden D'nin geleceğinin, tepenin şu anki kralı C ++ ile Google'ın desteğine sahip olan çok daha kolay bir alternatif olan nefes almak için ne kadar yer olduğuna bağlı olduğundan şüpheleniyorum.

GÜNCELLEME: Sadece , Andrei'nin kitabının en sevdiğim bölümünün eşzamanlılık üzerine olduğunu çevrimiçi olarak ücretsiz olarak keşfettim . Kesinlikle görülmeye değer!

Ve işte Go ve D'nin göreceli değerleri / hedefleri / yaklaşımları hakkında bir tartışma .


Rust hakkında fazla bir şey bilmiyorum; 1.0'a ulaşmasını bekliyorum. Ama haklısın, kesinlikle izlemeye değer görünüyor ve aynı alanda oynuyor gibi görünüyor.
AmigoNico

1
D hakkında sevmediğim tek şey yazı sistemidir. Eski görünüyor. OO hiyerarşileri müdahaleci. Başlangıç ​​noktası olarak sevmiyorum. Pas bu konuda daha iyidir.
Germán Diago

4

Soru cevaplanmış gibi görünüyor. D, C ++ ile karşılaştırıldığında daha iyi bir dildir.

Pratik amaçlarla D'nin çevresinde daha iyi bir altyapıya sahip olup olmadığı sorusu ikincildir.

Kısacası, her ikisi de çevrelerinde herhangi bir destek olmadan yepyeni dillerdeyse, D daha iyi bir dildir, daha iyi bir dildir.


4

Dil olarak D'nin C # 'a C ++' dan daha yakın olduğunu her zaman hissettim. Özellikler ve kütüphanelerde değil, "duygu" da. Çok daha temiz, güzel ... eğlenceli (C ++ 'dan). Güvenilir bir alternatif olmanın önündeki en büyük engel IMHO, araçlar, IDE ve hata ayıklayıcı. D, yaygın kullanım / evlat edinme ile ilgili bazı engelleri aşarsa, daha fazla araç ve kütüphane ortaya çıkacaktır. (Kullanılabilir bir IDE ve hata ayıklayıcı olacaksa kendim D'ye döneceğim.)


mono-d eklentisi ne olacak ?: mono-d.alexanderbothe.com
user1284631

3

Kendi evcil hayvan projelerim için harika çalışıyor. İşverenlerin projeleri için kullanırım ama ilerledikten sonra kaynağı ele geçirecek birini bulmanın ne kadar zor olacağını bilmediğim için. En azından desteklenen platformlarda, bundan kaçınmak için teknik bir neden yoktur. (Ahşap üzerine vurmak)


3

Bir yaklaşım, bölgenizdeki işleri aramaktır. Yapmak istediğiniz işleri bulun ve hangi becerileri istediklerini görün. C ++ veya Ruby veya Oracle veya D istiyorlarsa, bu çoğunlukla istediğiniz işi elde etmenize yardımcı olacak beceridir.


3

Çok iyi tasarlanmış bir dile benziyor; C - C ++ - Amaç C'den çok daha iyi. Bir süreliğine IDE veya hata ayıklayıcı olmadan yaşayabilirim, ancak D 2.0 için iyi, belgelenmiş bir kütüphane olmadan yaşayamam.

6 ay sonra tekrar kontrol edeceğim ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.