Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin...

40
ISBN 0-321-49362-1 Bölüm 2 Ana programlama dilerinin evrimi

Transcript of Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin...

Page 1: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

ISBN 0-321-49362-1

Bölüm 2

Ana programlama dilerinin evrimi

Page 2: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-2

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

Page 3: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-3

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

Page 4: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-4

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

Page 5: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5

Dillerin soy ağacı

Page 6: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-6

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 noktayok

Page 7: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-7

Kodumsular: Kısa Kod

– İfadeler soldan sağa kodlanırdı

– Örnekler:

01 – 06 abs value 1n (n+2)nd power

02 ) 07 + 2n (n+2)nd root

03 = 08 pause 4n if <= n

04 / 09 ( 58 print and tab

Page 8: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-8

Fortran 90

• Özellikler

– Modüller

– Dinamik diziler

– İşaretçiler

– Özyineleme

– CASE komutu

– Parametre tip kontrolü

Page 9: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-9

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

Page 10: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-10

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

Page 11: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-11

İki tane LISP Listesi dahili temsili

(A B C D)

(A (B C) D (E (F G)))

Page 12: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-12

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, veHaskell

Page 13: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-13

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

Page 14: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-14

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

Page 15: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-15

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ı

Page 16: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-16

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

Page 17: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-17

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ü

Page 18: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-18

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

Page 19: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-19

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

Page 20: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-20

İ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

Page 21: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-21

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:

Page 22: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-22

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.

Page 23: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-23

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

Page 24: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-24

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

Page 25: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-25

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ı

Page 26: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-26

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ı olaraktanı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.

Page 27: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-27

Mantığa Dayalı Programlama: Prolog

• Comerauer ve Roussel (University of Aix-Marseille) 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

Page 28: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-28

Güvenli bir dil: Ada

• Tasarımı için çok kaynak harcandı

• Adını ilk programcı olan Augusta Ada Byron dan alır

Page 29: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-29

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)

Page 30: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-30

Ada 2012

• Conditional expressions, Case expressions

• Iterators

• Preconditions and postconditions

• Vector/matrix libraries

• Task-safe queues

Page 31: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-31

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

Page 32: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-32

Komut ve nesne yönelimli programlama birleşimi C++

• 1980’de Stroustrup tarafından Bell Labs’dageliş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ı

Page 33: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-33

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

Page 34: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-34

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

Page 35: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-35

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

Page 36: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-36

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

Page 37: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-37

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

Page 38: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-38

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

Page 39: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-39

İş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

Page 40: Bölüm 2 - staff.emu.edu.tr · Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5 Dillerin soy ağacı

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-40

Özet

• Bazı önemli programlama dillerinin gelişimi ve özellikleri

• Dil tasarımında dikkat edilmesi gereken konular