C ++ 'ın bugün rolü nedir?


41

Şu anda bir BT öğrencisiyim ve bugün C ++ 'da hala neyin önemli olduğunu merak ediyorum, ne için kullanılıyor? Üniversitemde temel C ++ kursunu tamamladım ama bilgimi nerede kullanabileceğimi ve hangi yönde C ++ öğrenmem gerektiğini düşünemiyorum.

Başka bir deyişle, başarılı bir C ++ programcısı olmayı ne öğrenmeliyim?

Şu anda Java öğreniyorum, çünkü bugün hangi alanda C ++ 'ın yararlı olabileceğini net olarak göremiyorum, fakat Java programcısı olarak ne tür bir iş yapacağımı açıkça biliyorum. Ama hala C ++ 'ın ölmediğini umuyorum.


2
Bu benim bakış açım. C ++, gerçek zamanlı durumlarda (ve video oyunlarında) çok faydalıdır. Ayrıca C ++ 'ı masaüstü uygulamaları için (Qt'yi unutma) performans nedenlerinden dolayı kullanıyorum.
hosomaki

1
@ IMT IMO, muhtemelen tüm dillerin kullanılmadığı bir zaman geleceğinden (muhtemelen kullanılan donanımdaki büyük değişikliklerden dolayı) bir zaman geleceğinden muhtemelen ölmesi muhtemeldir.
Kenneth

17
C ++ ölmekten çok uzak (her gün yeni kod yazıyorum) ve COBOL herhangi bir gösterge ise, uzun yıllar çalışacağım.
Michael Kohne

2
Programlama Dilleri İşaretine bir göz atın ve kendi kararınızı verin: lextrait.com/vincent/implementations.html
Nemanja Trifunovic

1
Son zamanlarda Microsoft'un 9. kanalında bazı ilginç videolar izledim . Microsoft, pazar araştırmasına milyonlarca insan harcadı ve araştırmasına dayanarak C ++ rönesansından bahsetti. Bu videoya bakın .
grokus

Yanıtlar:


57

C ++ 'ın katil özelliği, kapsama bağlı kaynak yönetimi SBRM'dir (daha yaygın olarak " RAII " olarak bilinir ). Öyle sadece bu kavram etrafında inşa edilmiştir endüstriyel programlama dili. C ++ 'da, tüm nesnelerin yaşam süreleri tam olarak bilinir ve (iyi yazılmış) C ++ programları, kaynakların tamamen deterministik bir şekilde edinilmesini ve serbest bırakılmasını garanti eder. Buna karşılık, çöp toplanan veya başka bir şekilde yönetilen diller böyle bir garanti vermemektedir; Aslında bu dillerdeki nesneler ömürlerinin sona ermesinden sonra da devam edebilir.

C ++ 'ın finans, video oyunları, yüksek performanslı gömülü ve gerçek zamanlı sistemler, ulaşım, üretim ve determinism ve hassasiyetin önemli olduğu diğer endüstrilerde kullanılmasının nedeni budur. Alternatif yok.

Verilen, bundan çok daha fazla görev için kullanıldı ve bu görevler C # ve Python ve diğer daha uygun dillere kaybedildi, ancak bu çekirdek nişini etkilemiyor.


20
C ++ 'da malloc kullanan herkes kafasını sert bir nesneyle vurmak isterim. Ayrıca, newC ++ 'ta yerleşim denilen operatörün daha az bilinen bir özelliği vardır . Halen meşgul olan bir hafıza alanını yeniden kullanmanıza izin verir. Yani eğer biri parçalanmadan kaçınmak (veya küçültmek) isterse teoride bunu yapabilir. Ve öngörülebilir aynı deterministik değil.
Tamás Szelei

4
@Apalala C ++ 'ın referans sayımı da var, ancak nesne ömrü yönetimi açısından SBRM'den çok daha kötü. Ben sadece zorlu RT determinizminden bahsetmiyorum, nesne modelinin deterministik davranışından da bahsediyorum.
Cubbi

4
C ++ 'ı öğrendiğimde, RAII özellikle yaygın olarak bilinmiyordu; Yeni öğrendim ve silin ve beyin temelli işaretçi yönetimi. Bu yüzden “kavram etrafında inşa edilmiş” olarak niteleyebileceğinizi düşünmüyorum. Günümüzde kullanılan kütüphaneler ve diğer destek yapıları, ana dile veya sözdizimine sahip olabilir, ancak olmayabilir.
jprete

7
@jprete C ++ 'un güçlü yönlerinin çoğunun tasarlanmak yerine keşfedildiği doğrudur. Bu yazı 2005 sonrası dil hakkında.
Cubbi

5
RAII , C ++ olarak tasarlanmıştır. Fakat çoğu C ++ programcısı sadece C'yi yazmaya devam etti, malloc'u yeni ve ücretsiz silme ile değiştirdi.
kevin cline

40

C ve C ++ için birkaç pazar var (sınırlı bir anlayışa rağmen)

  1. Mevcut kod C ve C ++, mevcut en büyük kod kodlarından bazılarına sahiptir. Bu büyüklükteki kod sadece bir sonraki "yeni sıcak dil" ortaya çıktığı için atılamaz. C bağlamaları hemen hemen çoğu platformda diller arası etkileşim standardıdır, bu nedenle (en azından) C veya C ++ dilinde sarıcı kitaplıklarını yazabilmek faydalıdır.
  2. Yüksek performanslı uygulamalar (örneğin, yüksek frekanslı finansman). C ve C ++, diğer programlama dillerinden daha iyi bir genel performans göstermeye devam ediyor. En önemlisi, C ++ 'da, çoğu zaman hesaplamayı çalışma zamanından derleme süresine (genel uygulamanızı daha hızlı hale getirecek şekilde hareket ettiren) taşıyan şablonlar gibi sadece derleyici özellikli soyutlamalar oluşturur.
  3. (2'ye benzer) Düşük gecikmeli uygulamalar. Örneğin, CLR veya JVM ile çalışan diller, uygulamaya bağlı olarak genellikle C ++ kadar hızlı olabilir, ancak programın yürütülebilmesi için CLR veya JVM'nin kendilerini belleğe yüklemesi gerekir. Zor başlangıç ​​gereksinimleriniz varsa, bu önemlidir. YORUMDAN DÜZENLE : Bu konuda, herhangi bir tanımlamanın gecikme zorunlulukları burada not edilmiştir. Sanal makinelerde çalışan diller nadiren zor zaman sınırları sunar, çünkü örneğin çöp toplama işleminin gerçekleştirilmesi belirleyici bir süreç değildir.
  4. Gömülü sistemler. Bazı gömülü sistemler, örneğin JVM (Google'ın Android'i (Tamam, gerçekten JVM değil, ancak yakın), RIM'in Blackberry'i) veya CLR'yi (Windows Phone) çalıştıracak donanıma sahiptir, ancak gömülü sistemlerin çoğunun gücü yoktur C veya C ++ için gerekenden daha fazla çalışma zamanı desteği gerektiren dilleri çalıştırın (hiç çalışma zamanı desteği yok).
  5. Dağıtım kısıtlı uygulamalar. Bazen, tüm programınız sadece birkaç yüz KB ise, JVM veya CLR kurulumunu gerektirmek çok büyük önem taşır. (Örneğin ben üzerinde çalışmak programların en gerekir single olarak dağıtılabilir .EXEyükleyici veya böyle bir şey her türlü olmadan dosyaya; bunun için hiçbir alternatifi vardır)

2
Başlangıç ​​gecikmesi, endişelenecek tek gecikme türü değildir: Gerçek zamanlı zor şartlar çok daha büyük bir sorun yaratabilir.
greyfade

1
Belirli bir yapımcıya (C # veya Objective-C) kilitlenmek istemediğiniz ya da dilinizin bir sürü davaya karışmasını istemediğiniz bir şey ekleyin (Java)
Martin Beckett

@greyfade: Bu, (2) ile ne demek istediğimi kastetti, ancak bunun kesin olmadığı konusunda hemfikirim. Düzenlenen. @Martin: Bunun C ++ için iyi bir güç olduğunu düşünmeme rağmen, hangi piyasalarda C ++ 'ın yaygın olarak kullanıldığı sorusunu cevapladığını sanmıyorum. Ayrıca, CLR'nin <S> BSD </S> (OOPS: LGPL) lisanslı sürümü mevcut olduğunda (mono), C # 'yı belirli bir üreticiye kilitli kalacağımı sanmıyorum.
Billy ONeal

1
Ayrıca 5. İşletim sistemleri ve çekirdek çerçeve. Sanal bir makinede çok şey yapabilirsiniz, ancak sanal makinenin hala C ve / veya C ++ ile uygulanması gerekir.
Jan Hudec

1
@Jan: Evet olur. Yansıma ve arkadaşlar gibi şeyler sorunları 2-4 tetikler. Çöp toplayıcıyı yazmanız gereken tek alt küme, fiziksel belleği temsil eden bir nesne olabilir.
Billy ONeal

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.