76
PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2- Başlıca Programlama Dillerinin Gelişimi Kaynak: Concepts of Programming Languages by Robert W. Sebesta Resul Kara

PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

PROGRAMLAMADİLLERİNİNPRENSİPLERİ

Bölüm2- BaşlıcaProgramlamaDillerininGelişimi

Kaynak:Concepts ofProgrammingLanguages by RobertW.Sebesta

ResulKara

Page 2: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Bölüm 2 Konular • Zuse’s Plankalkul• Asgari Donanım Programlama:– Yalancı kod(pseudocode)

• IBM 704 ve Fortran• Fonksiyonel Programlama: LISP• Karmaşıklığa Giden İlk Adım:ALGOL 60• İş kayıtlarını bilgisayara geçirmek: COBOL• Zaman Paylaşımı’nın Başlangıcı: BASIC

ResulKara

Page 3: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Bölüm 2 Konular (devam)• Her Şey Herkes İçin : PL/I• İlk iki Dinamik Dil: APL ve SNOBOL• Veri Soyutlama’nın Başlangıcı: SIMULA 67• Ortogonal Tasarım: ALGOL 68• ALGOL’lerin İlk Nesilleri• Mantık tabanlı Programlama: Prolog• En Büyük Tasarım Çabası’nın Hikayesi: Ada

ResulKara

Page 4: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Bölüm 2 Konular (devam)• Nesneye Dayalı Programlama: Smalltalk• Komutsal ve Nesneye Dayalı Özellikleri

Birleştirme: C++• Komut Tabanlı Nesneye Dayalı Dil: Java• Script Dilleri: JavaScript, PHP ve Python• Yeni Milenyum için C Tabanlı Bir Dil: C#• Biçimleme/ Melez Dillerle Programlama

ResulKara

Page 5: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Yaygın Dillerin Soyağacı

ResulKara

Page 6: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Zuse’nin Plankalkül’ü• 1945’de Alman bilim adamı Zuse tarafından geliştirilmiş olmasına rağmen 1972

yılına kadar yayınlanmadı• 1936-1945 yılları arasında Alman bilim adamı Konrad Zuse elektromekanik

rölelerden oluşan karmaşık ve sofistike bilgisayarlardan oluşan bir dizi hazırladı• II. Dünya savaşı sırasındaki bombalamalardan sonra sadece Z4 adlı bilgisayar kaldı.

Zuse Doktora tezi olarak Z4 için hesaplamaları ifade etmek için bir dil geliştirdi. Adına Plankalkül dedi. Program hesabı anlamına geliyor. 1945 tarihli, ancak 1972 yılına kadar yayınlanmamış uzun bir makale yazdı. Makalede Plankalkül'ü tanımladı ve çok çeşitli problemleri çözmek için bu dilde algoritmalar yazdı.

• Plankalkül, veri yapılarındaki gelişmiş özelliklerinden bazılarını içeriyordu• En basit veri türü tek bit, tamsayı ve kayan nokta sayısal türleri bit tipinden

oluşturuldu.• Basit türlere ek olarak Plankalkül, dizileri ve kayıtları (C tabanlı dillerde yapılar-

struct olarak adlandırılır) içeriyordu.• Dil açık bir goto'ya sahip olmasa da, bunun için Ada'ya benzer yinelemeli bir ifade

içermektedir. • Zuse’nin programlarının en ilginç özelliklerinden biri, program değişkenleri

arasındaki mevcut ilişkileri gösteren matematiksel ifadelerdir

ResulKara

Page 7: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Plankalkül Söz Dizimi• A [4]’ün değerini 1 artırıp A [5]'e atayan

aşağıdaki örnek atama ifadesi. V etiketli satır alt simgeler içindir ve S etiketli satır veri türleri içindir. Bu örnekte, 1.n, n bitlik bir tam sayı anlamına gelir:

| A+1=>AV | 4 5 (indisler)S | 1.n 1.n (veri türleri)

ResulKara

Page 8: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Asgari Donanım Programlama:Yalancı Kodlar • 1940'ların sonunda ve 1950'lerin başında

kullanılmaya başlanan bilgisayarlar bugünkü bilgisayarlardan çok daha düşük özelliklere sahipti

• Yavaş, güvenilmez, pahalı ve çok düşük bellek • Donanımı destekleyen yazılım eksikliği

nedeniyle makineleri programlamak zordu• Makine kodu kullanmada yanlış olan ne?

– Zayıf okunabilirlik– Zayıf yazılabilirlik– İfadeleri kodlama zor– Makine eksiklikleri - - indeksleme veya kayan nokta

yok

ResulKara

Page 9: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Yalancı Kodlar: Kısa Kod• Kısa kod 1949’da Mauchly tarafından BINAC

bilgisayarları için geliştirildi• Daha sonra UNIVAC I’e (ABD’de geliştirilen ilk

ticari bilgisayar) uygulandı• UNIVAC 72 bit hafızaya sahip olduğundan 12

adet 6-bit yapı halinde kodlama yapılabiliyordu– İfadeler soldan sağa kodlandı– Değişkenler byte çiftleri halinde kodlandı– Örnek işlemler:

01 – 06 abs value 1n (n+2) nd power02 ) 07 + 2n (n+2) nd root03 = 08 pause 4n if <= n04 / 09 ( 58 print and tab

ResulKara

Page 10: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Yalancı Kodlar: Kısa Kod• X0 = SQRT(ABS(Y0)) ifadesi • 00 X0 03 20 06 Y0 olarak kodlanır. • Burada;– X0 ve Y0 değişkenler– 03: = atama operatörü– 20: karekök– 06: mutlak değer– 00: 12 haneyi tamamlamak için dolgu malzemesi

ResulKara

Page 11: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Yalancı Kodlar: Hızlı Kodlama• Hızlı kodlama 1954’te John Backus

tarafından IBM 701 için geliştirildi.• Aritmetik ve matematiksel fonksiyonlar için

işlemler– Koşullu ve koşulsuz dallanma– Dizilere erişim için otomatik artan

yazmaçlar(registers) – Yavaş – Kullanıcı programı için sadece 700 kelime alan

kalır

ResulKara

Page 12: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Yalancı Kodlar: İlgili Sistemler• UNIVAC Derleme Sistemi– Lideri Grace Hopper olan bir takım

tarafından geliştirildi– Yalancı kodlar makine kodu içine yayıldı

• David J. Wheeler (Cambridge Universitesi)–Mutlak adresleme problemini çözmek için

tekrar konumlandırılabilir adresleri kullanan bir yöntem geliştirildi

ResulKara

Page 13: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

IBM 704 ve Fortran• Fortran 0: 1954 – uygulanmadı• Fortran I : 1957– İndeks yazmaçları ve kayan nokta donanımı olan

yeni IBM 704 için tasarlandı– Gelişim ortamı

• Bilgisayarlar küçük ve güvensiz• Uygulamalar bilimsel• Programlama metodolojisi veya aracı yok• En önemli şey makine verimi

ResulKara

Page 14: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Fortran’ın Tasarım Süreci• Fortran I’in tasarımına ortamın etkisi– Dinamik depolama ihtiyacı yok– İyi dizi kullanımı ve döngü oluşturma-sayma

ihtiyacı– String kullanımı, ondalık aritmetik veya güçlü

girdi/çıktı(ticari) yok

ResulKara

Page 15: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Fortran I Genel Bakış• Fortran’ın uygulanan ilk versiyonu

– İsimler 6 karaktere kadar olabiliyordu– String ifadeler toktu– Değişken adları I, J, K, L, M ve N ile başlayan

değişkenler örtük olarak tam sayı türündeydi ve diğer tüm değişkenler kayan noktalıydı

– i, j ve k karakterleri alt indis olarak kullanıldı– Test sonunda sayan döngü (DO)– Formatlı I/O– Kullanıcı tanımlı alt programlar– Üç yollu seçme ifadesi (aritmetik IF)– Veri türü ifadesi yok

ResulKara

Page 16: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Fortran I Genel Bakış (devam)• Fortran’ın uygulanan ilk versiyonu– Ayrı bir derleme yok– Derleyici 1957 Nisanında piyasaya sürüldü– 400 satırdan daha büyük programlar 704’lerin

zayıf güvenilirliği sebebiyle nadiren doğru olarak derlendi

– Kod çok hızlı– Kısa zamanda geniş kullanıcı kitlesine erişti

ResulKara

Page 17: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Fortran II• 1958’de dağıtıldı– Bağımsız derleme– Hatalar onarıldı

ResulKara

Page 18: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Fortran IV• 1960-1962 arasında geliştirildi– Değişkenler için açık tür deklarasyonu– Mantıksal seçim ifadeleri (if)– Alt program isimleri diğer alt programların

parametresi olabilir– 1966’da ANSI standardı haline gelip Fortran 66

adını aldı ama bu adı yaygın olarak kullanılmadı

ResulKara

Page 19: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Fortran 77• 1978’de yeni bir standart oldu– String türü karakter kullanımı– Mantıksal döngü kontrol ifadeleri– IF-THEN-ELSE ifadesi

ResulKara

Page 20: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Fortran 90

• Fortran 77’denenönemlifarkları–Modüller– Dinamikdiziler– İşaretçiler(pointers)– Özyineleme(recursion)– CASE ifadesi– Parametretürkontrolü

ResulKara

Page 21: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Fortran’ın Gelişimi• Büyük oranda optimize edilmiş derleyiciler

(90 öncesi tüm versiyonlar)– Tüm değişkenlerin türleri ve depoları

yürütme sürecinden (run time) önce belirlenir

• Bilgisayarlar kullanıldığı süre boyunca önemli ölçüde değişti

• Bilgisayar dünyasında lingua franca (uluslar arası ortak dil) olarak nitelendirildi

ResulKara

Page 22: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

! Fortran 95 Example program! Input: An integer, List_Len, where List_Len is less! than 100, followed by List_Len-Integer values! Output: The number of input values that are greater! than the average of all input valuesImplicit noneInteger Dimension(99) :: Int_ListInteger :: List_Len, Counter, Sum, Average, ResultResult= 0Sum = 0Read *, List_LenIf ((List_Len > 0) .AND. (List_Len < 100)) Then! Read input data into an array and compute its sum

Do Counter = 1, List_LenRead *, Int_List(Counter)Sum = Sum + Int_List(Counter)

End Do! Compute the average

Average = Sum / List_Len! Count the values that are greater than the averageDo Counter = 1, List_Len

If (Int_List(Counter) > Average) ThenResult = Result + 1

End IfEnd Do

! Print the resultPrint *, 'Number of values > Average is:', Result

ElsePrint *, 'Error - list length value is not legal'

End IfEnd Program Example

ResulKara

Page 23: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Fonksiyonel Programlama: LISP• İlk fonsiyonel programlama dili, yapay zeka

alanında (AI) ihtiyaç duyulan liste işleme için icat edildi

• LISP Uygulama dili– MIT’de McCarthy tarafından geliştirlidi

• Yapay zeka araştırmaları bazı sebeplerle bir dile ihtiyaç duydu– Diziler yerine listelerdeki uygulama verileri – Sayılar yerine sembolik hesaplama

• Sadece iki veri türü: atom ve liste• Söz dizimi lambda kalkülüs tabanlı

ResulKara

Page 24: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

İki LISP Listesinin Gösterimi(ABCD)

(A(BC)D(E(FG)))

ResulKara

Page 25: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

; LISP Örnek Fonksiyonu; Aşağıdaki LISP fonksiyon kodu iki bağımsız ; listeyi parametre olarak alır, eğer iki liste eşitse True; değilse NIL (false) değeri döndürür

(DEFUN equal_lists (lis1 lis2)(COND((ATOM lis1) (EQ lis1 lis2))((ATOM lis2) NIL)((equal_lists (CAR lis1) (CAR lis2))

(equal_lists (CDR lis1) (CDR lis2)))(T NIL)

)

)

LISP Örnek Kodu

ResulKara

Page 26: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

LISP’in Gelişimi• Çığır açan fonksiyonel programlama– Değişkenlere ve atamalara gerek yok– Kontrol, özyineleme ve koşul ifadeleriyle

sağlanır• Yapay zeka için hala baskın dil• COMMON LISP ve Scheme, LISP’in yeni

versiyonları• ML, Miranda ve Haskell ilgili diller

ResulKara

Page 27: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Scheme• MIT’de 1970’lerin ortalarında geliştirildi• Küçük boyutlu• Statik kapsamın (static scoping) geniş

kullanımı• Fonksiyonlar birinci sınıf varlıklar• Basit söz dizimi (ve küçük ölçekli) onu

eğitimsel uygulamalar için ideal yapar

ResulKara

Page 28: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

COMMON LISP• LISP’in birkaç versiyonunun özelliklerini tek

bir dilde toplaması amaçlanmıştır• Büyük, karmaşık

ResulKara

Page 29: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Karmaşıklığa Giden İlk Adım: ALGOL 60• ALGOL 60 sonraki programlama dilleri üzerinde çok fazla

etkiye sahiptir, bu nedenle herhangi bir tarihsel dil çalışmasında merkezi öneme sahiptir

• ALGOL 60 evrensel bir bilimsel dil geliştirme çabasının sonucu olarak doğdu

• Gelişim ortamı– Fortran, 1957'de bir resmi dil haline geldi– Fortran dışında birkaç dil daha yayınlandı– Carnegie Tech'de Alan Perlis tarafından tasarlanan IT, UNIVAC

bilgisayarları için MATH-MATIC ve UNICODE için iki dil – Dillerin çoğalması kullanıcıların program paylaşımını zorlaştırdı– Ayrıca, yeni dillerin hepsi tekli mimariler etrafında büyüdü, bazıları

UNIVAC bilgisayarlar için bazıları IBM 700 serisi için – Fortran bir aday dil olmasına rağmen, evrensel bir dil olamazdı, çünkü o

zamanlarda yalnızca IBM'e aitti– Taşınabilir dil yok; hepsi makine’ye bağlı– Algoritmaların iletişimini sağlayacak evrensel bir dil yokResulKara

Page 30: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

İlk Tasarım Süreci• Daha önce 1955 yılında GAMM (Applied Mathematics

and Mechanics için Almanca), bir evrensel, makinadan bağımsız algoritmik bir dil tasarlamak için bir komite oluşturdu.

• Bu yeni dilin arzusu kısmen Avrupalıların IBM'in hakim olma korkusundan kaynaklanıyordu.

• Bununla birlikte, 1957 yılının sonlarına gelindiğinde Birleşik Devletler'de birkaç üst düzey dilin ortaya çıkması, GAMM alt komitesinin çabalarının Amerikalıları kapsayacak şekilde genişletilmesini gerektirdi

• ACM ve GAMM tasarıma başladı• Dilin hedefleri

– Dilin söz dizimi matematiksel gösterime yakın olmalı– Algoritma tanımlama kolay olmalı– Makine koduna çevrilebilir olmalı

ResulKara

Page 31: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

ALGOL 58• Tür kavramı biçimlendirildi• İsimler herhangi uzunlukta olabilir• Diziler herhangi sayıda indise sahip olabilir• İndisler parantezler arasına yazıldı• Bileşik ifadeler yazılabiliyor (begin … end) • İfade ayracı noktalı virgül• Atama operatörü :=• if’in else-if cümleciği var• Onu makine bağımlı yapacak I/O yok

ResulKara

Page 32: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

ALGOL 58 Uygulama• Uygulanmadı ama varyasyonları olan MAD

ve JOVIAL uygulandı• IBM ilk başta hevesli olmasına rağmen 1959

ortalarında tüm desteğini çekti

ResulKara

Page 33: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

ALGOL 60 Genel Bakış• Paris’te 6 günlük bir toplantı sonunda

ALGOL 58’in değiştirilmiş şekli oluşturuldu• Yeni özellikler– Blok yapısı (yerel kapsam)– Alt programa iki parametre geçirme yöntemi

ilave edildi, isimle çağırma ve değerle çağırma– Alt programların özyineli olmasına izin verildi – Yığın-dinamik diziler kullanılmaya başlandı– Makineye bağımlılığı sağlayacağı için I/O ve

string kullanımı ALGOL 60’da da kullanılmadı

ResulKara

Page 34: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

ALGOL 60 Gelişim• Başardıkları– Yaklaşık 20 yıl boyunca algoritmaları

yayımlamanın standart yolu olarak kullanıldı– Daha sonraki tüm emirsel diller ALGOL 60

tabanlı: PL / I, SIMULA 67, ALGOL 68, C, Pascal, Ada, C ++, Java ve C #

– İlk makine bağımsız dil– Söz dizimi resmi olarak tanımlanmış (BNF-

Backus-Naur Form) ilk dil

ResulKara

Page 35: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

ALGOL 60 Gelişim (devam)• Başaramadıkları– Özellikle ABD’de asla geniş kullanıcı kitlesine

erişemedi– Sebepler

• Karakter kümesi ve I/O olmayışı programların taşınabilirliğini engelledi

• Esnek değil - - uygulaması zor• Fortran’ın sağlamlaştırılması• Resmi söz dizimi tanımı• IBM desteği yok

ResulKara

Page 36: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

ALGOLÖrnek

ResulKara

Page 37: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

İş Kayıtlarını Bilgisayara Geçirme: COBOL• COBOL'un öyküsü bir anlamda ALGOL 60'ın

tersidir• Diğer programlama dillerinden daha fazla

kullanıcı kitlesine ulaşmasına rağmen, PL / I haricinde sonraki dillere çok az etkisi olmuştur

• Gelişim ortamı– Ticari uygulamalar için derlenen bir dil olan FLOW-

MATIC, 1957'de uygulanmıştı ancak UNIVAC'a özeldi– Bir başka dil, AIMACO, ABD Hava Kuvvetleri

tarafından kullanılmaya başlandı, ancak sadece FLOW-MATIC'in ufak bir varyasyonu idi.

– IBM, adına COMTRAN (COMmercial TRANslator) dediği iş uygulamaları için bir programlama dili tasarladı ancak henüz uygulanmamıştı

ResulKara

Page 38: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

COBOL Tarihsel Geçmiş• FLOW-MATIC tabanlı• FLOW-MATIC’in özellikleri– İsimler gömülü tirelerle 12 karaktere kadar– Aritmetik operatörlere İngilizce isimler verilmişti

(aritmetik ifade yok)– Veri ve kod tamamen ayrı– Her ifadenin ilk kelimesi fiillerdi

ResulKara

Page 39: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

COBOL Tasarım Süreci• İlk Tasarım Toplantısı (Pentagon) – Mayıs 1959• Tasarımın hedefleri

– Basit İngilizce gibi görünmeli – Az güçlü olsa bile kullanımı kolay olmalı– Bilgisayar kullanıcılarının tabanına inebilmeli– Mevcut derleyici problemlerinden kötü etkilememeli

• Tasarım komitesi üyelerinin hepsi bilgisayar üreticileri ve savunma sanayii dallarından oluşuyor

• Tasarım Problemleri: aritmetik ifadeler? İndisler? Üreticiler arasındaki kavgalar

ResulKara

Page 40: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

COBOL Gelişim• Katkılar– Yüksek seviye dilde ilk defa makro imkanı– Hiyerarşik veri yapıları (kayıtlar)– İç içe seçim ifadeleri– Uzun isimler(30 karaktere kadar), tire ile– Ayrı veri kısmı

ResulKara

Page 41: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

COBOL: DoD(Department of Defence-Savunma Departmanı) Etkisi

ResulKara

Page 42: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Zaman Paylaşımının Başlangıcı: BASIC• Dartmout’da Kemeny ve KURTZ tarafından

tasarlandı• Tasarımın amaçları

– Bilimsel çalışma dışında, öğrenciler için kolay kullanım ve öğrenme

– Hoş ve arkadaşcıl olmalı– Ödevler için hızlı geri dönüş– Ücretsiz ve kişisel erişim– Kullanıcının zamanı bilgisayarın zamanından daha

önemli• Mevcut popüler dil: Visual BASIC• Yaygın olarak kullanılan ilk zaman paylaşımlı dil

ResulKara

Page 43: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

ResulKara

BASICÖrnek

Page 44: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Her Şey Herkes İçin: PL/I (PL/1)• Geniş bir uygulama alanında kullanabilmek

amaçlanmıştır• Diğer diller ya bilimsel uygulamalar ya yapay zeka veya

iş uygulamaları gibi belirli bir uygulama alanına odaklanmıştır

• IBM ve SHARE tarafından tasarlandı• 1964’de programlama durumu (IBM’in bakış açısından)

– Bilimsel Programlama• IBM 1620 ve 7090 bilgisayarları• FORTRAN• SHARE kullanıcı grubu

– İş programlama• IBM 1401, 7080 bilgisayarları• COBOL• GUIDE kullanıcı grubu

ResulKara

Page 45: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

PL/I: Geçmiş• 1963’te

– Bilimsel kullanıcılar COBOL’unki gibi ayrıntılı I/O’ya; iş kullanıcıları kayan nokta ve dizilere ihtiyaç duymaya başladı

– Pek çok işyeri iki çeşit bilgisayara, programcı ve destek çalışanına ihtiyaç duymaya başladı. Bu da maliyetleri oldukça artırdı

• Çözüm:– Her iki uygulamayı da yapacak yeni bir bilgisayar

kurmak– Her iki uygulamayı da yapacak yeni bir dil tasarlamak

ResulKara

Page 46: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

PL/I: Tasarım Süreci• 3 x 3’lük komite tarafından 5 ayda

tasarlandı– Üç üye IBM’den, 3 üye SHARE’den

• İlk konsept– Fortran IV’ın uzantısı

• İlk olarak NPL adı verildi (New Programming Language-Yeni Programlama Dili)

• Daha sonra ismi 1965’te PL/I olarak değiştirildi (çünkü İngilterede NationalPhysics Lab. İle karıştırılıyordu)

ResulKara

Page 47: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

PL/I: Gelişimi• Katkıları– İlk birim seviyesinde uyumluluk– İlk istisna idaresi (exception handling)– Switch- seçilebilir özyineleme– İlk işaretçi (pointer) veri türü– İlk dizi kesiti

• Endişeler– Pek çok yeni özellik kötü tasarlandı– Çok büyük ve çok karmaşık

ResulKara

Page 48: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

ResulKara

PL/IÖrnek

Page 49: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

İlk İki Dinamik Dil: APL ve SNOBOL• Ne APL ne de SNOBOL daha sonraki diller

üzerinde çok fazla etki yapmadı• Görünüm ve amaç bakımından, APL ve SNOBOL

tamamen farklıdır• Ancak iki temel özelliğe her ikisi de sahip:

dinamik yazma ve dinamik bellek tahsisi• Her iki dildeki değişkenler tiplenmemiş:

Değişkene değer atandığında tiplenir• Depo tahsisi değişkene değer atandığında

yapılır. Çünkü daha önce gerekli olan depolama miktarını bilmek mümkün değildir

ResulKara

Page 50: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

APL: Bir Programlama Dili• APL (A Programming Language)• IBM’den Ken Iverson tarafından 1960’da donanım tanımlama dili

olarak tasarlandı• APL, programcılar için çok sayıda simge ile belirtilen çok sayıda

güçlü operatöre sahiptir• Başlangıçta IBM yazdırma terminallerinde kullanıldı• APL'in çok fazla operatöre sahip olmasının bir nedeni, diziler

üzerinde çok sayıda birim işlemi sağlamasıdır• Örneğin, herhangi bir matrisin transpozisyonu tek bir operatör ile

yapılır• Geniş operatör koleksiyonu çok yüksek ifade imkânı sağlar, ancak

programların okunmasını zorlaştırır• Programlar hızlı bir şekilde yazılabilse de, bakımı zor olduğundan

kullanıldıktan sonra atılan programlarda kullanılır• Yaklaşık 50 yıldır kullanılmaktadır (günümüzde yaygın olmasa da)• İlk versiyonundan itibaren çok değişikliğe uğramadı

ResulKara

Page 51: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

SNOBOL• SNOBOL 1960'ların başında Bell

Laboratuvarlarında üç kişi tarafından tasarlandı: D. J. Farber, R. E. Griswold ve I.P. Polonsky

• Özellikle metin işleme için tasarlandı• SNOBOL'un amacı metin desen eşleştirmesi için

güçlü işlemler sunmak• İlk uygulamalardan biri, metin editörleri

yazmaktı– Dizi desen eşleştirmesi için güçlü operatörler– Alternatif dillerden daha yavaş (dolayısıyla editör

yazmada çok fazla kullanılmadı)– Belli text işleme konularında hala kullanılıyor

ResulKara

Page 52: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Veri Soyutlamanın Başlangıcı: SIMULA 67• İki Norveçli bilim adamı Kristen Nygaard ve Ole-Johan Dahl, 1962-1964 yılları arasında SIMULA I dilini

geliştirdiler. • İlk amaç bilgisayarları simülasyon için kullanmaktı• SIMULA I sadece sistem simülasyonu için tasarlandı ve ilk olarak 1964 sonlarında bir UNIVAC 1107

bilgisayarına uyguladı• SIMULA I uygulaması başarılı olduktan sonra Nygaard ve Dahl, dilin genel amaçlı uygulamalar için

yararlı olabilmesi için yeni özellikler ekleyerek ve bazı mevcut yapıları değiştirerek dilin genişletilmesi için çabalar başlattı

• Bu çalışmanın sonucu SIMULA 67 1967'de kamuoyuna sunuldu• SIMULA 67, blok yapısı ve kontrol deyimlerini ALGOL 60’dan almıştır• Simülasyon uygulamaları için ALGOL 60'ın ve diğer dillerin birincil eksikliği, altprogramların tasarımıydı• Simülasyon, daha önce durdukları konumda yeniden başlatılmasına izin verilen altprogramlar gerektirir• Bu tür denetimlere sahip altprogramlar co-routinler olarak bilinir• Co-routinlerde çağıran ve çağrılan altprogramların, diğer dillerde sahip oldukları master/slave

ilişkisinden ziyade, birbirleriyle biraz eşit bir ilişkisi vardır• SIMULA 67'de co-routinlere destek sağlamak için sınıf yapısı geliştirildi. Bu önemli bir gelişmeydi,

çünkü veri soyutlama kavramı onunla başlamıştı. Ayrıca, veri soyutlaması, nesne yönelimli programlamanın temelidir

• Öncelikli katkıları– Co-rutinler -> bir tür alt program– Sınıf denen yapılarda uygulandı– Sınıflar veri soyutlamanın başlangıcıdır– Sınıflar yerel veriler ve fonksiyonellik içeren yapılardır

ResulKara

Page 53: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Ortogonal Tasarım: ALGOL 68

• ALGOL 60’ın devamı olup bu dilin bir üst kümesi değildir

• Pek çok yeni fikrin kaynağıdır (her ne kadar dilin kendisi geniş çapta kullanılmayı başaramasa da)

• Tasarım ortogonallik kavramı tabanlıdır– Daha az temel kavram, daha az yöntem

birleştirme

ResulKara

Page 54: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

ALGOL 68 Gelişimi• Katkıları– Kullanıcı tanımlı veri yapıları– Referans türleri– Dinamik diziler ( flex dizi denir)

• Değerlendirme– ALGOL 60’dan daha az kullanım– Daha sonraki diller, özellikle Pascal, C ve Ada

üzerinde güçlü etki

ResulKara

Page 55: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

ALGOL’lerin ilk nesilleri • ALGOL dilleri pek çok dili etkiledi– Pascal– C– Modula/Modula 2– Ada– Oberon– C++/Java– Perl (bir yere kadar)

ResulKara

Page 56: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Pascal - 1971 • Wirth (ALGOL 68 komitesi üyelerinden)

tarafından geliştirildi• Yapısal programlamayı öğretmek için tasarlandı• Küçük, basit ancak bazı eksikleri var:

– Pascal bir öğretim dili olarak tasarlandığından, altprogramlar değişken uzunluklu dizileri parametre olarak alamaz

– Ayrı bir derleyicisi yok– Bu eksiklikler Turbo Pascal gibi pek çok standart

olmayan lehçelerin doğmasına yol açmıştır• En büyük etkisi programlamayı öğretmeye oldu

– 1970’lerin ortalarından 1990’ların sonuna kadar programlama öğretmede çok yaygın kullanılan dildi

ResulKara

Page 57: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

C - 1972• Sistem programlama için tasarlandı(Bell

Lab’da Dennis Richie tarafından)• Esas olarak BCLP ve B’den aynı zamanda da

ALGOL 68’den geliştirildi• Pascal gibi C, daha önce bilinen dil

özellikleri üzerine çok az katkı yaptı, ancak uzun süredir yaygın olarak kullanılıyor

• Başlangıçta sistem programlama için tasarlanmış olmasına rağmen, C çok çeşitli uygulamalar için elverişli bir dildir

ResulKara

Page 58: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

C - 1972• C, birçok uygulama alanında kullanımına izin verecek

yeterli kontrol yapısına ve veri yapılandırma imkanlarına sahiptir

• Aynı zamanda yüksek seviyede ifade gücü sunan zengin operatörler grubuna sahiptir

• C'nin hem sevilen hem de sevilmeyen bir özelliği, eksiksiz yapılan tür denetimi bulunmamasıdır

• Örneğin, C99'dan önceki sürümlerde, parametrelerin türünün kontrol edilmediği fonksiyonlar yazılabiliyordu

• C'yi sevenlerin esnekliği takdir ettikleri; sevmeyenler çok güvensiz buldukları bir özellik

• 1980'lerde popülaritesindeki artışın önemli bir nedeni C için bir derleyicinin yaygın olarak kullanılan UNIX işletim sisteminin bir parçası olmasıydı

ResulKara

Page 59: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Mantık Tabanlı Programlama: Prolog• Mantıksal programlama, hesaplama işlemlerini bir bilgisayara iletmek için

resmi bir mantıksal gösterimin kullanılmasıdır• Predicate calculus, geçerli mantık programlama dillerinde kullanılan

gösterimdir• Mantıksal programlama dillerinde programlama prosedürel değildir• Bu tür dillerdeki programlar tam olarak bir sonucun nasıl hesaplanacağını

belirtmek yerine, sonucun gerekli biçimini ve / veya özelliklerini tanımlar• Mantıksal programlama dillerinde bu kabiliyeti sağlamak üzere istenen

sonuçların hesaplanması için hem ilgili bilgiyi hem de çıkarım sürecini bilgisayara sunmak gerekir

• Kowelski(Edinburg Üniversitesi)’nin yardımıyla Comerauer ve Roussel (Aix-Marsilya Üniversitesi) tarafından geliştirildi

• Biçimsel mantık tabanlı• Yöntemsel değil• Verilen sorguların doğruluğunu anlamak için çıkarımsal bir süreç kullanan

zeki bir veritabanı olarak özetlenebilir• Oldukça verimsiz, küçük uygulama alanı

ResulKara

Page 60: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Mantık Tabanlı Programlama: Prolog• Prolog programları ifadeler topluluğundan oluşur• Prolog'un yalnızca birkaç deyimi vardır, ancak bunlar karmaşık olabilir• Prolog'un yaygın kullanımı akıllı bir veritabanı türüdür• Bir Prolog programının veritabanında iki tür ifade bulunmaktadır: facts

(gerçekler) ve rules (kurallar)• Gerçek ifadelere örnek:

anne (Sabahat, Hüseyin)baba (Galip, Sabahat)

Burada, Sabahat, Hüseyin’in annesi, Galip ise Sabahat’ın babasıdır.• Bir kural ifadesine örnek:

büyükbaba (X, Z): ata (X, Y)ata (Y, Z)

Bu durum, X, Y ve Z değişkenleri için bazı özel değerler için, X'in Y'nin atası olduğu ve Y'nin Z'nin atası olduğu doğruysa, X'in büyükbaba olduğu sonucuna varılabilir.

• Prolog veritabanı, hedef ifadeleri ile etkileşimli olarak sorgulanabilir; bunun bir örneği

baba (Burhan, Demet) Bu, Burhan’ın Demet’in babası olup olmadığını sorar. Böyle bir sorgu Prolog sistemine sunulduğunda, deyimin doğruluğunu belirlemeye çalışmak için çözümleme sürecini kullanır. Sonuç doğruysa “True”, yanlışsa “false” döner

ResulKara

Page 61: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Tarihin En Büyük Tasarım Çabası: Ada• Yüzlerce insan, çok miktarda para ve yaklaşık 8 yıllık dev

tasarım çabası• İlk programcı olarak bilinen Augusta Ada Byron isminden

dolayı Ada olarak isimlendirildi• Ada dili Savunma Bakanlığı (DoD) için geliştirildi• 1974 yılına gelindiğinde, DoD'deki bilgisayarların yarısından

fazlası gömülü sistem idi• Yazılım maliyetleri, öncelikle artan sistem karmaşıklığı

nedeniyle hızla artıyordu. DoD projeleri için 450'den fazla farklı programlama dili kullanıldı ve hiçbiri DoD tarafından standartlaştırılmadı

• Çok sayıda dil kullanılıyordu, ancak bunların hiçbiri aslında gömülü sistem uygulamaları için uygun değildi

• Bu nedenlerden dolayı, 1974'te, Ordu, Deniz Kuvvetleri ve Hava Kuvvetleri, gömülü sistemler için tek bir üst düzey dil geliştirmeyi önerdi.

ResulKara

Page 62: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Ada Gelişim• Katkıları

– Paketler: veri nesnelerinin kapsüllenmesi için araçlar, veri türleri için özellikler ve prosedürleri sağlar (veri soyutlamaya destek)

– İstisna idaresi: programcının çok çeşitli istisnai durumlardan herhangi birinin veya çalışma zamanı hatalarının saptanması durumunda kontrolü ele geçirmesine olanak tanıyan istisna işleme için geniş imkanlar içerir

– Genel program birimleri: Ada'da jenerik program birimleri vardır. Örneğin, sıralanacak veriler için belirtilmemiş bir tür kullanan bir sıralama yordamı yazmak mümkündür. Böyle bir jenerik prosedür, kullanılmadan önce belirtilen bir tip için oluşturulmalıdır; bu, derleyicinin belirtilen tip ile prosedürün bir versiyonunu üretmesine neden olan bir cümle ile yapılırabilirliği, programcılar tarafından çoğaltılan yerine, yeniden kullanılabilecek program birimleri aralığını arttırır.

– Uyumluluk: buluşma mekanizmasını kullanarak, görevler adı verilen özel program birimlerinin aynı anda yürütülmesini sağlar. Rendezvous, görevler arası iletişim ve eşzamanlılık yönteminin adıdır.

• Değerlendirme– Tasarım rekabetçi olduğu için katılım konusunda herhangi bir sınırlama

bulunmamaktadır– Ada dili 1970'lerin sonlarında yazılım mühendisliği ve dil tasarımı kavramlarının

çoğunu içine aldı– Çoğu kişi bunu beklemese de, Ada dili için bir derleyicinin geliştirilmesi zor bir

görevdi. Yalnızca 1985'te, dil tasarımının tamamlanmasından yaklaşık dört yıl sonra gerçekten kullanışlı Ada derleyicileri ortaya çıkmaya başladı

– Ada'nın ilk birkaç yıldaki en ciddi eleştirisi, çok büyük ve çok karmaşık olmasıydı. ResulKara

Page 63: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Ada 95• Ada 95 (1988’de başladı)– Tür derivasyonu ile nesneye dayalı programlama

(OOP) desteği– Paylaşılan veriler için daha iyi kontrol

mekanizması– Yeni uyumluluk özellikleri– Daha esnek kütüphaneler

• Popülerliği DoD’un artık kullanımın istememesiyle ve de C++’ın popülerliği sebebiyle bitti

ResulKara

Page 64: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

ResulKara

Page 65: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Nesneye Dayalı Programlama: Smalltalk• Xerox PARC’dan önce Alan Kay, daha sonra

Adele Goldberg tarafından geliştirildi• Nesne Tabanlı dilin ilk tam uygulaması (veri

soyutlama, miras-inheritance ve dinamik tür bağlama)

• Çığır açan grafiksel kullanıcı ara yüzü (GUI) tasarımı

• Gelişmiş Nesneye Dayalı Programlama (OOP)

ResulKara

Page 66: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

ResulKara

Page 67: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Komutsal ve Nesneye Dayalı Programlamanın Bileşimi: C++• Bell Lab’dan Stroustrup tarafından 1980’de

geliştirildi• C ve SIMULA 67’den evrildi• Nesneye dayalı programlama imkanı kısmen

SIMULA 67’den alındı• İstisna idaresi sağlanıyor• Hem yöntemsel hem nesneye dayalı programlamayı

desteklediğinden büyük ve karmaşık bir dil• Hızla popülerleşti, OOP sayesinde• ANSI standardı 1997 Kasımında onayladı• Microsoft’un versiyonu (.NET ile 2002’de piyasaya

sürüldü): Gözetimli C++– Temsilciler, ara yüzler, çoklu miras yok

ResulKara

Page 68: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

İlgili OOP Dilleri• Eiffel (1992’de Bertrand Meyer tarafından

tasarlandı)– Doğrudan herhangi bir dilden geliştirilmedi– C++’dan daha küçük be basit, fakat yine de

oldukça güçlü– C++’dan daha az popüler çünkü C++ hayranları

zaten C programcıları• Delphi(Borland)– Pascal artı OOP desteği– C++’dan daha zarif ve güvenli

ResulKara

Page 69: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

İlgili OOP Dilleri• Go

– Go programlama dili C tabanlı olmasına rağmen doğrudan değil kısmen C++ ile ilişkilidir

– Google'da Rob Pike, Ken Thompson ve Robert Griesemer tarafından tasarlandı

– İlk tasarım 2007'de başladı ve ilk uygulama 2009'un sonlarında açıklandı

– Go'un ilk motivasyonlarından biri, büyük C++ programlarının Google'da derlenmesindeki yavaşlıktı

– Go dili bazı sözdizimini ve yapılarını C'den alır– Go'nun yeni özelliklerinden bazıları şunlardır:

• (1) Veri bildirimleri sözdizimsel olarak diğer C tabanlı dillerden tersine çevrilir• (2) değişkenler tür adından önce gelirler• (3) değişken bildirimleri, değişken bir başlangıç değeri verilirse çıkarsama

tarafından bir tür verilebilir• (4) fonksiyonlar birden fazla değeri döndürebilir. Go, geleneksel nesne

yönelimli programlamayı desteklemez• Go, bir goto deyimini, işaretçileri, ilişkisel dizileri, arabirimleri (Java ve C# 'dan

farklı olsa da) ve goroutinlerini kullanarak eşzamanlılığı desteklemektedir

ResulKara

Page 70: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Komut Tabanlı Nesneye Dayalı Bir Dil: Java• 1990’ların ilk yıllarında Sun tarafından

geliştirildi– C ve C++ gömülü elektronik cihazlar için yeterli

değildi• C++ tabanlı– Önemli ölçüde basitleştirildi (struct, union,

enum, işaretçi aritmetiği ve C++’ın atama zorunluluklarının yarısı yok)

– Sadece OOP’yi destekliyor– Referans var, ama pointer yok– Applet (küçük uygulamalar) ve bir çeşit

uyumluluk/aynı anda çalışabilme(concurrency) desteği

ResulKara

Page 71: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Java Gelişimi• C++’ın güvenliksiz özellikleri elendi• Aynı anda çalışabilme özellikleri• Küçük uygulamalar (Applets), kullanıcı ara

yüzleri (GUI), veritabanı erişimi için kütüphaneler

• Taşınabilir: Java Sanal Makinesi(JVM) kavramı, JIT derleyiciler

• www sayfalarında yaygın kullanım• Diğer alanlarda kullanım diğer dillerden daha

hızlı arttı• Son versiyonu Java DK 8

ResulKara

Page 72: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Web için Betik(Scripting) Dilleri• JavaScript

– Netscape ve Sun Microsystems’in ortak girişimi– Dinamik HTML dokümanları hazırlamak için Web

programlamada(müşteri tarafında) kullanılıyor– Java’yla sadece benzer söz dizimine sahip olması

bakımından ilgili• PHP

– PHP: Hypertext Preprocessor– Web uygulamalarında kullanılır(sunucu

tarafında);çıktı olarak HTML kodu üretir• Python

– Nesneye Dayalı yorumlanmış bir betik dili– Tür denetimli fakat dinamik olarak yazılır– CGI (Common Gateway Interface)‘yı destekler ve

işleyişi biçimlendirirResulKara

Page 73: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Perl• ALGOL’le sadece C aracılığıyla ilişkili• Scripting dili

– Bir script (dosya) yürütülecek komutları içerir, diğer örnekler: sh, awk, tcl/tk• Larry Wall tarafından geliştirildi• Perl'deki değişkenler statik olarak yazılır ve dolaylı olarak bildirilir• Değişkenler için üç farklı ad alanı vardır:

– değişkenlerin adlarının ilk karakteri ile gösterilir– Tüm skalar değişken adları dolar işaretleri ($) ile başlar– tüm dizi isimleri (@) işareti ile başlar– tüm karma adlar yüzde işaretleriyle başlar (%)– Bu kural Perl’i diğer programlama dillerinden daha okunabilir kılar

• Perl çok sayıda örtük değişken içerir. Bazıları, yeni satır karakterinin belirli biçimi veya Perl parametrelerini depolamak için kullanılır.

• Perl dizileri, diğer dillerin dizilerinden ayıran iki özelliğe sahiptir:– Birincisi, dinamik uzunlukları vardır, bu da yürütme sırasında büyüdükleri ve küçüldükleri

anlamına gelir– İkincisi, diziler seyrek olabilir, yani elemanlar arasında boşluklar olabilir. Bu boşluklar bellekte yer

kaplamaz ve diziler için kullanılan yineleme ifadesi, foreach, eksik öğeler üzerinde yinelemeye başlar.

• Perl, karma olarak adlandırılan ilişkisel dizileri içerir. Bu veri yapıları dizine eklenir ve örtülü olarak kontrol edilen karma tablolardır. Perl sistemi hash işlevi sağlar ve gerektiğinde yapının boyutunu arttırır

• Genel amaçlı bir dil olarak geniş çapta kullanılıyorResulKara

Page 74: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Yeni Milenyum İçin C TabanılıBir Dil: C#• .NET geliştirme platformunun bir parçasıdır• C++, Java ve Delphi tabanlı• Bileşen tabanlı yazılım geliştirme dili sağlar• Tüm .NET dilleri(c#, Visual Basic.NET,

Managed C++, J#.NET ve Jscript.NET) ortak bir sınıf kütüphanesi sağlayan Ortak Tür Sistemi(CTS) kullanırlar

• Geniş çapta kullanılıyor

ResulKara

Page 75: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Biçimleme/Programlama Melez Dilleri• XSLT

– eXtensible Markup Language(XML): bir meta biçimlendirme dili

– eXtensible Stylesheet LanguageTransformation(XSLT): XML dökümanlarını ekran görüntüsüne dönüştürür

– Programlama yapıları (ör, döngüler)• JSP

– Java Server Pages: dinamik Web dokümanlarını destekleyen teknolojiler bütünü

– Servlet: Web sunucusu üzerinde bulunan bir Java programı; Servlet’in çıktısı tarayıcı tarafından görüntülenir

ResulKara

Page 76: PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca ...akademik.duzce.edu.tr/.../resulkara/DersNotlari/fd0dcdbe-0b3c-43be-b0b3-b8a5fcf3608b.pdf• Yapay zeka araştırmaları

Özet • Pek çok önemli programlama dilinin gelişimi,

gelişme ortamı ve değerlendirilmesi• Dil tasarımında güncel konular hakkında fikir sahibi

olmamızı sağladı• Çağdaş dillerin önemli özelliklerini derinlemesine

tartışabilmek için ortam oluşturuldu

ResulKara