C Programlama diliyle şamatalar

Başlatan z, 23 Ekim 2011, 15:32:04

z

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

mufitsozen

Alıntı yapılan: bunalmis - 03 Kasım 2011, 12:27:56
Sebep?

@gerbay "ben şahsen goto kullanmıyorum" demis. Bu kararin subjektif bir oldugunun gostergesidir, dolayisi ile tartismak abestir.

Musaadelerinizle konuyu bir Nasrettin hoca fikrasi ile baglarsak, adamin biri kosa kosa Nasrettin hocanin yanina gelmis, "hoca hoca" demis, "3 adam ellerinde tepsi tepsi baklava gidiyorlar!" Nasrettin hocada "Bundan banane?" demis, adam onun uzerine aciklamis, "ama" demis "sizin eve gidiyorlar!" Hocada bunun uzerine karsilik vermis "o zaman sanane?".

Yani subjektif bir deger yada kararin elestirisi olmaz. Karari alan sonucunada katlanir. Dermisim!  :-[
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

z

Ne zaman C yada Delphi kodlama ve Goto kelimesi bir arada geçse, goto, C nin doğasına aykırı söylemini duymaktan bıktığım için Gerbay'ın bu konudaki bu tercihinin gerekçesini öğrenmek isterdim.

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

ErsinErce

#153
goto komutunu bende kullanmıyorum hocam,

kullanmama sebebim kodu okumayı zorlaştırıyor,

bir de pipeline'ın boşalmasına sebep oluyormuş diyorlar ama bu konuda süphelerim var goto pipeline'ı nasıl etkiliyor tam bilmiyorum

http://techtrain.microchip.com/x14/arch/Slides/5.swf

GreeN

Alıntı yapılan: bunalmis - 03 Kasım 2011, 11:47:11

C nin doğası dediğiniz ne oluryor ki goto buna aykırı oluyor?

C'nin doğası dediğim olay şudur ;

C'nin yapısından bahsederken içerisindeki kodların belli bir sıraya göre yürütüldüğü , alt yapıların yer aldığı(for vs..) , ve bu yapıların bir girişi bir çıkışının olduğundan olduğundan bahsedebilirmiyiz? Ama goto bu yapılara 2 adet çıkış verir. Bir programcı bir for döngüsü içeriğinden sonra gelen kodları , sonrada diğerlerini , sonra ondan sonra gelenleri alt alta yazdıktan sonra bunların arasında goto ile gezmenin ne kadar takip edilebilir olduğunu sorgular.




Terörü Lanetliyoruz.

z

#155
Alıntı Yap....bir de pipeline'ın boşalmasına sebep oluyormuş ....


Bakın bu cevap, en ama en mantıklı cevap. Fakat bu bile goto kullanımından vageçmeyi gerektirmiyor.
Çünkü goto nun getireceği avantaj (fazladan karşılaştırma vs nin kalkması durumu) pipeline bufferın boşalması durumunda kaybedilecek zamandan daha avantajlı olabilir. Üstelik siz istediğiniz kadar C de goto komutu kullanmayın, yazdığınız C kodların arka planında goto komutları oluşur. (Gerçi ARM CM3 çiplerinin komut setine bazı durumlar için goto ihtiyacını kaldıran yeni komutlar eklenmiştir.)
Fakat her fonksiyon çağrımında, while, for, do benzeri yapılarda siz istesenizde istemesenizde C derleyici goto opcode'unu kullanır. Bu da pipeline mekanizmasının sıfırlanmasına neden olur.

Goto ve türevleri komutlar, pipeline mekanizmasını nasıl kötü etkiler?

Trafikte otobüs gibi yüksekçe bir araç kullandığınızı varsayın.

Yolda giderken önünüzdeki 3...4 aracı yukarıda oturduğunuz için görebilirsiniz.

En öndeki yada aradaki araç frene bastığında erken tepki verip gerekiyorsa sizde hızınızı düşürürsünüz. Böylece gereksiz yavaşlamalar yapmayabiliyorsunuz.

Bu durumda  gözünüzü önünüzdeki 3 araçtan ayırmazsınız.

Fakat siz bir kavşaktan dönünce artık o 3 araç farklı yöne gitmektedir ve siz hafızanızdan bu araçların markasını rengini vs unutup (pipeline bufferi boşaltıp) yeni döndüğünüz yolda önünüze çıkacak yeni üç aracı sırayla hazfızanıza kazımanız gerekecektir.

Bire bir bir örnek olmasa da goto neden pipeline mekanizmasının performansını düşürüre fikir verecektir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mufitsozen

#156
Alıntı yapılan: bunalmis - 03 Kasım 2011, 14:19:19
Ne zaman C yada Delphi kodlama ve Goto kelimesi bir arada geçse, goto, C nin doğasına aykırı söylemini duymaktan bıktığım için Gerbay'ın bu konudaki bu tercihinin gerekçesini öğrenmek isterdim.

Bu konuda en detayli aciklama "Code Complete" kitabindaki "goto" ile alakali bolum.

Ben sahsen goto kullanmanin program yapisini daha karisik ve kontrol edilemez hale getirdigini dusunuyorum. O yuzden goto kullanmamaya calisiyorum. Fakat bazi dongu ve bilhassa hata durumlarini kontrol ederken goto kullanmamak cok daha kotu, okunmasi ve anlasilmasi zor ayni zamanda gereksiz kod yazimini gerektiriyor. O yuzden gerekirse goto'da kullaniyorum. Fakat bazi modern dillerdeki "exception handling" (raise,throw, catch vb) mekanizmalari gotosuzda program yazilmasini sagliyor ornegin python'da goto yok!

yinede C icin konusursak, @gerbayda dahil birisi setjmp ve longjump gibi ozel "goto"lar kullanilmadan ic ice 8 tane fonksiyondan hata oldugunda nasil geri cikarlar anlatabilse cok iyi olurdu :-)

benim bu konudaki 3 kurusluk fikirlerim bu kadar.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

z

Alıntı YapBen sahsen goto kullanmanin program yapisini daha karisik ve kontrol edilemez hale getirdigini dusunuyorum. O yuzden goto kullanmamaya calisiyorum. Fakat bazi dongu ve bilhassa hata durumlarini kontrol ederken goto kullanmamak cok daha kotu, okunmasi ve anlasilmasi zor ayni zamanda gereksiz kod yazimini gerektiriyor. O yuzden gerekirse goto'da kullaniyorum. Fakat bazi modern dillerdeki "exception handling" vb mekazizmalari gotosuzda program yazilmasini sagliyor ornegin python'da goto yok!

İşte bu açıklamaya şapka çıkartıyorum.

Python ne iş yapar?

(Kritik exception rutinlerimi asla C ile yazmam paytonu da bilmem)
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mufitsozen

Alıntı yapılan: bunalmis - 03 Kasım 2011, 15:23:32

İşte bu açıklamaya şapka çıkartıyorum.

Python ne iş yapar?

(Kritik exception rutinlerimi asla C ile yazmam paytonu da bilmem)

sayin @bunalmis bir takim saglik ve is ile isler cok fazla vaktimi almakta oldugundan python konusuna bayramdan sonra daha detayli bir cevap yazmak isterim. Ama kisaca python ve Ruby gibi modern diller program yazmak ve sahip olduklari application libler vasitasi ile cok cabuk, cok detayli ve cok hizli kosan programlar yazmaya firsat verir. Kisaca Wikipediaya bakarsak soyle der"

Python is a general-purpose, high-level programming language[5] whose design philosophy emphasizes code readability.[6] Python claims to "[combine] remarkable power with very clear syntax",[7] and its standard library is large and comprehensive. Its use of indentation for block delimiters is unique among popular programming languages.

Python supports multiple programming paradigms, primarily but not limited to object-oriented, imperative and, to a lesser extent, functional programming styles.

Benim icin en cekici kismida C ile yazilmis olmasi ve C (ve C++) ile cok kolay ve cok dogal ve kolay bir sekilde birlikte calisabilmesidir.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

ErsinErce

Mikroişlemci üzerinde Exception Handling nasıl oluyor acaba bu konuda biraz bilgi verebilir misiniz?
buna sonra değinilecek denmişti ama konuda geçtiğinden biraz yüzeysel de olsa birşeyler anlatırsanız çok sevinirim

mufitsozen

#160
Alıntı yapılan: ErsinErce - 03 Kasım 2011, 15:35:52
Exception Handling nasıl oluyor acaba bu konuda biraz bilgi verebilir misiniz?
buna sonra değinilecek denmişti ama konuda geçtiğinden biraz yüzeysel de olsa birşeyler anlatırsanız çok sevinirim




Insallah bayramdan sonra birseyler yazmaya calisirim ama, vaktiniz var ise "Code Complete" kitabi 2ed "Exception handling: Section 8.4"  okunabilir.



mikroislemcilerde ortami exception handling icin hazirlamak icin en kolay yol, Cdeki setjump ve longjump mekanizmalarini kullanmaktir (bunlar genellikle MACRO olarak yapilirlar) yada signal ve catch gibi sw interruptlar ve stack manipulasyonuda olabilir vs. Isteyenler ASM kullanarakta kendi exception mekanizmalarini kurabilirler. Tabii RTOs ve/veya Multithreaded ortamlarda bu konu cok karisik olabilir.

Aslinda gercekci bir elestiri yapmak gerekirse, program yaziyorum deyipte Code Complete http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=sr_1_1?ie=UTF8&qid=1320327636&sr=8-1 kitabini okumamis, ve okuyupda kutuphanesi (dahada iyisi masasinda) tutmayan birisi benim gorusume gore profesyonel bir programci olmak yolunda daha cok yol kadetmesi lazim gelir.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

z

#161
Exception için interrupt konusunu öncelikle işlemek bitirmek lazım.

Fakat exception ile interrupt arasındaki keskin çizgi, şöyle özetlenebilir;

Interrupt faydalı işler, Exceptionlar tehlikeli ve hatalı durumlar için üretilir. Buna rağmen System Tick Timer bir interrupt olmasına rağmen exception sınıfına sokulmuştur. Çünkü OS yapıları için Tick Timer referansdır ve timer interrupt ürettiyse bunun bir hata gibi algılanması gerekir.

Örnek vermek gerekirse

Exceptionlar: Hard fault, Memory Manegement fault, Bus fault, Usage fault.
Exceptionların yönetimi CPU dadır. NVIC bunlara karışmaz.

Fakat bu farklarının önemli olmadığı durumlar için ortak açıklamalar yapılırken interrupt ve exceptionların her ikisine birden exception da deniyor.

Exceptionlara bulaşmak için interrupt mekanizmasını iyice kavramış olmak ardından da ARM Core registerlere değinmemiz gerekiyor.

Bu nedenle bu aşamada amacımızdan uzaklaşmamalıyız.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

bu konu için ne kadar sabırsızlandığımı anlatamam, Exception yapılarının sebeplerini az çok anladım gibi
Ama nasıl işliyor, işledikten sonra neler oluyor, bu işlemleri ne kadar etkileyebiliyoruz gibi sorular hazırda bekliyor hocam  :)

z

Cortex M3 Basics diye bir kitap var. PDF linki forumda da olacak.

Merak ettiğin soruların cevabını şimdiden bu kitapta bulabilirsin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

http://en.wikipedia.org/wiki/Setjmp.h bu fonksiyon gerçekten çok kullanışlıymış, bilmek iyi oldu çok sağolun mufitsozen hocam

bahsettiğiniz kitap bu mu bunalmis hocam?
http://books.google.com.tr/books?id=mb5d_xeINZEC&printsec=frontcover&hl=tr#v=onepage&q&f=false