Evet ise, nerede ve neden kullanardınız?
Cevabınız hayırsa, lütfen C'nin neden kabul edilemeyeceğine dair bir açıklama yapın.
Evet ise, nerede ve neden kullanardınız?
Cevabınız hayırsa, lütfen C'nin neden kabul edilemeyeceğine dair bir açıklama yapın.
Yanıtlar:
Bazı donanım yazılımı sürücüleri uygularsam C'yi kullanırdım. Kendi İşletim Sistemi çekirdeğimi veya kendi Sanal Makinemi uygularsam C'yi kullanırdım.
Windows API, Linux, Mac OS X, Solaris ve benzeri için donanım veya düşük düzeyli OS API'leriyle uğraşmanız gerekiyorsa düşük düzeyli şeyler yapmak çok iyi bir dildir ... Gömülü sistemler genellikle C için iyi bir desteğe sahiptir. bir derleyici + geliştirme kiti ile.
Evet tabi ki. C'yi performans açısından kritik sistem parçaları veya düşük seviyeli iletişim parçaları yazmak için kullanırdım. Örneğin , Erlang projesinde NIF'leri yazmak için C'yi sadece bu tür bir iş için Doğru Araç (tm) olduğu için kullanırım. Ya da Perl projesinde benzer parçaları (XS) yazmak için C'yi kullanırdım.
C'yi neredeyse her gün profesyonel olarak kullanıyorum. Aslında, C düzenli olarak programladığım en üst düzey dildir.
C'yi nerede kullandığım: Mümkün olduğunca verimli olma şartı olan düşük seviyeli kütüphane kodunu yazıyorum. Tutkal kodum C, iç hesaplama döngüleri montajda yazılır.
Neden C kullanıyorum: Karmaşık argüman yapılarını ve hata koşullarını işlemede olduğundan çok daha basittir ve gerçek hesaplamaya başlamadan önce bu tür bir durum kontrolü için performans yükü genellikle ihmal edilebilir. C basit, iyi tanımlanmış bir dil olduğundan, kabul edilemez performans tehlikeleriyle derlenmiş kod gördüğümde kod üretimini geliştirmek için derleyici ekibiyle birlikte çalışmak için kolay bir zamanım var.
Taşınabilirlik, C'nin bir başka büyük erdemidir. Tutkal kodum, üzerinde çalıştığım kütüphanelerin donanıma özgü birden fazla uygulamasında paylaşılıyor ve bu da yeni platformlar için destek getirmeyi gerçekten kolaylaştırıyor. Çoğu platformda ayın dil lezzeti için sanal bir makine veya yorumlayıcı yoktur. Bazı platformlarda iyi bir C ++ derleyicisi yoktur. Kullanılabilir bir C derleyicisinden yoksun çok az platform var (ve derleyici ekibimizle iyi bir iş ilişkim olduğundan, genellikle ihtiyacım olan desteği almakta zorlanıyorum).
Evet, C'yi kaynak kısıtlı bir gömülü sistemde kullanırım. Ben edebilir Keşke o kadar kolay yazılım bileşenleri arasındaki güçlü arayüzleri teşvik etmek yapar, ama proje üzerinde çalışan tüm mühendisler o C anlamaya yalnızca ++ sanal işlevler ve şablonlar kaçınmak şeyler örnekleridir (kod boyutu kabartmak giden kötüye kolaydır yerine çünkü C ++ kullanmanız ).
Ayrıca iyi bir fikir değil, 1K yığını üzerinde 10K nesne oluşturmaya çalışan bir C ++ programcısı gördüm.
virtual
fonksiyonlar "kullanmadığınız şeyler için ödeme yapmazsınız" prensibini takip ettikleri için uygundur, ancak hafıza kısıtlı ortamda istisnaları ve RTTI'yı devre dışı bırakmak isteyebilirsiniz.
Çoğunlukla Xen hipervizörü, sunduğu çeşitli kütüphaneler ve Linux çekirdeği ile çalışıyorum. Bazen, bir aygıt sürücüsü yazmak zorundayım (ya da nxx sanal makinelerinin HRNG gibi tek bir aygıtı paylaşabilmesi için yeniden yazmak zorundayım). C benim ana dilim ve bundan oldukça memnunum.
Bunu kullanarak bir elektronik tablo programı yazmaya çalışabilir miyim? Olmaz. Her aracın kendi uygulamaları vardır ve birçok araca sahip olduğum için mutluyum.
C'yi seviyorum, ama bir çekiçle vidaları vurmaya çalışmıyorum.
C yeni bir proje için mantıklı bir seçimse, kesinlikle. Değilse, başka bir şey kullanacağım.
Bazı projeler için yapardım. Kesinlikle gömülü bir sistem uygulamak zorunda kalırsam, otonom bir uçak kontrolörü için söyleyin. Hatta montaj ile bazı parçalarda daha düşük seviyeye bile gidebilir.
Projeye uyuyorsa, hiçbir sorunum yok.
Bir web uygulaması geliştirmek istiyorsanız, hmm, muhtemelen hayır (ya da çok güçlü ve gerçek destekli bir gerekçe görmem gerekir).
Ayrıca, bir darboğaz açıkça tanımlandığında ve yerel kod kullanılarak bir optimizasyon uygulanabildiğinde, diğer dillerle geliştirilen diğer projelerden de kullanırım. Örneğin, bazı gelişmiş oluşturma işlemleri (örneğin, bir oluşturma motoru vb.) İçin yoğun hesaplamalar gerçekleştirmesi gereken bir Java çözümü. Desteklenen bir platform değilse bir Java uygulamasını varsayılan olarak kullanabilir, ancak bazı desteklenen platformlar için C'den yerel olarak derlenmiş bir uygulama sağlayabilir ve hoş bir performans artışı elde edebilirsiniz.
Dışarıdaki her dilin iyi bir kullanım alanı var. Kendimi sık sık üst düzey dillerde şeyler uygularken bulurum ve daha yüksek performansa sahip olmaları ya da sadece daha taşınabilir olmaları gerekiyorsa bunları yavaş yavaş C-topraklarına indiririm. Var olan hemen hemen her şey için C derleyicileri vardır ve evrensel olarak kullanılabilen bir API'ye (POSIX gibi) yazarsanız, çok yararlı olabilir.
Bugün programlamayı öğrenmekle ilgilenen insanlara sık sık söylediğim şey, bazılarında noktada C'yi öğrendiklerinden ve onunla rahat olduklarından . Kendinize ihtiyacınız olan durumlarda bulabilirsiniz. Birden fazla vesileyle, küçük, statik olarak bağlı bir "hızlı yeniden başlatma" programı derlemek ve disk alt sisteminin tamamen gitti bir sunucuda bir RAM disk üzerine koymak için scp kullanmak zorunda kaldı. (Ucuz, ucuz sunucular, çevrimiçi yedeklilik yok ve sadece küçük bir program yükleme yeteneği? C gitmek için bir yoldur.)
Ayrıca, kendinizi ayağa vurmadan C'de nasıl çalışacağınızı öğrenmek, kişinin diğer dillerde ve çevrede verimli yazma yeteneğine önemli ölçüde katkıda bulunabilir. En azından benim deneyimim bu oldu.
Kesinlikle her şey, hatta çoğu şey için kullanmama rağmen, yeri var ve oldukça evrensel: bu yüzden evet, geçmişte kullandım ve gelecekte kullanacağım ( şu anda ne zaman olduğunu biliyorum).
Evet, her zaman yaparım.
Herhangi bir kütüphaneyi çağırmazsanız, C'den oluşturulan kod OS desteği gerektirmez. Ayrıca, oluşturulan makine dili üzerinde iyi kontrol sağlar. Bu nedenle, çekirdek alanlarda yaşayan sürücüler veya diğer kodlar yazmak ve birçok gömülü sistem gibi diğer kısıtlı durumlar yazmak için harikadır. Ayrıca X Windows, GTK + ve Clutter gibi birlikte çalıştığım açık kaynaklı projeler için birincil dil.
C ++ 'da her şeyi yapabilmenize rağmen, C ++' ların mekanizmaları daha hızlı ve kod yazmayı kolaylaştırır. OOP'u ve C ++ sınıflarının işlevselliği kapsama şeklini ve RAII'yi seviyorum. Bir nesne kapsam dışına çıktığında otomatik yıkıcı çağrısının dikkatli kullanılması, C programlamasının sıkıntısı olan bellek ve kaynak sızıntılarının çoğunu ortadan kaldırır. STL temel olarak yüksek derecede optimize edilmiş algoritmaların ve veri yapılarının dev bir kütüphanesidir; eğer onları C'den kullanmak istersen, bunları kendin yazman ya da bir yerden satın almalısın.
Ne yazık ki, anlamadığım nedenlerden ötürü, Linux'taki çalışma zamanı sistemi, herhangi bir C ++ çalıştırmak için özel bir paylaşılan nesne kitaplığı (Windows'ta DLL, Mac'te dylib'e eşdeğer) gerektirir ve bir C programı çalıştırdığınızda bulunmaz. Bu yüzden en sevdiğim Mac ve Windows numaralarından birini yapamam, bu da C tabanlı bir API ile C ++ tabanlı bir paylaşılan nesne yazmak ve bunu bir C programından çağırmak.
İşte benim karar alma sürecim:
Güzel bir şey, C ++ C'yi derleyebileceğidir, çünkü belirli bir durum için oluşturulan kod üzerinde gerçekten ayrıntılı bir kontrole ihtiyacınız varsa, bunun için sadece C ve geri kalanı için C ++ yazabilir ve hepsini C ++ derleyicisiyle derleyebilirsiniz. .
eğer ikisi de olmalı
sonra C kullanıyorum. Belki C ++.
Evet, aslında son zamanlarda aldım!
C programlamayı seviyorum. Python programlamamın çoğunu yapıyorum, ancak hızlı koda ihtiyaç duyduğum zamanlar var ve dilin sadeliğinden gelen zarafetin tadını çıkarıyorum.
Şu anda üzerinde çalıştığım proje, tahmin edebileceğiniz gibi performans açısından kritik bir veritabanı. Şu anda C ve bazı python kullanıyorum, ancak eninde sonunda tamamen C olmasa da ağırlıklı olarak olacak.
Evet. Kariyer programlamamın çoğunu C ++ ile geçirdim, ancak şimdi kodumun çoğunu Ruby'de yazıyorum ve performansa veya düşük seviyeli öğelere erişime ihtiyacım varsa bir C uzantısı yazıyorum. Gelecekteki dostum!
Bir işletim sistemi yazıyorsam C'yi kullanırdım. Önümüzdeki yirmi yıl içinde gerçekleşmeyeceğinden, lotoya çarpıp kendi harika Linux dağıtımımı yapmaktan başka yapacak bir şeyim olmadıkça, muhtemelen sadece C #, Java, Python, vb. C'yi çok uzun süre kullanmadım ama her zaman kullanmaktan zevk aldım; Yine de, bu günlerde kafam OO'nun etrafına o kadar sarılmış ki, eğer ona geri dönmem gerekirse, tekrar yuvarlanmam biraz zaman alacaktı.
C ++ , platformlar ve mikrodenetleyiciler gibi yerleşik aygıtlar arasında taşınabilir. (C ++ C'ye derlenebilir, bu nedenle mikrodenetleyiciler.)
C bile (yabancı işlevler olarak) diğer dillere taşınabilir. Bu nedenle, iff I düşük seviye kütüphaneleri programlamak, sonra C ++ daha fazla uyumluluk istiyorum.
Haskell platformlar arasında taşınabilir (ARM yakında), ancak mikrodenetleyiciler gibi gömülü cihazlar DEĞİLDİR. Hızı C ve C ++ ile karşılaştırılabilir; ancak işlevsel olduğu için, çalışma zamanı yığını yerine bir çöp toplayıcı kullanır, bu nedenle farklı zamanlarda (çöp toplama) ve farklı durumlarda (alt rutin çağrılar yerine devamlar) C'den daha hızlı ve daha yavaş olabilir.
Mümkün olan en soyut dili seçiyorum, çünkü program hızı farklı değil geliştirme süresi ve hata oranı. C ve C ++ çok farklıdır, ancak Haskell açısından farklı değildir.
Bir ya da iki eli dolu bilsem bile diğer dilleri tercih etmiyorum. … Birkaç vaka dışında, bash .
Gömülü sistemler genellikle birkaç kilobayttan fazla RAM'e ve belki de birkaç düzine kilobayt flaşa sahiptir ve işlemci saat hızı birkaç MHz'dir. C, böyle çıplak metal bir ortamda herhangi bir anlam ifade eden tek seçenektir.