# Yüksek seviye programlama dili

**Yüksek seviye programlama dili**, bilgisayarın donanım detaylarından büyük ölçüde soyutlanmış bir programlama dilidir. Düşük seviye programlama dillerinin aksine; doğal dil unsurlarını kullanabilir, kullanımı daha kolay olabilir veya bilişim sistemlerinin önemli kısımlarını (örn. bellek yönetimi) otomatikleştirerek (hatta tamamen gizleyerek) program geliştirme sürecini düşük seviye dillere kıyasla daha basit ve anlaşılır hâle getirebilir. Bir programlama dilinin ne kadar "yüksek seviye" olduğunu, sunduğu soyutlamanın derecesi belirler.

*Yüksek seviye* kavramı, makine kodu ve assembly kodunun doğasında bulunan, işlemcinin donanım detaylarından soyutlanma derecesini ifade eder. Yüksek seviye diller; yazmaçlar, bellek adresleri ve çağrı yığınlarıyla uğraşmak yerine, yazılımda doğruluğu ve sürdürülebilirliği kolaylaştırmayı amaçlayan değişkenler, diziler, nesneler, aritmetik ve Boole ifadeleri, fonksiyonlar, döngüler, iş parçacıkları, kilitler ve diğer bilgisayar bilimi soyutlamalarıyla ilgilenir. Düşük seviye assembly dillerinin aksine, yüksek seviye dillerde doğrudan makinenin yerel işlem kodlarına çevrilen dil ögeleri ya çok azdır ya da hiç yoktur. Ayrıca dize işleme, nesne yönelimli programlama özellikleri ve dosya girdi/çıktısı gibi ek olanaklar da sunulabilir. Yüksek seviye bir dil, makine detaylarından bağımsız ve yalıtılmış kaynak kodu yazılmasına olanak tanır. Başka bir deyişle, assembly ve makine kodu gibi düşük seviye dillerin aksine, yüksek seviye bir dilde yazılan kod, programcının bilgisi dışında veri hareketlerine yol açabilir. Hangi komutların yürütüleceğine dair kontrolün bir kısmı derleyiciye devredilir.

## Tarihçe

Elektronik bilgisayarların ilk yıllarında programlar genellikle, belirli bir makinenin komut setini birebir yansıtan makine kodu veya assembly dili ile yazılırdı. Yüksek seviye programlama dilleri, programı makinede çalıştırılabilir komutlara çevirme işini bir derleyici veya yorumlayıcıya bırakıp, algoritmaları matematiğe, iş kurallarına veya insan tarafından okunabilen prosedürlere daha yakın biçimlerde ifade etmenin bir yolu olarak ortaya çıktı. 1950'ler ve 1960'larda *otokod* terimi sıklıkla derleyici tabanlı yüksek seviye diller için kullanılıyordu; ilk Otokod sistemlerinin yanı sıra Fortran ve COBOL gibi diller buna örnekti.

Bir bilgisayar için tasarlanan ilk yüksek seviye dilin genel olarak 1940'larda Konrad Zuse tarafından geliştirilen Plankalkül olduğu kabul edilir. Yapılandırılmış veri, atama, koşullu yürütme, yineleme ve alt programlar gibi gelişmiş özellikler içeriyordu ancak Zuse'nin yaşamı boyunca hayata geçirilemedi. Zuse savaş sırasındaki ve savaş sonrasındaki Almanya'da çalıştığı için, çalışmaları dil gelişiminin ana akımından büyük ölçüde koptu; ancak Heinz Rutishauser'in Superplan'ını ve daha az oranda ALGOL ile ilişkili ilk çalışmaları etkiledi.

Geniş çapta benimsenen ilk yüksek seviye dil, 1950'lerde IBM'de John Backus yönetiminde geliştirilen Fortran oldu. Bilimsel ve sayısal hesaplamayı hedefleyen Fortran, programcıların her makine komutunu manuel olarak yönetmeden cebirsel formüller ve döngüler yazmasına imkân tanıdı. Başarısı, derlenen yüksek seviye dillerin verimli programlar üretebileceğini göstermeye yardımcı olurken, programlama zahmetini de büyük ölçüde azalttı.

Aynı dönemde iz bırakan başka diller de ortaya çıktı. John McCarthy tarafından yaratılan Lisp, sembolik liste işlemeyi tanıttı ve lambda kalkülüs kavramlarını pratik programlama dili tasarımının merkezine yerleştirdi. COBOL ticari veri işleme için tasarlandı; İngilizceyi andıran sözdizimi, veri kayıtları ve dosya odaklı ticari uygulamalarla özdeşleşti. Başta ALGOL 60 olmak üzere ALGOL ailesi; blok yapısı, iç içe prosedürler, özyineleme, sözcüksel kapsam, değere göre çağrı ve isme göre çağrı ayrımı ve sözdizimini resmî olarak tanımlamak için Backus-Naur formunun kullanımı gibi yeniliklerle kendinden sonraki dil tasarımlarını etkiledi.

1960'lar ve 1970'ler boyunca yüksek seviye diller farklı programlama yaklaşımlarına evrildi. BASIC, zaman paylaşımlı ve eğitim amaçlı ortamlarda etkileşimli programlamayı erişilebilir kılarken, Pascal yapısal programlama ve eğitime odaklandı. C, yüksek seviye kontrol yapılarını belleğe ve donanıma yönelik düşük seviye erişimle birleştirerek işletim sistemlerinde ve sistem yazılımlarında etkili oldu. Simula, nesne yönelimli programlamanın kalbini oluşturacak sınıf ve nesne modelini tanıttı; sonrasında Smalltalk nesne yönelimli programlamayı mesaj iletimi ve oldukça etkileşimli bir programlama ortamı çerçevesinde geliştirdi.

1980'ler ve 1990'lara gelindiğinde, yüksek seviye dillerin gelişimi giderek artan bir oranda büyük ölçekli yazılım mühendisliğini, grafiksel bilgi işlemi ve İnternet'in büyümesini yansıtmaya başladı. Ada, özellikle savunma sanayisi ve gömülü sistemlerdeki büyük ve uzun ömürlü sistemler için tasarlandı. C++, C dilini sınıflar ve diğer soyutlama mekanizmalarıyla genişleterek, sistem programlama yeteneklerini korurken nesne yönelimli ve jenerik programlamaya olanak sağladı. Perl, Python, Ruby ve PHP gibi betik dilleri ve hızlı uygulama geliştirme dilleri; metin, web veya uygulama programlamada geliştirici verimliliğini ön plana çıkardı. Java, Java sanal makinesi aracılığıyla taşınabilir bayt kodu kullanımını yaygınlaştırırken, JavaScript web tarayıcılarının standart yüksek seviye betik dili hâline geldi.

21. yüzyılda daha yeni yüksek seviye diller; daha güvenli soyutlama, eşzamanlılık, büyük kod tabanları ve mevcut platformlarla uyumlu çalışabilme üzerine yoğunlaştı. C#, .NET platformuyla birlikte gelişti; Scala ve F# nesne yönelimli ve fonksiyonel programlamayı bir araya getirdi; Kotlin ise kısa sözdizimi ve boş değer güvenliği özellikleri eklerken Java ile uyumlu çalışmayı hedefledi. Go; basit sözdizimi, hızlı derleme ve yerleşik eşzamanlılık desteği için tasarlandı. Rust, çöp toplayıcı kullanmadan bellek ve iş parçacığı güvenliği sağlamaya odaklanırken, Swift Apple platformlarına yönelik yazılım geliştirme için modern bir dil olarak tanıtıldı. TypeScript, büyük ölçekli JavaScript uygulamaları geliştirebilmek için JavaScript'i statik tipleme ile genişletti.

## Soyutlama bedeli

Yüksek seviye bir dil; yaygın görevleri standartlaştıran, kapsamlı hata ayıklama imkânları sunan ve sistem mimarisinden bağımsızlığı koruyan özellikler sağlar. Öte yandan düşük seviye bir dil, geliştiricinin genellikle daha zorlayıcı olan daha alt bir soyutlama seviyesinde çalışmasını gerektirse de yüksek seviye dillerle mümkün olmayan optimizasyonlara kapı aralar. Düşük seviye yerine yüksek seviye bir dil kullanmanın getirdiği bu *soyutlama bedeli* gerçektir; ancak pratikte düşük seviye optimizasyonlar, kullanıcı deneyimi düzeyinde performansı nadiren iyileştirir. Yine de hızlı ve verimli çalışması gereken kodlar, yüksek seviye bir dilin kodlamayı ve bakımı kolaylaştırmasına rağmen düşük seviye bir dilin kullanılmasını gerektirebilir. Çoğu durumda, ağırlıklı olarak yüksek seviye dilde yazılmış bir programın kritik kısımları, sıkı zamanlama veya bellek kısıtlamalarına uymak için assembly ile yazılır. Yüksek seviye bir dil için iyi tasarlanmış bir derleyici, assembly diliyle elle yazılabilecek koda denk bir verimlilik üretebilir; hatta daha yüksek seviye soyutlamalar bazen elle yazılmış assembly'nin performansını aşan optimizasyonlara imkân verebilir. Yüksek seviye bir dil belirli bir bilişim sistemi mimarisinden bağımsız tasarlandığından, bu dilde yazılan bir program uyumlu derleyici veya yorumlayıcıya sahip herhangi bir sistemde çalışabilir.

Doğası gereği işlemci donanımına sıkı sıkıya bağlı olan düşük seviye dillerin aksine, yüksek seviye diller gelişmeye devam edebilir. Dahası, en popüler yapıları daha gelişmiş özelliklerle bir araya getirmek üzere var olan dillerden evrilerek yeni yüksek seviye diller doğabilir. Örneğin Scala, Java ile geriye dönük uyumluluğa sahiptir. Bir geliştirici Scala'ya geçse bile daha önce Java'da yazılmış kodlar kullanılmaya devam eder. Bu durum, diller arası geçişi kolaylaştırır ve kod tabanının ömrünü uzatır. Buna karşılık düşük seviye programlar, kendileri için yazıldıkları sistem mimarisinin kullanım ömrünü nadiren aşabilirler.

## Ayrıca bakınız

* Düşük seviye programlama dili
* Soyutlama (bilgisayar bilimi)

## Kaynakça