Taban Bağımlı Diller [Döküman]
-
İnsanların çılgınlar gibi C# ve Java öğrenme çabasını bugünlerde sanıyorumki hepimiz görüyoruz.
Ama insanların FrameWork ya da JVM kavramlarına aşina olmaması, sadece programları 'çalıştırabilmek için' yapılmış başka programlar olduğunu düşünüyorlar.
Bu gerçekten bir programcı adayı için çok yanlış bir bakış açısı.
Birşeye hükmetmek için tanımanız gerekiyor...
Öncelikle dillerin dağılımına bakalım:
Makine dili (Binary - Hex - Octal) --> Assembly Dilleri(MixAssembly, x64Assembly vs...) --> Yüksek seviyeli diller
Makinalar hepimizin çocukluğundan beri bildiği gibi 1 ve 0 lardan anlarlar, aslında bunlar 2 lik düzende sayılardır.
----------------------
Binary - Hex - Octal hakkında biraz bilgi:
Binary 2 lik sayı tabanını,
Octal 8 lik sayı tabanını,
Hex ise 16'lık sayı tabanını belirtir,
Günümüzde ise 10 luk sayı tabanını kullanıyoruz.
Yani 1001 değeri,
1*2^3 + 0*2^2 + 0*2^1 + 1*2^0 yani,
8 + 1 = 9 değerini verir.
Biraz düşünürseniz mantığı çözmeniz zor olmayacaktır.
----------------------
Makinaların sadece 1 ve 0 lardan anladığını düşünürsek, yazdığımız kodların bir işlemden geçmesi gerektiğini açıkça görebiliriz.
Assembly gibi zor ve makine diline yakın bir programlama dili bile,
----------------------
section .text
global _start
_start:
mov edx,len
mov ecx,msg
mov ebx,1
mov eax,4
int 0x80
mov eax,1
int 0x80
section .data
msg db 'Hello, world!',0xa
len equ $ - msg----------------------
(Yukardaki kodlar ASM de ekrana 'Hello World!' yazdıran kodlardır)
Bir 'Compile' işleminden geçmek zorundadır, ve sonunda bir .EXE ye dönüşebilir.
ASM yazmak bile günümüzde 'Ölümcül derecede meşakatli bir iş' olarak tanımlanmaktadır.
0 ve 1 ler kullanarak program yazmak ise imkansızdır,
Örnek vermemiz gerekirse,
0 veya 1 bir BIT ifade eder.
8 Bit 1 Byte eder.
Burdan ufak bir hesapla:
1MB tutan bir programda,
8 388 608 tane 1 ve/veya 0 bulunmaktadır.
İnsanlar bu ASM denen akılalmaz derecede karışık ve zorlu işlerden kurtulmak için daha 'yüzeysel' diller yaratmışlardır.
Duyduğunuz tüm diller aslında yüksek seviyeli dillerdir.
ASP den PHP ye, C++ dan C ye.
(Tabiiki kendi aralarında seviye farkları vardır)Hepsi İngilizce kelimeleri kendine SYNTAX olarak edinmiştir, ve yapıları İngilizce dilbilgisi kurallarına benzer.
----------------------
Peki SYNTAX ne demek?
Syntax, sözdizim demektir, daha açıklayıcı olması için,
C# da WriteLine yazarken,
Java da Println
C de cout
C++ da printf yazmaktayız, aslında bunların hepsi yazı yazdırmak için kullanılmaktadır,
Sadece diller arasındaki kelime farkları,
Nasıl Türkçe de onaylama,
'Evet' ile yapılıp,
İngilizce de 'Yes' ile yapılıyorsa bu da böyle bir durumdur.
----------------------
Programları compile ettikten (Yani derledikten sonra) çalıştırılabilir bir dosya elde edilir,
Genelde .EXE kullanılır ki bu 'Executible' ın kısaltılmış halidir.
Burda ise karşımıza taşınamama sorunu çıkar,
Yani X marka işlem için derlediğim bir program, Y marka işlemcide çalışmamaktadır.
Neyse ki bu sorun İşletimSistemi tarafından çözülmüştür,
Programlar önce işletim sistemi (bundan sonra OS olarak geçecektir) çekirdeğine komutları gönderir,
OS ise işlemciye işlemciye uygun bir dilde komutları iletir.
Ama OS ler arasındaki fark yıllarca ciddi bir sorun olmuştur, hala da olmaktadır.
Linux'un çekirdeği ile, macOS çekirdeği, ya da Windows çekirdekleri çok farklıdır.
Ve programlar bunların hepsine uygun bir komut gönderemezler,
Derlenen programlar işletim sistemine özeldir.
Programları farklı farklı derlemek çok büyük sorun olmasa bile, zamanla OS çekirdeklerinin sayısı arttıkça programların çok farklı versiyonları çıkmak zorunda kaldı,
(Bunun için en güzel örnek ADOBE nin ürün download sitesidir)
Bu da beraberinde farklı sorunlar getirdi.
Ayrı ayrı derlenen programlarda ufak değişiklikler yapılması gerekiyordu.
Linux de kullanacabileceğiniz bir fonksiyonu Windows'da kullanamıyordunuz.
Bu sorunu çözmek için genç beyinler bir çözüm üretti.
Program VirtualMachine denen aslında ortalıkta olmayan bir çekirdeğe gönderecekti kodları.
Bu çekirdek ise, işletim sistemine komutları gönderecekti.
Ve bu fikri hayata geçirerek şimdiye kadar yapılmış en yaygın programlama dili olan JAVA'yı geliştirdiler.
Taşınabilirliği yanında başka avantajları da vardı bu sistemin,
Çekirdek sayısı 2 ye çıktığı için kontrol ve güvenlik sağlamak daha da kolay hale gelmişti.
Yani JAVA kullanarak donanımlara zarar vermek, virus yazmak imkansız hale gelmişti.(Nerdeyse)
Bu sistemin tek bir dezavantajı bulunuyordu, bu dezavantaj ise program kodlarının 2 çekirdek tarafından işlenmesiydi.
Bu ciddi bir performans kaybına sebep oluyordu.
Program VM'e, VM çekirdeğe gönderiyordu.
Bunun için ise farklı bir sistem yaratılıp sadece ihtiyaç duyulan kod parçasının işlenmesi sağlandı.
Yani çevirme ve compile işlemleri birleştirilerek mükemmel'e çok yakın bir sistem oluşturuldu.
Dil kısa sürede tüm dünya da yayıldı.
JDK'nın OpenSource olması da gelişiminde çok önemli bir rol oynadı.
Kısa sürede SUN Microsystems dünyanın en büyük firmaları arasına girdi.
İşte tam olarak bundan sonra Microsoft konuya el attı.
SUN yaptıysa Microsoft da yapabilirdi bunu.
Microsoft benzer şekilde .NET'i yarattı.
Aslında .NET Framework, JVM nin bir kopyasından başka bir şey değildir.
JAVA'nın bu akılalmaz başarısı birçok dile ilham kaynağı verdi.
Ruby gibi benzer diller yaratıldı.
Ancak arkasında SUN gibi 'güçlü' bir şirket değil, Microsoft gibi 'dünyanın en güçlü şirketi' duruyor.
Bu da .NET'i tercih haline getiriyor.
Microsoft ticari kaygılar sebebi ile sadece kendi işletim sistemi çekirdeği ile iletişim kuruyor,
Bu ise .NET'i JAVA'nın arkasına iten TEK sebep.
Bu noktadan sonra tercih tamamen size kalıyor.
Dökümanı yazmaktaki amacım olayın teknik detaylarını bilmeden bodoslama kod yazma alışkanlığından kurtulmanıza hizmet etmektir.
Umarım yardımcı olabilmişimdir.
Döküman tamamen Musket tarafından TAHRIBAT.COM için yazılmıştır, tüm hakları saklıdır.
-
Teşekkürler, uğraşmış yazmışsın abicim :)
Aldım mesajı :P Zaten biliyordum yahu..
-
mesaj atayım da yarın unutmayayım:)
-
anlamadığım bir şeyi anlamamı sağlamıştır. ama başka sorular sormama yol açmıştır. bunlardan bir tanesi "nesne tabanlı programlama nedir?" sorusudur. nesne tabanlı olunca .net veya sdk yı kullanmak zorundamıyız? ama python nın böyle bir şeye ihtiyaçı yok neden?
-
Esquire bunu yazdı:
-----------------------------
anlamadığım bir şeyi anlamamı sağlamıştır. ama başka sorular sormama yol açmıştır. bunlardan bir tanesi "nesne tabanlı programlama nedir?" sorusudur. nesne tabanlı olunca .net veya sdk yı kullanmak zorundamıyız? ama python nın böyle bir şeye ihtiyaçı yok neden?
-----------------------------Nesne tabanlı programlama (OOP) bunlardan bagımsız bir olaydır bu sentaksla ve yapıyla alakalı bir mantık bütünüdür.Bu mantıkta belli özelliklere dayanan nesneler yaratılır ve işlemlerimizi yada geliştirmelerimizi bu nesneler üzerinden devam ederiz.Nesnelerin birbirinin özelliklerini alabilmesi genişletilebilmesi gibi bir çok fonksiyonel kullanımı vardır malesef bu olayı pratikte görmedikce anlayamazsın.Hani .net yada sdk dedigin olay dille plartforma alakalıdır.Pythonda aslında framework'e ihtiyac duyar aslında ve tamamen nesneye dayalıdır.
-
sandman bunu yazdı:
-----------------------------Esquire bunu yazdı:
-----------------------------
anlamadığım bir şeyi anlamamı sağlamıştır. ama başka sorular sormama yol açmıştır. bunlardan bir tanesi "nesne tabanlı programlama nedir?" sorusudur. nesne tabanlı olunca .net veya sdk yı kullanmak zorundamıyız? ama python nın böyle bir şeye ihtiyaçı yok neden?
-----------------------------Nesne tabanlı programlama (OOP) bunlardan bagımsız bir olaydır bu sentaksla ve yapıyla alakalı bir mantık bütünüdür.Bu mantıkta belli özelliklere dayanan nesneler yaratılır ve işlemlerimizi yada geliştirmelerimizi bu nesneler üzerinden devam ederiz.Nesnelerin birbirinin özelliklerini alabilmesi genişletilebilmesi gibi bir çok fonksiyonel kullanımı vardır malesef bu olayı pratikte görmedikce anlayamazsın.Hani .net yada sdk dedigin olay dille plartforma alakalıdır.Pythonda aslında framework'e ihtiyac duyar aslında ve tamamen nesneye dayalıdır.
-----------------------------şimdi senin dediğin şeyleri daha iyi anlıyorum. o zamanlar hayalini edemiyordum şimdi javada nesnelerle, fonkisyonlarla uğraşmak gerçekten güzel bir şeymiş. :)
-
şimdi hocam yukarda çok hoş açıklamış ama bende olayı biraz daha açık hale getirebilmek umuduyla el atmak istiyorum yüksek müsadenizle.
örneğin nesne yönelimli bir programlama dilinde bir nesne oluşturalım bu nesnenin adı "kisi" olsun
daha sonra bu kisi için özellikler (degiskenler) belirtelim
kisi nesnesinin değişkenleri
cinsiyet (boolean) eğer 1'se erkek 0'sa bayan;
boy (herhangi bir rakamsal değer atanıp ona göre yapılandırılabilir ancak uygun türde veri veri tipi seçilmesi yazılımın hızlılığını artırır)
ten görünüşü= ayarlananan yapıda uygun renk kodu girilebilir
göz rengi = yine ilgili renk kodu
vs
vs
vs
bu şekilde bir nesneye onlarca farklı değişken atanıp daha sonra bu nesne yada değişken üzerinden işlem yapılabilir. Nesne yönelimli programlamanın avantajı budur kısaca...
bu arada yanlış birşey söylersem düzeltiniz lütfen ayrıca bu kadar yazdım ama hocam benimde dil gramerleri konusunda sorunum var kafamda çok şeyi tasarlar ama oturup kod yazamam bu konuda yardıma ve öneriye ihtiyacım var kod yazamadığım için işsizim :'(((((((((((
-
güzel
-
karar verme aşamasında bu dokuman çok işime yaradı
teşekkürler
-
Bu açıklayıc ve yol gösterici bilgileri verdiğiniz için çok teşekkür ederim kardeşim...
-
ancak yeni başlayanlar için java, vb.net veya asp.net gibi platformlar aşırı zor gelebilir. yazılıma ilginiz varsa nerden başlayacağınızı bilmiyorsanız öncelikle genel programlama mantığını öğrenin. fonksiyonlar, sınıflar, değişkenler, sabitler vs. akış diyagramları başlangıç için sorguları, döngüleri vs. kavramanızda bayagı bi yardımcı olur :) ögrendikten sonra ihtiyac bile duymazsınız. bunların hepsini dogru şekilde kullanmayı öğrendikten sonra herhangi bir başlangıç dilini öğrenmeye başlayıp sonrasında kendinizi geliştirebilirsiniz. bu arada döküman için teşekkürler hocam :)