Bölüm 2
Ana programlama
dilerinin evrimi
ISBN 0-321-49362-1
Bölüm 2 Konuları
• Minimal donanım programlaması:
Kodumsular (Pseudocodes)
• Bilim adamları ve mühendisler: Fortran
• Fonksiyonel Programlama: LISP
• Algoritma paylaşımı: ALGOL
• İş dünyası: COBOL
• Basit bir dil: BASIC
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-2
Bölüm 2 Konuları (devam)
•
•
•
•
•
İki dinamik dil: APL ve SNOBOL
Veri soyutlamanın başlangıcı: SIMULA 67
ALGOL türevi bazı diller
Mantık Programlaması: Prolog
Güvenli bir dil: Ada
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-3
Bölüm 2 Konuları (devam)
• Nesne yönelimli programlama: Smalltalk
• Komutlu (Impertive) / nesne yönelimli
birleşimi: C++
• Akıllı Cihazların dili: Java
• Skript dilleri: JavaScript, PHP, Python, Ruby
• JAVA kuzeni: C#
• İşaretleme/Programlama Hibrid (Karma)
Dilleri
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-4
Dillerin soy ağacı
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-5
Donanım Programlaması: Kodumsular
(Pseudocodes)
• Makine kodu neden kötü?
–
–
–
–
Okunabilirliği zayıf
Değiştirilebilirliği zayıfPoor modifiability
Ifade yazımı sıkıcı
Makine eksiklikleri: endeksleme ve kayan nokta
yok
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-6
Kodumsular: Kısa Kod
– İfadeler soldan sağa kodlanırdı
– Örnekler:
01 – 06 abs value 1n (n+2)nd power
02 ) 07 +
03 = 08 pause
04 / 09 (
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
2n (n+2)nd root
4n if <= n
58 print and tab
1-7
Fortran 90
• Özellikler
–
–
–
–
–
–
Modüller
Dinamik diziler
İşaretçiler
Özyineleme
CASE komutu
Parametre tip kontrolü
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-8
Fortran Değerlendirmesi
• Biliminsanların / mühendislerin kullandığı
dil
• Eniyileyen derleyiciler
– Değişkenlerin tipi ve yeri çalışma öncesi belli
• Bilişim dünyasının ortak dili
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-9
Fonksiyonel Programlama: LISP
• LISt Processing (Liste İşleme) dili
– MITde by McCarthy tarafından tasarlandı
• Yapay zeka araştırmalarının aşağıdakileri
yapabilen bir dile ihtiyacı vardı
– Dizler yerine, listeler içinde veriyi işlemek
– Sayısal yerine sembolik hesaplama
• Sadece iki veri tipi var: atomlar ve and
listeler
• Sentaks lambda calculus tan esinlendi
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-10
İki tane LISP Listesi dahili temsili
(A B C D)
(A (B C) D (E (F G)))
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-11
LISP Değerlendirmesi
• Fonksiyonel programlamanın öncüsü
– Değişken ve atama yok
– Kontrol sadece özyineleme ve şartlı ifadelerle
• Yapay zekanın önde gelen dillerinden
(diğerleri: Prolog ve türevleri)
• COMMON LISP ve Scheme are LISPin güncey
versiyonları
• Modern fonksiyonel diller: ML, Miranda, ve
Haskell
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-12
Scheme
•
•
•
•
•
MITde 1970 lerde geliştirildi
Küçük
Statik kapsam (static scoping)
Fonksiyonlar birinci sınıf varlık
Basit sentaks, eğitim için ideal
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-13
ALGOL 60
• Başarılar
– 20 yıl boyunca algoritma yayınlamanın yolu
– Sonraki buyurucu (imperative) diller hep ondan
esinlendi
– İlk makine-bağımsız dil
– BNF ile sentaksı resmen belirlenen ilk dil
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-14
ALGOL 60 (devam)
• Başarısızlıklar
– Yaygın bir şekilde kullanılmadı
– Sebepler
• Girdi/çıktı eksikliği programları taşınamaz yaptı
• Çok esnek – implementasyonu zor
• Fortranın yaygın kullanımı ve insanların değişmek
istememesi
• Resmi sentaks tanımı
• IBM desteği olmaması
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-15
COBOL
• Ticaret dili
• Tasarım amaçları
–
–
–
–
Basit İngilizceye benzemeli
Kullanması kolay olmalı
Bilgisayar kullanıcıları sayısını artırmaya yardımcı olmalı
Derleyici teknolojisi ile sınırlu olmamamlı
• Tasarım komitesindekiler: bilgisayar üreticileri ve
Savunma bakanlığı temsilcileri
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-16
COBOL Değerlendirmesi
• Katkıları
–
–
–
–
–
İlk kez üst seviyeli bir dilde makro özelliği
Hiyerarşik veri yapıları
İçiçe seçme komutları
30 karaktere kadar uzun isimler
Ayrı veri bölümü
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-17
COBOL: Savunma bakanlığı etkisi
• ABD Savunma bakanlığının zorunlu kıldığı
ilk dil
• Hala daha ticari uygulamalarda en yaygın
olarak kullanılan dil
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-18
BASIC
• Tasarlayıcılar: Kemeny & Kurtz (Dartmouth)
• Tasarım amaçları:
–
–
–
–
Bilim öğrencisi olmayanların öğrenmesi kolay
Dostça olmalı
Programlar hızlı yazılabilmeli
Kullanıcı zamanı bilgisayar zamnından daha
önemli
• Şimdiki popüler verisyonu: Visual BASIC
• Zaman paylaşımı ile yaygın olarak kullanılan
ilk dil
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-19
İki dinamik dil: APL and SNOBOL
• Özellikleri: dinamik tipleme, dinamik hafıza
ayırımı
• Değişkenler tipsiz
– Değişkenlerin tipi içlerindeki değerden gelir
• Değişkene değer atandığı vakit değişkene
hafıza ayrılır
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-20
APL: A programlama
• Designed by Ken Iverson around 1960
– Ifade gücü yüksek (operatör sayısı çok)
– Programlari okuması zor
•
•
•
•
“Dizi yönelimli” programlama dili
Tek satırlık programlar
Hala daha kullanımda
Örnek program:
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-21
SNOBOL
• String işleme dili. Mucidi: Farber, Griswold,
ve Polensky, Bell Labbs, 1964
• Güçlü string eşleme operatörleri
• Diğer dillere göre daha yavaş
• Hala daha bazı metin işleme gerektiren
yerlerde kullanılıyor.
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-22
Veri soyutlamanın başlangıcı: SIMULA
67
• Sistem benzetimi (simulasyonu) için
Nygaard and Dahl tarafından Norveçte
tasarlandı
• ALGOL 60 ve SIMULA I den esinlendi
• Ana katkıları
– Korutinler – bir tür alt program
– Sınıflar, nesneler, kalıtım
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-23
Pascal - 1971
• Wirth tarafından geliştirildi
• Yapısal programlamayı öğretmek için
tasarlandı
• Küçük, basit, çok yenilik içermiyor
• En büyük etkisi programlama öğretimine
– 1975-2000 arasında programala öğretimi için
kullanılan en yaygın dil
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-24
C - 1972
• Dennis Richie tarafında sistem
programlaması için tasarlandı (Bell Labs)
• BCLP, B, ve ALGOL 68 dillerinden evrimleşti
• Güçlü operatör kümesi
• Zayıf tip kontorlü
• UNIXin yazılım dili
• UNIX aracılığı ile yaygınlaştı
• Birçok kullanım alanı
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-25
Perl
• Skript dili
– İşletim sistemi komutlarını üst düzeyli olarak çalıştırır
– Diğer örnekler: sh, awk, tcl/tk
• Geliştirici: Larry Wall
• Perl değişkenleri statik tipli, dolaylı olarak
tanımlanır
– Üç tane “isim uzayı”. Değişkenin ilk harfine göre bağlı
olduğu isim uzayı anlaşılır.
• Hem genel amaçlı, hem de Web programlaması için
yaygın olarak kullanılır.
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-26
Mantığa Dayalı Programlama: Prolog
• Comerauer ve Roussel (University of AixMarseille) tarafından Kowalskinin yardımı
ile geliştirildi Matematiksel mantığa dayalı
• Prosedürel değil (ne yapılmasını söyleriz,
nasıl yapılmasını değil)
• Özet olarak çıkarsama (inferencing)
kullanarak sorulara cevap veren akıllı bir
veri tabanı diyebiliriz
• Verimlilik problemleri var
• Uygulama alanı: yapay zeka
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-27
Güvenli bir dil: Ada
• Tasarımı için çok kaynak harcandı
• Adını ilk programcı olan Augusta Ada
Byron dan alır
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-28
Ada’nın değerlendirilmesi
• Katkıları
–
–
–
–
Paketler – veri soyutlama desteği
İstisna idaresi - gelişmiş
Genel program birimleri
Eşzamanlılık – görev (task) modeli aracılığı ile
• Yorumlar
– O zamanki yazılım mühendisliği ve dil tasarımı konusunda
ne biliniyorsa ADA’da var
– Dilin karmaşıklığından dolayı ilk derleyiciyi üretmek zor
oldu ve uzun zaman aldı (5 yıl)
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-29
Ada 2012
•
•
•
•
•
Conditional expressions, Case expressions
Iterators
Preconditions and postconditions
Vector/matrix libraries
Task-safe queues
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-30
Nesne Yönelimli Programlama: Smalltalk
• Alan Kay, ve Adele Goldberg tarafından
Xerox PARC’ta geliştirildi
• İlk gerçek nesne yönelimli programlama dili
implementasyonu (veri soyutlama, kalıtım,
dinamik bağlama)
• Grafik arayüzlerin öncülüğünü yaptı
• Nesne yönelimli programlamanın
gelişmesine katkısı oldu
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-31
Komut ve nesne yönelimli programlama
birleşimi C++
• 1980’de Stroustrup tarafından Bell Labs’da
geliştirildi
• C ve SIMULA 67’den evrimleşti
• İstisna mekanizması var
• Büyük ve karmaşık bir dil
• Popülaritesi nesne yönelimli programlama ile
birlikte arttı
• 1997’de ANSI standardı onaylandı
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-32
Benzer nesne yönelimli diller
• Eiffel ( Bertrand Meyer - 1992)
– Direkt oalrak başka bir dilden türemedi
– C++ a göre daha basit ve küçük
– C++ kadar popüler değil (C++ ya geçis daha
kolaydı çünkü birçok programcı C dilini zaten
biliyordu)
• Delphi (Borland)
– Pascal + nesne yönelimli programlama
– C++’ya göre daha “şık” ve güvenli
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-33
JAVA: Komut tabanlı nesne-yönelimli
bir dil
• 1990’ların ilk yarısında Sun’da gömülü
sistemler için geliştirildi
• C++’ya dayalı
– Sadeleştirilmiş ( struct, union, enum, işaretçi
aritmetiği ve zorunlu tip değiştirmelerinin çoğu
yok)
– Sadece nesne yönelimliliği destekler
– Referenslar var ama işaretçiler yok
– Applet desteği var
– Eşzamanlılık desteği var
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-34
Java Değerlendirmesi
• C++’nın birçok güvensiz özeliği JAVA’da
yok
• Eşzamanlılık var
• Veritabanı, Applet, görsel arayüz
kütüphaneleri var
• Taşınabilirdir: Java Sanal Makinesi, Tam
zamanında derleyiciler
• Web programlaması için yaygın kullanım
• Önceki dillere göre yaygın kullanıma en
hızlı erişen dil
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-35
Web için Skript dilleri
• JavaScript
– Istemci tarafı HTML-gömülü dinamik HTML dokumanı yaratmaya yarayan
dil
– Saf tercüme
– Sentaksı JAVA’ya bir miktar benzer, ama ayrı bir dil
• PHP
– Rasmus Lerdorf tarafından tasarlandı
– Sunuca tarafı HTML-gömülü skript dili
– Saf tercüme
• Python
– Nesne yönelimli tercüme ile çalışan skipt dili
– Tip kontrolü var ama dinamik tipli
– CGI programlaması için kullanılabilir
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-36
Web için Skript dilleri
• Ruby
– Japonyada Yukihiro Matsumoto tarafından
tasarlandı
– Perl ve Python yerini almayı amaçladı
– Saf nesne yönelimli dil
– Operatörler metod olarak gerçeklendiği için
tekrar tanımlanabilir
– Saf tercüme ile çalışır
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-37
C-tabanlı başka bir dil: C#
•
•
•
•
.NET geliştirme platformunun bir parçası
Esinlendiği diller: C++ , Java, Delphi
Parçalara dayalı yazılım geliştirme dili
Tüm .NET dilleri (C#, Visual BASIC.NET,
Managed C++, J#.NET, and Jscript.NET) tip
sistemleri ortaktır, böylece tüm dillerden
ayni sınıf kütüphanesi kullanılabilir
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-38
İşaretleme/Programming Hybrid
Languages
• XSLT
– eXtensible Markup Language (XML): Web işaretmeleme dili
– eXtensible Stylesheet Language Transformation (XSTL)
XML dokumanlarını görsel hale dönüştiren bir dil
– Programlama yapıları var (eşleştirme, XML dokumanı
elemanları üzerinde iterasyon)
• JSP
– Java Server Pages: dinamik Web dokümnaları için
teknolojiler kolleksiyonu
– servlet: sunucu üzerinde barınan ve istek üzerine
çalıştırılan JAVA programı; servlet çıktısı tarayıcı üzerinde
görünür
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-39
Özet
• Bazı önemli programlama dillerinin gelişimi
ve özellikleri
• Dil tasarımında dikkat edilmesi gereken
konular
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
1-40
Download

Tarihçe