Basic - C karşılaştırması

Başlatan bunalmis, 07 Haziran 2011, 05:35:41

z

C yuksek duzeyli diller icinde en hizlisi deniyor. Peki hic dusundunuz mu C nin hizi ve avantaji nereden gelmektedir?

Basic dili C ile kapisabilirmi?

Tartisma baslatmak uzere bir kac ornek vermek istiyorum.  (Evet istenirse Basic ile C kapisabilir.)

A=B+C islemi  Basicde A=A+B:  C de ise A=A+B; seklinde yazilir.

Basicde for dongusu   for a=0 to 9   C de ise  for (a=0; a<10; i++) seklinde yaziliyor

C nin for dongusunun Basicdeki gibi tek duze olmayisi elbette avantajlidir. (Fakat C nin esnek for komutunun cok benzeri istenirse  Basic komut setine de eklenebilir.)

y=Sin(x+z*w) islemi  basicde  y=sin(x+z*w) :  C de ise  y=sin(x+z*w);  seklide yazilir.
Eger isterseniz ara degiskenlerle a=z*v: a=x+a: y=Sin(a) islemi yaparak kod isletim suresini uzatabilirsiniz.

Gorulecegi uzere temel fonksiyonlarda ciddi hic bir fark yok.

Fark, bu islemlere karsi gelen makine kodlarinin olusturulusunda. C nin hizli kosamasinin sebebi, makine kodlarinin sade olusudur.

(Bir kadinin arabadan inip bankamatikten kart ile para cekip geri arabasina binip gitmesi ile ilgili anlatim bir zamanlar maillerle ordan oraya dolasiyordu. Basicdeki kod isletimi bu anlatima cok benzer.)

Bir de pointer islemlerine bakalim.

Ornegin

16 bitlik integer verilere ulasan bir pointerimiz olsun.

Basic de pointer ile verilere ulasmaya kalksaydik

Ornegin Adr komutu ile basic de adres alabilelim.

Bu durumda 10 adet integer verilere ulasirken

P=Adr(Var1);

for i=0 to 9
oku=Peek(P)
P=P+2
next i seklinde yazilabilir.

C de ise

P=&Var1

for (i=0; i<10; i++) 
{
   oku:=*P
   P++;
}

seklinde olacaktir.

mukayese edersek basicdeki yuksek duzeyli ve yavas sayilabilecek P = P  + 2 islemine karsilik C nin P++ avantaji vardir.

Eger istenirse sadece syntax degistirilmek uzere  C derleyici uzerinde yapilacak modifikasyonla C derleyicisi Basic derleyicine donusturulebilir.

Bu durumda birisi Basic digeri C olan fakat hizlari ve kod karmasasi ayni iki dil karsimiza cikar.

Peki budurumda nerede kaldi C nin Basicden daha hizli oldugu?

Herhangi bir dil derleyicisi adam gibi yazilirsa C mis Basicmis farketmez.

Fakat ne yapilirsa yapilsin hic biri asm kadar basina buyruk yapilamaz.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

CLR

Alıntı yapılan: bunalmis - 07 Haziran 2011, 05:35:41
C yuksek duzeyli diller icinde en hizlisi deniyor. Peki hic dusundunuz mu C nin hizi ve avantaji nereden gelmektedir?

Basic dili C ile kapisabilirmi?

Tartisma baslatmak uzere bir kac ornek vermek istiyorum.  (Evet istenirse Basic ile C kapisabilir.)

A=B+C islemi  Basicde A=A+B:  C de ise A=A+B; seklinde yazilir.

Basicde for dongusu   for a=0 to 9   C de ise  for (a=0; a<10; i++) seklinde yaziliyor

C nin for dongusunun Basicdeki gibi tek duze olmayisi elbette avantajlidir. (Fakat C nin esnek for komutunun cok benzeri istenirse  Basic komut setine de eklenebilir.)

y=Sin(x+z*w) islemi  basicde  y=sin(x+z*w) :  C de ise  y=sin(x+z*w);  seklide yazilir.
Eger isterseniz ara degiskenlerle a=z*v: a=x+a: y=Sin(a) islemi yaparak kod isletim suresini uzatabilirsiniz.

Gorulecegi uzere temel fonksiyonlarda ciddi hic bir fark yok.

Fark, bu islemlere karsi gelen makine kodlarinin olusturulusunda. C nin hizli kosamasinin sebebi, makine kodlarinin sade olusudur.

(Bir kadinin arabadan inip bankamatikten kart ile para cekip geri arabasina binip gitmesi ile ilgili anlatim bir zamanlar maillerle ordan oraya dolasiyordu. Basicdeki kod isletimi bu anlatima cok benzer.)

Bir de pointer islemlerine bakalim.

Ornegin

16 bitlik integer verilere ulasan bir pointerimiz olsun.

Basic de pointer ile verilere ulasmaya kalksaydik

Ornegin Adr komutu ile basic de adres alabilelim.

Bu durumda 10 adet integer verilere ulasirken

P=Adr(Var1);

for i=0 to 9
oku=Peek(P)
P=P+2
next i seklinde yazilabilir.

C de ise

P=&Var1

for (i=0; i<10; i++) 
{
   oku:=*P
   P++;
}

seklinde olacaktir.

mukayese edersek basicdeki yuksek duzeyli ve yavas sayilabilecek P = P  + 2 islemine karsilik C nin P++ avantaji vardir.

Eger istenirse sadece syntax degistirilmek uzere  C derleyici uzerinde yapilacak modifikasyonla C derleyicisi Basic derleyicine donusturulebilir.

Bu durumda birisi Basic digeri C olan fakat hizlari ve kod karmasasi ayni iki dil karsimiza cikar.

Peki budurumda nerede kaldi C nin Basicden daha hizli oldugu?

Herhangi bir dil derleyicisi adam gibi yazilirsa C mis Basicmis farketmez.

Fakat ne yapilirsa yapilsin hic biri asm kadar basina buyruk yapilamaz.

Merhaba,

4 işlem uygulamalarıyla diller karşılaştırılmaz, önce C'nin derin kısımlarını araştırırsan(embedded düzeyde ) örneğin structer, structer pointer, structer array, linked list, union  ve bunların kombinasyonları gibi ve C'de bu karmaşık yapının assembly'li çözümüne, ozaman aradığın farkı bulacaksın.

Asm hızlı evet ama o durumda biz yavaşız değil mi? Tercih meselesi tabii, keil, iar, hitech gibi profesyonel derleyici kullanıyorsan genellikle ASM mi C mi demene gerek kalmaz.

Ama kısmen sana hak veriyorum, C içindeki for, while, if vs gibi "temel" kavramları hangi derleyici ile yazarsan yaz benzer sonuçlar üretebilir. Ama yukarıda yazdığım gibi program yazmayı çok kolaylaştıran  yapılar var ve profesyonel C derleyicileri bu yapılar için asm'ye çok yakın değerler üretiyorlar ve bunu asm'de yazmaya kalksak günleri alır ve denenmemiş oluyor (bug çıkması muhtemel).






Knowledge and Experience are Power

z

Biraz olaya ilgisiz taraftan bakmışsınız.

Yazıma dikkat etseniz karşılaştırmamın, karmaşık komutların olup olmaması değil de hızlı kod koşturma ve sade makine kodu  üretme odaklı olacağını görecesiniz.

4 matematiksel işlemden biri olan bölme bile, iki dilin hız açısından karşılaştırılması açısından fazlasıyla yeterlidir. Özellikle de işlemcinin bit uzunluğunun bir kaç katı uzunlukta bölme işlemi hız karşılaştırması açısından ideal bir test programıdır.

Çarpma, bölme, toplama ve çıkarma esasına dayanan trigonometrik fonksiyonlarla yapılacak hız karşılaştırmasında, C Basic sonuçları bariz farklılıklar gösterir.

Fakat bu, C nin gücünden değil, Basic derleyiciyi yazanların beceriksizliğinden kaynaklanır.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

CLR

Alıntı yapılan: bunalmis - 07 Haziran 2011, 11:23:52
Biraz olaya ilgisiz taraftan bakmışsınız.

Yazıma dikkat etseniz karşılaştırmamın, karmaşık komutların olup olmaması değil de hızlı kod koşturma ve sade makine kodu  üretme odaklı olacağını görecesiniz.

4 matematiksel işlemden biri olan bölme bile, iki dilin hız açısından karşılaştırılması açısından fazlasıyla yeterlidir. Özellikle de işlemcinin bit uzunluğunun bir kaç katı uzunlukta bölme işlemi hız karşılaştırması açısından ideal bir test programıdır.

Çarpma, bölme, toplama ve çıkarma esasına dayanan trigonometrik fonksiyonlarla yapılacak hız karşılaştırmasında, C Basic sonuçları bariz farklılıklar gösterir.

Fakat bu, C nin gücünden değil, Basic derleyiciyi yazanların beceriksizliğinden kaynaklanır.

Merhaba,

Bende sizin bahsettiğiniz gibi hızdan bahsediyorum, o yapıları basicte kurun ve sonra hız karşılaştırması yapın. Hem işlemci çalışma hızı hemde kullanıcı program yazma hızını birlikte test edebilirsiniz. Dört işlemlerde ki hız karşılaştırmaları ise derleyiciye göre değişir, dile göre değil. Mesela atıyorum X basic programı keil'in kullandığı bölme algoritmasını kullanıyorsa, derleme sonucu oluşan kod yaklaşık aynı çıkacaktır.

Knowledge and Experience are Power

z

Basic ve C aynı 4 math algoritmasını kullanansa bile trigonometrik hesaplamalarda C nin daha hızlı olacağını söyleyebilrim.
Bu hız farkı, C derleyicilerin çok az geçici register kullanarak fonksiyonlar arası veri transferinde zaman kaybını azaltacak kodlar üretmesinden kaynaklanır. (Bakınız bankamatikten para çeken kadın olayına)

İşte başından beri gelmek istediğim nokta da burası.

Basic derleyici C ye benzer şekilde bu manüplasyonları yaparsa özellikle de basic makinası gibi yapıdan uzaklaşırsa iki dilin birbirinden tek farkı,
nerede ise komut dizilimlerin birinde ; diğerinin ise : ile sonlanması kadar küçük olacaktır.

Eğer structer yapıları gibi yapılardan dolayı C güçlüdür derseniz buna katılırım. Fakat bu kısım şu anki tartışmada bizi hiç ilgilendirmiyor.

Örneğin tartışmayı 16F serisi işlemcilere kod üreten C ve Basic derleyici olarak ele alırsak zaten bunlar C derleyiciler için bile havada kalır.

Bu tip basit işlemcilere kod üreten C derleyicinin stacktaki manüplasyon şansı elinden alındığı halde Basic derleyicilerden açık ara hızlı çalışan kod üretir. Bu dediğiniz gibi dilin değil de derleyicinin başarısı.

Demek istediğim gelmek istediğim konu da burası. C derleyicisi yazan ekip iyi bir Basic derleyicisi de yazmış olsalar  Bizlerin C iyidir Basic  yavaştır tartışması yapmasına  bile gerek kalmaz.

Elektronikçilerin büyük veri öbekleri üzerinde işlem yapacak programlar yazmaları, structure, array, link list uygulamalarına bulaşmalarını biraz meslekten uzaklaşma olarak görüyorum. (Bırakın bu işleri elektronik eğitimi almış olanlar değil de bilgisayar eğitimi almış olanlar yapsın.)

Dolayısı ile C nin bu tip uygulamalar için gereken pointer, structure vs işlemlerini tıraşlayalım ve Basice denk gelen halini tartışalım.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

Bunalmış hocam.
Burada dilden değil de derleyiciden bahsetmek gerek sizinde söylediğiniz gibi. iyi bir Basic derleyicisi iyi bir kod üretir. bunun dille pek alakası yoktur.(dilden kasıt syntax) bazı örnekler verebilirim.
Gömülü sistem için (18F) üretilmiş bir Swordfish compiler var. adamlar oldukça iddalılar. CCS (eğer C olarak kabul edersek) den daha optime kod ürettiğini söylüyorlar.Bknz http://www.sfcompiler.co.uk/wiki/pmwiki.php?n=SwordfishUser.Comparison
Geçelim Pc boyutuna
daha önceden VBasic de(6.0)
A=a+1 yazardık
artık
A+=1
yazabiliyoruz. ama bu demek değildirki C# kadar (neredeyse sondaki noktalı virgül eksik) optimize edilnmis kodlar üretsin.

Benim öngörüm yakın tarihte dil kavramı kalmayacak. Bknz Flowcode http://www.matrixmultimedia.com/flowcode.php

CLR


Alıntı yapılan: bunalmis - 07 Haziran 2011, 13:08:11
Basic ve C aynı 4 math algoritmasını kullanansa bile trigonometrik hesaplamalarda C nin daha hızlı olacağını söyleyebilrim.

Aynı matematik algoritmasını kullanılarsa çok fark olmaz. Zaten yazınızın ilerleyen kısımlarında sizde aynısını söylüyorsunuz.

Alıntı yapılan: bunalmis - 07 Haziran 2011, 13:08:11
Elektronikçilerin büyük veri öbekleri üzerinde işlem yapacak programlar yazmaları, structure, array, link list uygulamalarına bulaşmalarını biraz meslekten uzaklaşma olarak görüyorum. (Bırakın bu işleri elektronik eğitimi almış olanlar değil de bilgisayar eğitimi almış olanlar yapsın.)

Kesinlikle katılmıyorum, derleyicinin asm olarak arkada ne yaptınığı biliyorsan işini kolaylaştıran herşeyi kullanman avantajınadır.  Özellikle büyük projelerde bir gereksinimdir. Mesela bende illa asm  olsun diyen elektronikçilerin gelişime kapalı olduklarını düşünüyorum, hep yerlerinde sayarlar, ilerleme kaydedemezler. Millet koptu gidiyor, 1MB flash hafızalı işlemciler var, mükemmel kod optimizasyonu yapan derleyiciler var,
işlemci donanımları bile C'de program yazmaya uygun, siz hala illa asm olsun, C derleyicilerinden daha çok kod optimazyona çalışmak gibi gereksiz işlerle uğraşıyorsunuz.

Aslında mantık basit, 100 satır bir program yazacağıma aynı işlemi 10 satırda yazarım biter.  Burada C dilinin ve profesyonel derleyicinin gücünü kullanırım.

Alıntı yapılan: bunalmis - 07 Haziran 2011, 13:08:11
Dolayısı ile C nin bu tip uygulamalar için gereken pointer, structure vs işlemlerini tıraşlayalım ve Basice denk gelen halini tartışalım.

Zaten C'nin  temel yapı taşı olan pointer, structer, union'ları çıkarırsan C'de basic olur.


     

Knowledge and Experience are Power

muhittin_kaplan

Swordfish i inceleyiniz. Dedikleriniz mevcut Ozaman Basic, C mi oluyor ?

CLR

Alıntı yapılan: muhittin_kaplan - 07 Haziran 2011, 14:44:04
Swordfish i inceleyiniz. Dedikleriniz mevcut Ozaman Basic, C mi oluyor ?

Hayır basic, C olmuyor, bu programa " basic++" denir, C'de ansi c denilen bir kavram vardır ansi c yapısına uygun tüm C derleyicileri hepsini birbirinde derleyebilirsin. Bu swordfish'i başka basic derleyicilerde derleyebilirsen o zaman dediğin olur.
Knowledge and Experience are Power

z

Alıntı yapılan: eemkutay - 07 Haziran 2011, 14:39:30

Alıntı yapılan: bunalmis - 07 Haziran 2011, 13:08:11
Basic ve C aynı 4 math algoritmasını kullanansa bile trigonometrik hesaplamalarda C nin daha hızlı olacağını söyleyebilrim.

Aynı matematik algoritmasını kullanılarsa çok fark olmaz. Zaten yazınızın ilerleyen kısımlarında sizde aynısını söylüyorsunuz.

Alıntı yapılan: bunalmis - 07 Haziran 2011, 13:08:11
Elektronikçilerin büyük veri öbekleri üzerinde işlem yapacak programlar yazmaları, structure, array, link list uygulamalarına bulaşmalarını biraz meslekten uzaklaşma olarak görüyorum. (Bırakın bu işleri elektronik eğitimi almış olanlar değil de bilgisayar eğitimi almış olanlar yapsın.)

Kesinlikle katılmıyorum, derleyicinin asm olarak arkada ne yaptınığı biliyorsan işini kolaylaştıran herşeyi kullanman avantajınadır.  Özellikle büyük projelerde bir gereksinimdir. Mesela bende illa asm  olsun diyen elektronikçilerin gelişime kapalı olduklarını düşünüyorum, hep yerlerinde sayarlar, ilerleme kaydedemezler. Millet koptu gidiyor, 1MB flash hafızalı işlemciler var, mükemmel kod optimizasyonu yapan derleyiciler var,
işlemci donanımları bile C'de program yazmaya uygun, siz hala illa asm olsun, C derleyicilerinden daha çok kod optimazyona çalışmak gibi gereksiz işlerle uğraşıyorsunuz.

Aslında mantık basit, 100 satır bir program yazacağıma aynı işlemi 10 satırda yazarım biter.  Burada C dilinin ve profesyonel derleyicinin gücünü kullanırım.

Alıntı yapılan: bunalmis - 07 Haziran 2011, 13:08:11
Dolayısı ile C nin bu tip uygulamalar için gereken pointer, structure vs işlemlerini tıraşlayalım ve Basice denk gelen halini tartışalım.

Zaten C'nin  temel yapı taşı olan pointer, structer, union'ları çıkarırsan C'de basic olur.
   

Bu durumda küçük projeler için C diye tutturmanın anlamı yok değilmi?

Proje Basicle 50 satırda bitiyorsa Basici dayayıp geçmek lazım.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Erol YILMAZ

Proje küçük olunca Basic ile yazmanın avantajı nedir ?

z

Basic'in avantajı nedir? Tamam söyleyeceğim fakat önce sen söyle. C nin dezavantajı nedir?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Erol YILMAZ

#12
C'nin dezavantajı olarak <küçük projelerde> Orta seviyeli olmasından kaynaklanan,
daha fazla kod yazma ihtiyacı olabilir. Bu da küçük projelerde anlamlı bi dezavantaj olabilir.

Basic pek kullanmadım, gördüğüm kadarı ile yüksek seviyeli bir dil,
Basit projeyi hızlıca bitirmek için az sayıda kodla bile birşeyler yapılabiliyor...
Mcu donanımı bazında olanlarla ilgilenmek yerine direkt hedefe odaklanılabiliyor.
tabi bu avantaj mı sağlıyor ?  bence hayır,
Çünkü Multitasking yapabilecek kadar tecrubeye sahip olmadıktan sonra Basic in
sağladığı yüksek seviyeli fonksiyon ve komut serisi ancak küçük bir mutluluk sağlayabilir.

Kısa olmayan süredir C kodu yazanlar da birçok şeyi <genellikle> pratikleştirmiş oluyor.

z

Kendi değerlendirmeme göre C nin tek dezavantajı var. Öğreninceye kadar  zor bir dil.

Basic ise okunduğunda sanki ingilizce konuşuluyormuş gibi kelime dizilişine sahip. Çok küçük yaştakiler bile kolayca öğrenebiliyor.
Bence Basic'in en büyük avantajı bu.

Bu arada Multitasking illa C için yapılır diye bir şey yok.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Erol YILMAZ

Multitasking BASIC ile yapılamaz demedim ki,
Bunu yapıncaya kadar dedim...