[linux-programlama] Re: Hangi dili kullanmalıyım

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: Bora Güngören (bora@boragungoren.com)
Date: Mon 20 Sep 2004 - 19:22:02 EEST


Merhaba,

Baris Simsek wrote:

>firewall veya proxy idealde realtime calismasi istenen yazilimlardir.
>C'nin hiz acisindan C++ a hatiri sayilir bir ustunlugu var. cunku C++ da
>nesne yapilarinin acilmasi gibi araya giren kucuk bir islem var. ancak
>gunumuz hizli sunucularinda bu cok da sorun olmayabilir.
>
>
>

Bence bu konuda bir ön yargılı yaklaşıyorsunuz. Çağdaş C++
derleyicilerinin optimizasyon becerileri ve 1999'dan bu yana uydukları
standarttaki nesne modeli sayesinde söz konusu yavaşlamalar tarihe
karışmıştır.

Artık bu tür yavaşlamaların olması için son derece kötü tasarlanmış
(örneğin çok sayıda somut sınıftan public miras almalı) sınıf
hiyerarşileri ve hatalı bellek yönetim mekanizmaları (örneğin hevesten
dolayı gereksiz yerde new işlecini yüklemek) gereklidir. Kısacası
acemilik diyebiliriz. Güvenlik duvarı, vekil sunucu gibi konularda
uygulama geliştiren kişiler de deneyimli insanlar olacakları için bu tür
hataları beklemek bence fazla kötümser olmak. Doktoralı bilgisayar
mühendislerinin derin uygulama algoritmaları ile uğraştığı alanlar bunlar.

Ayrıca kişisel deneyimim, özellikle STL kullanarak yazılan kodların son
derece iyi tasarlanmış C programlarından bile daha hızlı çalışabildiğini
gösteriyor.

Bugün gerçek zamanlı yazılım olarak en güzel örnek cep telefonu, el
bilgisayarı işletim sistemleridir. Hepsi C++ ile yazılır. Symbian için
kod yazarken C++ ve STL ile çalışırsınız. Bir çok askeri uygulama da
doğrudan C++ (ve sıklıkla STL ile) ile yazılmaktadır.

Kısacası C++'ın ileri düzey yapıları ile olağan üstü optimizasyonlar
yapılabiliyor. Ben kendi öğrendiklerimi kurcaladığımda ağzım açık kaldı.
Daha detaylı kurcalayanlar da vardır elbette.

>yoksa C++ cok daha guvenlidir, C'ye gore. Programcinin hatalarini en aza
>indirir. Sizi guvenli kod yazmaya zorlar. Buna ragmen C++ ile yazilmis
>buyuk bir kernel yok. nedeni yukarida dedigim gibi.
>
>
>
Linux çekirdeği dahiyane bir şekilde tasarlanmış olmakla birlikte
aslında Tanenbaum'un 1991'de biraz da abartarak açıkladığı üzere "eski
stil" tasarımlanmıştır. Ayrıca çekirdeğe entegre modüllerin kodlarında
sürekli olarak C'den C++'a geçiş söz konusu. Neden 2.x.y çekirdeğinin
de tamamen C++ ile tasarlandığını görmeyelim ki?

Bir de buradaki soru, "bu tür uygulamalar için C/C++ seçilmesi mi
önemli" değil de belki "bu tür uygulamalarda hangi algoritmanın
seçilmesi" olmalı. Uygulama mantığındaki (akademik kaynaklı) algoritma
uygulama performansında ciddi farklara yol açabiliyor. Açık kaynak
kodlul yazılımların daha performanslı olmasının bir sebebi de bence bu.
Çünkü üniversitelerle iç içe gelişmekte. Makaleleri yazanlar, bir
olasılıkla söz konusu uygulama için açık kaynak kodlu sunucuya kod da
ekliyorlar. Yani C yada C++'ın falan mekanizmasının iyi yada kötü
kullanılmasının %1-2 performans etkisi ile tartışma yürütmek; falan yada
filan algoritmanın doğru uygulanması ile gelen %40-50'lik performans
etkisi yanında sönük kalacak.

Örnek vereyim.

Geçen gün bir yüksek lisans tezi gördüm. Bir inşaat mühendisi, problemi
çözerken, bir alt problemde en kısa yol bulmak için ünlü gezgin
satıcımızı dolaştırmış. Ama birden fazla satıcı için dolaştırıyor ve bu
yöntem, bu durum için aslında iyi bir yöntem değil. Çok daha iyi sonuç
veren ve daha hızlı (elindeki problem boyutu için yüz kat hızlı - bin
kat hızlı) çalışan yöntemler var. Ama o bunları "bilmiyor". Bilen birisi
ile birlikte yazsaydı programını isterse QBasic ile yazsın emin olun
kendisinin C ile uğraştığından çok daha iyi sonuçları çok daha kısa
sürede verecekti.

Demek ki uygulama alanındaki bilgi ile programlama dili bilgisi, ikisi
de önemli. C/C++'ın bazı alanlarda yaygın kullanlması elbette hızlı
çalıştığından; ama bir nedeni de uygulama alanlarındaki alan modellerini
kolayca dildeki modellere eşlemeye yaramalarından kaynaklanıyor.

Sevgiler.

Bora.


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.