ForumNeuro


Geri Git   ForumNeuro > Bilgisayar Dünyası > Webmaster
Kayıt S.S.S Üye Listesi Ajanda Konuları Okundu İşaretle

Webmaster Web Dizayn ve Webmasterlarla ilgili herşey burada...


Yanıtla
 
LinkBack Forum Araçları Görüntüleme Biçimleri
Eski 26-10-2005, 21:34   #1 (permalink)
Etkisiz Üye
 
Giriş Tarihi: 26-10-2005
Mesajlar: 4
Rep Gücü: 5
Rep Puanı : 22
wrss Yavaş ama emin adımlarla geliyorum
Varsayılan Programlama Temelleri-II

İlk yazımda programlama ile ilgili kavramların üzerinden basitçe bahsettikten sonra örneklerle programlama dillerinin çeşitlerine geçebiliriz.
Sınıflandırmalar bittikden sonraysa ilk yazı da bahsetmiş olduğum derleme ve bağlama olaylarına deneysel bir bakış yapacağız.

Programlama dilleri için farklı biçimlerde sınıflandırmalar bulunuyor. En basit biçimdeki sınıflandırılma, programlama dillerinin makine diline olan yakınlıkları ile yapılan sınıflandırmadır. Bu sınıflandırmaya göre diller 4 e ayrılıyor.

1. Düşük seviye diller - Assembly Dilleri
2. Orta seviye diller - C
3. Yüksek seviye diller - Pascal/Python/Perl/Php/Java...
4. Uygulama Geliştime Ortamları - Visual Basic/Delphi ..
Dikkat edilirse 4. seviye diller aslında programlama dili değiller. Onlar HUO- Hızlı Uygulama geliştirme ortamları. (RAD Rapid Application Development Environment) Bu ortamların özellikleri farklı programlama dillerini, grafik kütüphanelerine bağlayarak, kullanıcıların uygulamalarını programlama geliştirme temellerine hiç bulaşmadan geliştirmelerini sağlamak. Dikkat edin programcı demiyorum, Uygulama geliştirici, veya kullanıcı diyorum. Çünkü RAD ortamlar Programcılık kavramından biraz uzaklaştırma etkisine sahipler. Ancak bunu kimse yanlış anlamasın çok iyi anlamda programlama yapan uygulama geliştiricilerde bulunuyor.

Programlama dillerinin farklı bir sınıflandırılması da hedef programların çeşidine bağlı olarak yapılıyor. Bu sınıflandırmayı şu şekilde verebiliriz:
1. Derlenen diller (Compiled languages): C/Pascal ...
Doğrudan işletim sisteminin çalıştırabileceği şekle çevrilen diller
2. Yorumlanan diller (Interpreted languages): Basic/PHP/Perl...
Yazıldıktan sonra özel bir derleme işlemi geçirmeyen çalışma esnasında satır satır veya tümü birden derlenip çalıştırılan diller. Bu diller ile üretilen programlar çalışmak için bir yorumlayıcı programa ihtiyaç duyarlar.
3. Bayt kodlanan diller (Managed/Byte Coded Languages): Java/Mono/dotNet...
Bir kaç yıl öncesine kadar çok da ön planda sayılmayan bu tür diller günümüzde neredeyse tek geçilen dillerdir denebilir. Bu diller ile yazılan programlar bir kez derlenerek özel bir bayt koda çevirilirler daha sonra da çalıştırılabilmek için özel bir sanal makine yazılımına ihtiyaç duyarlar.
Bir başka ve ne önemli programlama dili sınıflandırma şeklide programlama dillerinin yapılarına göre oluşturulan sınıflandırmadır. Bu sınıflandırmayı yaparken bazı örnekler vererek konuyu güzelleştirmek istiyorum. 1. Mnemonic/Assembly Diller
Intel ASM/ AlphaASM .. Linux sistem çağrıları ve INTEL Assebly ile Merhaba Dünya [k3]
--------------------------------------------------------------------------
section .text
global _start ;must be declared for linker (ld)

msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string

_start: ;tell linker entry point

mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel

mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel

Bu programı linux altında gcc (Gnu Compiler Collection) ile derleyebilirsiniz. Bunun için öncelikle bu kodu hello.S gibi sonu .S ile biten bir biçimde kaydedin ve daha sonra gcc -o hello hello.S komutuyla derleyebilirsiniz.

2. Yapısal Diller (Structered Languages)
C/Pascal/Basic... C ile Yapısal Merhaba dünya

#include

void yaz(char *string) {
printf(string);
}

int main(int argc, char **argv) {

yaz("Merhaba, Dünya!");
return 0;
}

3. Nesneye Yönelimli Diller (Object Oriented languages)
C++/Java/Objective-C/Oject-Pascal... c++ ile OOP HelloWorld

#include

class clsHello {
static void sayHello() {
std::cout << "Hello, Word";
}
};

void main() {
clsHello helloObj
helloObj.sayHello();
}

4. Mantıksal Diller (logic Languages)
Prolog/Mercury/Oz/Mozart...

Mantıksal programlama dillerinin temeli adından da anlaşılacağı gibi Mantığa dayanır. Gerçekler ve kurallar ortaya konur ve sorulara yönelik cevaplar aranır. [k4] Prolog Hello World

hello :- display('Hello World!') , nl .

Daha ilginç bir Prolog Örneği [k5]
--------------------------------------
Simple Prolog L.A. Monash Comp Sci 2/8/89
1: born(charles, elizabeth2, philip).
2: born(anne, elizabeth2, philip).
3: born(andrew, elizabeth2, philip).
4: born(edward, elizabeth2, philip).
5:
6: born(diana, frances, edwardSpencer).
7:
8: born(william, diana, charles).
9: born(henry, diana, charles).
10:
11: ? born(S, elizabeth2, Y) and born(G, M, S).
12:
13:

--- end of parsing ---
born(charles, elizabeth2, philip).
, born(anne, elizabeth2, philip).
, born(andrew, elizabeth2, philip).
, born(edward, elizabeth2, philip).
, born(diana, frances, edwardSpen).
, born(william, diana, charles).
, born(henry, diana, charles).

?born(S, elizabeth2, Y), born(G, M, S)

--- running ---
born(charles, elizabeth2, philip), born(william, diana, charles) yes
born(charles, elizabeth2, philip), born(henry, diana, charles) yes



Bunlardan başka türlerde de programlama dilleri bulunuyor olabilir ancak ana sınıflandırmalar bunlardır.
Şimdi Bunları geçtikten sonra C ile basitçe programlama dili kavramlarını geçelim.
Bunun için yazdığımız Helloworld programını biraz genişleteceğim. hello.c

int main(int argc, char *argv[]) {
sayhello();
}
-------------------------------
sayhello.c

#include

void sayhello() {
printf("Hello, World!");
}

burada gördüğünüz Hello World programımızı 2 ayrı dosya haline getirdik.
Burada size derleme ve bağlama işlemlerinin nasıl yapıldığı göstermek.
Dikkat ederseniz hello.c içinde tanımlanmamış olan sayhello() fonksiyonumuz var. Normal olarak derlemeya çalışırsak

fsniper@fsnipers:~/hello$ gcc hello.c
/tmp/ccmYQrnf.o(.text+0x11): `main' İşlevinde:
: undefined reference to `sayhello'
collect2: ld çıkış durumu 1 ile döndü
fsniper@fsnipers:~/hello$
şeklinde hata alıyoruz. Dikkat ederseniz burada hatayı ld yani dinamik bağlayıcıdan alıyoruz. gcc bu işlemi yaparken derleme ve bağlama işlemlerini transparan olarak yerine getiriyor. Ancak bağlama işlemi sırasında sayhello fonksiyonu için herhangi bir refereans bulunamadığı için hata alıyoruz.
Ancak burada sadece derleme işlemi yapsaydık ve bağlama işlemini sonraya bıraksaydık hiçbir hata almayacaktık.
gcc nin yardımına baktığımızda bağlama işlemini dışarıda bırakmak için -c
parametresini vermemiz gerektiğini görüyoruz. Bundan sonra ayrıca bağlama işlemini de yapmamız gerekiyor. Aşağdaki komutları takip ederseniz öncelikle
hello.c yi derliyoruz. Görüldüğü gibi derleme işleminden sonra nesne koduna ulaşıyoruz. Bu nesne kodu ile diğer nesne kodları ve kütüphaneler bağlandıktan sonra hedef programa ulaşabiliyoruz. Burada sayhello.c dosyası derlenirken gcc nin derleme esnasında bağlama özelliğinden faydalanıldığıda görülebilir.

fsniper@fsnipers:~/hello$ ls
hello.c sayhello.c
fsniper@fsnipers:~/hello$ gcc -c hello.c
fsniper@fsnipers:~/hello$ gcc hello.o -o hello sayhello.c
fsniper@fsnipers:~/hello$ ls
hello hello.c hello.o sayhello.c
fsniper@fsnipers:~/hello$ ./hello
Hello, World!
fsniper@fsnipers:~/hello$

Burada görüldüğü gibi hiç sorunsuz 1 nesne kodu ile yeni derlenen bir programı bağlamış bulunduk. Ancak derleme işlemi esnasında bağlamayı yapmak istemiyor olsaydık

fsniper@fsnipers:~/hello$ gcc -c sayhello.c
fsniper@fsnipers:~/hello$ gcc -c hello.c
fsniper@fsnipers:~/hello$ gcc hello.o sayhello.o -o hello
fsniper@fsnipers:~/hello$ ./hello
Hello, World!
fsniper@fsnipers:~/hello$

şeklindeki komutları kullanıyor olacaktık. Görüldüğü gibi burada gcc bizim için iki adet nesne kodunu birleştiriyor ve çalıştırılabilir kodu ediniyoruz.
Aslına bakılırsa gcc burada bizim için hello.o ve sayhello.o yu statik olarak bağlarken bu programın tam olarak çalışabilmesi için statik olarak libgcc yi dinamik olarak da libc yi bağlıyor. ancak bunlar transparan olarak yapılıyor.
Eğer yapılan işlemleri gcc nin basmasını ve neler yapıldığını görmek istersek
gcc nin -v parameresi ile

fsniper@fsnipers:~/hello$ gcc hello.o sayhello.o -o hello -v
Özellikler /usr/lib/gcc-lib/i486-linux/3.3.4/specs'den okunuyor
../src/configure -v --enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --enable-__cxa_atexit --enable-clocale=gnu --enable-debug --enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc i486-linux
seçenekleriyle yapılandırıldı.
Evre modeli: posix
gcc 3.3.4 (Debian 1:3.3.4-13) sürümü
/usr/lib/gcc-lib/i486-linux/3.3.4/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o hello /usr/lib/gcc-lib/i486-linux/3.3.4/../../../crt1.o /usr/lib/gcc-lib/i486-linux/3.3.4/../../../crti.o /usr/lib/gcc-lib/i486-linux/3.3.4/crtbegin.o -L/usr/lib/gcc-lib/i486-linux/3.3.4 -L/usr/lib/gcc-lib/i486-linux/3.3.4/../../.. hello.o sayhello.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc-lib/i486-linux/3.3.4/crtend.o /usr/lib/gcc-lib/i486-linux/3.3.4/../../../crtn.o
fsniper@fsnipers:~/hello$

şeklinde bir sonuç alıyoruz. Bu çıktıyı açıklayacak kuvveti kendimde bulamadığımı söyleyeyim Görüldüğü gibi aslında programcılık yada gerçek adıyla kodculuk (coder) pek kolay bir iş olmadığı görülüyor. Bu dokümanda anlatamadığım veya bilmediğim daha pek çok konu bulunuyor. umarım "21 günde programcı" olmak istemeyen bu işi ciddi yapmak isteyen kişilere biraz yol gösterebilmişimdir.

Buraya kadar okuyup, bu işkenceye dayanabildiyseniz öncelikle sizi tebrik ediyorum ve ayrıca teşekkür ediyorum.


[k1]Von Neumann ->
[k2]NetBSD ->
[k3]Linux Sistem çağrıları ile Intel ASM hello world ->
[k4]Wikipedia Logical Programming ->
[k5]Örnek Prolog Programı ->
wrss is offline   Alıntı Yaparak Cevapla
Yanıtla


Forum Araçları
Görüntüleme Biçimleri

Gönderme Kuralları
Yeni konular açabilirsiniz --> izin yok
Yanıtlar gönderebilirsiniz --> izin yok
Eklentiler gönderebilirsiniz --> izin yok
Mesajlarınızı düzenleyebilirsiniz --> izin yok

vB koduAçık
SimgelerAçık
[IMG] kodu Açık
HTML kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık


Saat 08:53.


Powered by vB 3.6.7
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.

Tercüme Eden: ReSSaM

Reklam Vermek için networkreklam@gmail.com Adresine e-mail gönderiniz

For Advertising contact networkreklam@gmail.com




Forum
haber dizi izle dizi

ÜYELER İÇİN YASAL UYARI


Forum alanlarını kullanırken; 3.Şahısların kişilik ve gizlilik haklarını ihlal edici iletiler yazmak, Pornografik görüntüler paylaşmak, Hak sahibinden izin almadan MP3, Film, dizi, video, yazılım gibi eserleri doğrudan paylaşmak, ayrıca ilgili lisans sahibi olmayan sitelere erişim için link paylaşmak hukuka ve yasalara aykırıdır. T.C. yasalarına ve hukuka aykırı olan bu tür paylaşımlar site içerisinde tespit edildiği veya hak sahibi tarafından şikayete konu olduğu takdirde, kullanıcı siteden uzaklaştırılacağı gibi, sistem tarafından tutulan kayıtlar, talepleri halinde yasal mercilere verilebilecektir.

HAK SAHİPLERİNE ve YASAL MAKAMLARA

Sitemiz, hukuka, yasalara, telif haklarına ve kişilik haklarına saygılı olmayı amaç edinmiştir. Sitemiz, 5651 sayılı yasada tanımlanan yer sağlayıcı olarak hizmet vermektedir. İlgili yasaya göre, site yönetiminin hukuka aykırı içerikleri kontrol etme yükümlülüğü yoktur. Bu sebeple, sitemiz uyar ve kaldır prensibini benimsemiştir. Telif hakkına konu olan eserlerin yasal olmayan bir biçimde paylaşıldığını ve yasal haklarının çiğnendiğini düşünen hak sahipleri veya meslek birlikleri, hukukiletisim@gmail.com  mail adresinden bize ulaşabilirler. Buraya ulaşan talep ve şikayetler Hukuk Müşavirimiz tarafından incelenecek, şikayet yerinde görüldüğü takdirde ihlal olduğu düşünülen içerikler sitemizden kaldırılacaktır. Ayrıca, mahkemelerden talep gelmesi halinde hukuka aykırı içerik üreten ve hukuka aykırı paylaşımda bulunan üyelerin tespiti için gerekli teknik veriler sağlanacaktır.

video

bedava porno
1 2 4 5 6 7 8 10 11 12 13 14 15 16 22 23 24 25 29 30 31 32 33 34 35 36 38 39 44 45 46 47 48 50 51 52 53 54 59 66 70 77 78 83 84 85 86 87 88 89 90 92 94 101 102 103 104 105 106 107 108 109 110 111 113 114 115 116 119 120 124 125 126 127 128 130 131 132 133 134 135 136 137 138 140 141 143 144 145 146 147 148 149 150 151 152 154 159 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 240 249 250 251 253 257 260 267 268 269 270 272 273 274 275 277 278 279 280 281 283 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 306 307 309 310 312 313 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 346 348 349 351 352 353 354 356 357 358 359 360 361 363 364 365 366 367 369 370 371 372 373 374 402 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 435 436 437 438 439 440 441 442 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 503 508 509 510 511 512 513 514 515 516 517 518 519 521 522 523 525 526 527 528 529 530 531 532 533 534 535 536 537 539 540 541 542 543 544 545 546 548 549 552