2 puan yazan GN⁺ 2023-07-10 | 3 yorum | WhatsApp'ta paylaş
  • Object Pascal, okunması kolay modern nesne yönelimli bir dil ile yerel performansı birlikte hedefler ve birden çok platformda bakımı yapılabilir uygulamalar geliştirmek için bir seçenektir
  • Güçlü tipleme, derleme zamanı denetimleri ve çalışma zamanı denetimleri sayesinde ad yazım hataları veya tip uyuşmazlıkları gibi hatalar kullanıcıya ulaşmadan önce daha kolay ayıklanabilir
  • Gerekirse pointer'lar, OS·CPU'ya özgü kodlar ve hatta assembly kullanılabilir, ancak Castle Game Engine assembly olmadan da hızlı kod yaklaşımını tercih eder
  • Windows, Linux, macOS, mobil, konsol ve web dahil geniş bir hedef yelpazesi sunar; ayrıca Castle Game Engine'de motor kodu ile oyun kodu aynı dilde yazılır
  • FPC, Lazarus, Delphi, VS Code entegrasyonu ve çeşitli kütüphane bağlantıları sayesinde Pascal ekosistemi içinde de pratik bir geliştirme akışı kurulabilir

Okunması kolay ve tip güvenli Object Pascal

  • Object Pascal, modern, okunması kolay ve hızlı bir tip güvenli, çapraz platform dili olarak ele alınır
  • Başka nesne yönelimli dilleri biliyorsanız öğrenmesi görece kolaydır; öğrenme kaynağı olarak Modern Object Pascal Introduction for Programmers kullanılabilir
  • Modern nesne yönelimli bir dilden beklenen özelliklere sahiptir
    • sınıflar
    • unit'ler
    • property'ler
    • generic'ler
    • interface'ler
    • reflection
    • closure'lar
  • Sözdizimi, okunması kolay kod üretmeye odaklanır
  • Tip güvenliği için boolean, string, char, set, enum, range gibi ayrı tipler sunar
    • Tamsayının float'a atanması gibi güvenli dönüşümler kolayca işlenir
    • Bunun dışındaki dönüşümler açıkça belirtilmelidir

Derleme ve çalışma zamanında hataları yakalama biçimi

  • Object Pascal, derleme zamanı denetimlerine önem verir
  • Veri yapısını yeniden düzenlemek gibi refactoring işlemlerinde, derleyici düzeltme gereken noktaları görünür kılabilir
  • Ad yazım hataları veya tip uyuşmazlıkları gibi açık hatalar derlemeyi geçmez ve kullanıcıya ulaşmaz
  • Ek çalışma zamanı denetimleri de sunar
    • dizi sınır denetimi
    • tamsayı taşması denetimi
    • assertion
    • bellek sızıntısı denetimi
  • Çalışma zamanı denetimleri, debug sürümünde sorunları yakalamak için kullanılır; performansın kritik olduğu release sürümünde kapatılabilir
  • CGE editor ile derleme yaparken debug / release modları otomatik ayarlanır ve mod, “Run” menüsünden değiştirilebilir
  • İlgili belgeler için What are range and overflow checks (and errors) in Pascal ve Detecting Memory Leaks sayfalarına bakılabilir

Yerel performans ve gerektiği kadar düşük seviye kontrol

  • Object Pascal, yerel koda derlendiği için temel çalışma performansını elde etmek kolaydır
  • Genel uygulamalarda düşük seviye optimizasyona inmek çoğu zaman gerekmez
  • Gerekirse istenen ölçüde düşük seviye özellikler kullanılabilir
    • pointer kullanımı
    • pointer aritmetiği
    • OS·CPU'ya özgü kod yazımı
    • assembly kodu ekleme
  • Castle Game Engine, taşınabilirliği ve kod okunabilirliğini artırmak için hiç assembly kodu içermemesine rağmen hızlı çalışmayı hedefler
  • Derleme de hızlıdır; yeni bir proje ilk açıldığında masaüstü derlemesinin 2.5 saniye, Android derlemesinin ise 10.1 saniye sürdüğü bir örnek vardır

Birden çok platform ve Castle Game Engine'in geliştirme yaklaşımı

  • Object Pascal, çok çeşitli platformları hedeflemek için kullanılabilir
    • masaüstü: Windows, Linux, macOS, Raspberry Pi, FreeBSD, muhtemelen tüm Unix sistemleri
    • mobil: Android, iOS
    • konsol: Nintendo Switch
    • web: WebAssembly, pas2js ile JS
  • Castle Game Engine'in desteklediği platformlar Castle Game Engine platforms supported sayfasında görülebilir
  • Tüm olası hedefler için FPC target platforms ve Delphi target platforms incelenebilir
  • Castle Game Engine'de motor kodu ile oyun kodu aynı dilde yazılır
  • Motor açık kaynaktır ve ihtiyaçlara göre CGE fork edilip değiştirilebilir

Kütüphane ve geliştirme araçları ekosistemi

  • Pascal'da çeşitli alanlara yönelik mevcut kütüphaneler ve unit'ler bulunur
    • veritabanı
    • XML, JSON
    • yapay zeka
    • blokzincir
    • ağ iletişimi
  • C API'si olan mevcut kütüphanelerle kolayca entegre olunabilir veya link verilebilir
    • renderer
    • ses kütüphaneleri
    • fizik motorları
  • Python libraries in Pascal da kullanılabilir
  • Başlıca araç ekosistemi şunlardan oluşur
    • FPC: açık kaynak Free Pascal Compiler
    • Lazarus: FPC tabanlı açık kaynak Pascal IDE
    • Delphi: ticari Pascal derleyicisi ve IDE
    • VS Code: CGE ve Pascal ekosistemindeki çeşitli araçlar VS Code entegrasyonunu açıkça destekler

3 yorum

 
gmong 2023-07-20

Delphi.. ne nostaljiydi. Borland, Delmadang..

 
xguru 2023-07-10

Windows geliştirdiğim dönemde gerçekten de Delphi ile Object Pascal en iyisiymiş gibi geliyordu.

 
GN⁺ 2023-07-10
Hacker News görüşleri
  • Geçmişte Delphi kullanan biriyseniz, Lazarus'u zaten biliyor olma ihtimaliniz yüksek. Lazarus aslında fiilen açık kaynaklı bir yeniden uygulamaya yakın ve Raspberry Pi gibi ARM kartlar dahil neredeyse her yerde yerel olarak çalışıp derlenebiliyor
    Yine de kütüphane kurulumu zahmetli olabildiği için IDE ile modüllerin ve oldukça ilginç eklentilerin kurulumunu otomatikleştirmek amacıyla FpcUp, ardından FpcUpDeluxe oluşturuldu
    https://wiki.freepascal.org/fpcupdeluxe
    FpcUpDeluxe içinde yer alan ücretsiz widget'larla aceleyle hazırlanmış bir gösterge paneli widget demosu da var
    https://ibb.co/9bchx7T
    FpcUpDeluxe, Alpine Linux'ta da çalışıyor; sürüm sayfasından musl sürümünü indirmeniz yeterli. Bu da çok küçük sistemlere bile gösterge paneli koyma olasılığını açıyor. Kod birçok platformda yerel olarak derlenip hızlı çalışıyor ve yorumlayıcıya ya da web tarayıcısına ihtiyaç duymuyor

  • Bir zamanlar Delphi/Pascal'ı ana dilim olarak kullanıyordum ve son 10-20 yıldır bana uyan dili arayıp durdum. Haxe'i de epey uzun süre kullandım ama sonunda “onu makroyla yaparsın” tuzağına düştüğünü hissettim. Makrolar her şeyi yapabilir ama yeterince çoğaldıklarında herkes kendi makro genişletme diliyle program yazmaya başlıyor
    JavaScript'te iyi iyileştirmeler oldu ve hâlâ daha fazlasına ihtiyaç var ama bugünlerde o tarafta da çok iş yapıyorum. Birkaç yıl önce 8 bit AVR kodu yazarken FreePascal'ı yeniden denedim ve gerçekten keyif aldım. Yeni özellikleri kullanınca gerçekten modern bir dil gibi hissettirdi; ayrıca küçük bir alanı hedefleyerek kod yazdığım için standart kütüphaneyi neredeyse hiç kullanmayıp ihtiyacım olan kodu kendim yazmam da hoşuma gitti
    Bu sayede FreePascal'ın yıllar içinde biriktirdiği geriye dönük uyumluluk kaynaklı ad alanı gürültüsünden, örneğin TList, TFPList, TFPGList, TFPGObjectList gibi katmanlardan kaçınabildim. En büyük hayal kırıklığım, FPU ya da emülasyon olmayan hedeflerde derleyicinin sabit kayan noktalı ifadeleri kabul etmemesiydi. Derleme zamanında hesaplanabildiği için buna izin verilse güzel olurdu
    Başka ortamları kullandıktan sonra artık fonksiyonun ortasında değişken tanımlayamamak kısıtlayıcı gelmeye başladı; daha alt düzey işlev kapsamlandırması da olsa iyi olurdu. begin/end ile {} farkını pek önemsemiyorum. Artık büyük/küçük harfe duyarlı dilleri daha çok seviyorum ve türlere harf öneki eklememeyi daha iyi buluyorum. Bunun başlıca nedeni sanırım editörlerin gelişmiş olması. Sözdizimi vurgulama ve gerçek zamanlı linting, bilgiyi ayrı bir alana taşıyıp metin gürültüsünü azaltıyor
    FreePascal'ın halef dili yeni bir başlangıç yaklaşımıyla ortaya çıksa muhtemelen çok heyecanlanırdım. Modern özelliklerin birinci sınıf vatandaş olduğu yeni bir standart kütüphane olsa harika olurdu; emekli olunca belki bir tane yapmayı denerim

    • begin/end ile {} aslında aynı anlama gelmiyor. {} yerel kapsamı tanımlar ama begin/end bunu yapmaz
  • 90'larda Delphi'yi birkaç yıl iş için kullandım ve seviyordum ama Borland'ın ve sonraki sahiplerinin ürünü ve dili sürekli kötü yönetmesinden bıkmıştım. Anders Hejlsberg de Borland'dan ayrılıp Microsoft'a geçti ve C#'ı yaptı; bence kişisel olarak zaman yatırımı yapmak için çok daha iyi bir dil ve mimari

    • C# masaüstü uygulamalarını güvenilir şekilde dağıtmak, Delphi/Lazarus'un ürettiği tek bir exe ile karşılaştırıldığında tam bir kâbusa yakın
  • Bu günlerde kaynak kısıtları yüzünden eğlencesine Pascal kullanıyorum. Eski Borland Turbo Pascal 3.00A CP/M üzerinde çalışıyor ve editör, derleyici ve kütüphanelerin tamamını 64KB içine sığdırıyor
    Etkileşimli kullanım için yeterince hızlı ve düşük seviyeli yardımcı araçlar, basit oyunlar ve türlü hack'ler yazmak için yeterli kod üretiyor. Daha büyük ya da modern ortamlarda Pascal kullanmış değilim ama son deneyimim oldukça tatmin ediciydi, bu yüzden onu dışlamayı düşünmüyorum

    • Turbo Pascal ve sonrasındaki Delphi, programlama dillerinin bana ilk kez gerçekten anlamlı geldiği andı. Sonunda C ve C++ tarafına gittim ama daha ifade gücü yüksek bir dile dönme isteğim hep vardı
      Hâlâ modern Pascal implementasyonları olduğunu bilmiyordum; belki de ilk aşkımla yeniden yakınlaşmam gerekiyordur
    • Henüz denemediyseniz Free Pascal'a bakmanız iyi olabilir. Birçok platformu destekliyor
      CP/M gerekiyorsa siteden destek durumuna bakabilirsiniz; destekliyorsa da şaşırtıcı olmaz. Metin tabanlı UI IDE'si Turbo Pascal'a çok benziyor ve şimşek gibi hızlı. Dil, Turbo Pascal'dan çok daha fazla gelişmiş özelliğe sahip ama istemezseniz bunları kullanmak zorunda değilsiniz
      Geçmişte Windows'ta kısa bir test yaptığımda üretilen ikili dosyalar da C'deki gibi çok küçüktü; basit bir hello world programı 50~60KB'nin altındaydı
    • Ah, Pascal nostaljisi. TRS-80 Model III günlerinde Pascal 80 paketi, New Classics sürümünü almak için ciddi sayılacak 80~100 dolar biriktirmiştim. Fiilen erken bir IDE'ydi ve o zamanın ölçütleriyle oldukça iyiydi. http://www.trs-80.org/pascal-80/
      M-III BASIC geliştirme ortamına göre muazzam bir sıçramaydı diye hatırlıyorum ve 48KB RAM içinde yazdığım oyunlar ile yardımcı araçlar gayet iyi çalışıyordu. Pascal-80 kod tabanına ne olduğunu merak ediyorum. Retro donanım için modern araçlardan daha iyi olması mümkün değil, muhtemelen çok daha kötüdür. “Oh Pascal!” bu dili öğrendiğim kitaptı ve Pascal'ın ticari olarak kullanılmasından birkaç yıl önce olduğundan, başka çok fazla seçenek de yoktu herhalde
  • Bazı gerekçelere katılmak zor. Object Pascal modern bir dil değil. 1998'de öyle sayılabilirdi ama sonrasında büyük bir gelişim yaşamadı; gelen son büyük değişiklik de neredeyse tüm diğer dillere göre daha geç eklenen generics oldu
    FPC'nin özellikle hızlı kod ürettiği de söylenemez ve Object Pascal'ın nesne özellikleri de locality açısından avantajlı değil. Betik dillerden hızlı ama çöp toplayıcılı diller de dahil olmak üzere genel amaçlı önden derlenen dillere kıyasla çoğunlukla daha yavaş
    Buna karşılık ekosistemi harika. İyi kütüphaneler ve araçlar çok, en dikkat çekeni de Delphi klonu Lazarus. FPC ya da Delphi kullananlar dilin modernleşmesi gibi konularla pek ilgilenmeyip işlerini bitirmeye bakan insanlar olageldi. Yine de yeni geliştiricilere çekici geleceğini sanmıyorum; bu yüzden geleceğinin ne olacağını bilmiyorum

    • Generics FPC'ye 17 yıl önce geldi; yani yakın dönem değişikliği sayılmaz. Son dönemde eklenen büyük değişiklik olarak anonim fonksiyonlar ve fonksiyon referansları, yani closure'lar daha uygun bir aday olurdu
      Gerçek performans yeterince iyi ve darboğazı bulursanız gerektiği kadar optimize de edebilirsiniz. C++'a kıyasla “yüksek seviyeli” sınıflar kullandığınızda biraz daha uğraştırıcı olabilir ama imkânsız değil
      Asgari çabayla temel performans istiyorsanız yeni LLVM backend'i de var. Çalışma zamanı kütüphanesi ve FCL gibi her şeyi LLVM backend'iyle derlemeniz gerektiğinden derleyiciyi kaynaktan derlemeniz gerekiyor ama bu birkaç dakika sürüyor. Buna karşılık derleyici çok daha yavaş oluyor ve kişisel olarak performans farkının buna değdiğini düşünmüyorum
    • Bence fazla düşük değerlendiriyorsunuz. Geçmişte C++ kadar hızlı ölçüldüğü benchmark'lar da oldu ve ana kullanım alanı olan yerel GUI uygulamalarında, C# GUI uygulamaları da dahil, bu kadar anında tepki veren başka bir şey görmedim
      O yüzden gerçekte olduğundan 50 kat daha yavaş olduğuna hükmettirten benchmark'ın ne olduğunu merak ediyorum
    • FPC'yi bilmiyorum ama Delphi 7, 10 yıl önce rekabetçi programlamada C++ ile benzer seviyedeydi ve Java'dan yaklaşık 2~3 kat daha hızlıydı
      Burada rekabetçi programlamadan kasıt, çalıştırma başına en fazla 1~3 saniyelik kısa, CPU ağırlıklı, tek iş parçacıklı algoritmik hesaplamalar; JIT için elverişsiz, varsayılan derleyici/çalışma zamanı ayarlarıyla ve harici kütüphane ya da tuning olmadan yürütülen ortamdır. O dönemde genel kabul, C++/Pascal kullanmak ya da Java ile deneyip “time limit exceeded” alınca 200~300 satırlık çözümü C++'ta yeniden yazıp geçirmek yönündeydi
    • Pascal ile C++ arasındaki en büyük fark geliştirici deneyimi
      Pascal, tek geçişli LL(1) derleyici kullanabildiği için milisaniye düzeyinde derleme mümkün oluyor. Edit→Compile→Run döngüsünü 1 saniyenin altında bitiren, REPL benzeri bir deneyim veriyor. Makroları ve yavaş derleme süreleri olan C/C++, geliştirici deneyimi açısından daha kötüydü; en azından benim C yerine Pascal, C++ yerine Delphi öğrenmemin nedeni buydu
    • Ekosistemin harika olduğu görüşüne güçlü biçimde katılmıyorum. Yaklaşık 10 yıl Pascal ile çalıştım ama modern kütüphane eksikliği yüzünden sık sık tıkandım ve sonunda ya çözümü kendim üretmek ya da fikri tamamen rafa kaldırmak zorunda kaldım
  • Neden bunun özellikle gerekli olduğunu anlamıyorum. Eski diller, legacy desteği nedeniyle varlığını sürdürmeli, ama böyle modern özellikleri eski dillere zorla sıkıştırmanın pek anlamını görmüyorum
    Java’yı çok kullanıyorum ama dürüst olmak gerekirse Java 8 sonrası gelen neredeyse tüm özelliklerin eklenmemesi gerektiğini düşünüyorum. Örneğin lambda, Java’da yama gibi duruyor
    Modern özellikler istiyorsan modern bir dil kullanabilirsin. Java ekosisteminde kalmak istiyorsan Kotlin kullanabilirsin. Pascal’ı kelimenin tam anlamıyla onlarca yıldır görmedim ve en son 1980’lerde programladım; o yüzden sadece Java hakkında konuşuyorum ama Pascal’a böyle bir özellik listesi eklemek gülünç görünüyor

    • Lambda yama mı? Gerçekten tek metotlu bir anonim sınıf oluşturmanın daha iyi olduğunu mu düşünüyorsun?
    • Java’da diller arası birlikte çalışabilirlik kolay olduğu için Kotlin gibi bir seçenek daha erişilebilir. Clojure için de aynı şey geçerli. Ama C++ kullanıyorsan başka bir şeye kolayca yükseltebileceğin bir yol yok
      Yine de modern özellikleri eklemenin değeri var. Yeni bir projeye C++ ile başlamayıp Rust gibi modern bir dili seçebilirsin ama zaten yazılmış milyonlarca satır C++ kodu modern özelliklerle iyileştirilebilir. C++11’in oyunu nasıl değiştirdiğine bakmak yeterli
    • O zaman programlama dillerini çok daha sık değiştirmen gerekir. Bu süreci geciktirmek için faydası kanıtlanmış yeni özellikleri ekleyip entegre etmek bana makul geliyor
    • Yakın zamana kadar Java’nın, saçma derecede büyük ekosistemi dışında, 15 yıl önceki Delphi’ye göre pek az üstünlüğü vardı. Tabii o ekosistem her şeyi bastırıyor
      Java dili, dil özellikleri yerine kütüphaneleri kullanma kararı nedeniyle muazzam miktarda boilerplate kod üretti ve bence bu yönelim yanlıştı. Python, Lisp, Haskell’de yapılabilen her şey Java’da da yapılabilir ama tanım gereği brainf*ck’ta da yapılabilir. Gerçek Java çözümlerinin karmaşıklığı, daha fazla özelliğe sahip dillere göre daha yüksek oluyor ve sonunda ya bu dil özelliklerini biraz bozuk biçimde yeniden uyguluyorsun ya da onların yerine geçecek tonla bağımlılık ekliyorsun. Her iki durumda da öğrenmen gereken API yüzeyi sadece büyüyor
    • Rekabetçi JVM dilleri ancak son birkaç yılda ortaya çıktı. Scala çıkmaz bir yoldu, Clojure daha çok bir moda gibiydi, Rhino/JS ise çok sınırlı hedeflere sahipti
      Java’daki iyileştirmeler sayesinde JVM ilgisini korumaya devam etti ve DotNet’i uzak tutabildi; Microsoft’un geçmişi düşünülünce bu iyi bir şeydi
  • Sık sık gözden kaçıyor ama Ada gömülü ekosistemi, statik analiz, hata ayıklama ve hedef desteğinin olgunluğu açısından avantajlara sahip

    • Bence Ada her zaman yeterince değer görmedi. Kişisel olarak bellek güvenliği, standart eşzamanlılık modeli, birim/ölçü tipi desteği ve ön derleme gibi özelliklerini takdir ediyorum
      Ada’nın Pascal benzeri sözdizimi ayrıntılı görünebilir ama okunması zor değil. VHDL de Ada sözdizimine dayalı olduğu için iki dili birlikte kullananlar için daha kolay olabilir
      Swift de bunların bir kısmını karşılıyor ve closure, automatic reference counting, type inference gibi kullanışlı özellikler ekliyor. Ölçü tipleri konusunda emin değilim ama uygulanabilir görünüyor. Yalnız henüz Swift benzeri bir HDL yok gibi görünüyor
    • Ada’nın artık Android ve iOS hedeflerini destekleyip desteklemediğini merak ediyorum. En son baktığımda NDK için derlemenin belirgin bir yolu yok gibi görünüyordu
    • macOS’te başlamak için en kullanıcı dostu seçenek değil
  • Pascal aslında iyi bir dil ve performansı da fena değil. Lisede Basic’ten sonra öğrendiğim ikinci dildi
    Sektörün neden 90’ların sonu ve 2000’lerin başında Python, Ruby, Java, JavaScript’e geri gitmek zorunda kaldığını anlamıyorum

    • Bu konuyu yakın zamanda ele alan bir sunum izledim: https://www.youtube.com/watch?v=Tml94je2edk
      Python, Ruby, JS gibi dinamik tipli dillerin 90’larda neden popülerleştiğini açıklıyor: web sitesi geliştirirken hızlı bir geri bildirim döngüsü sağlıyorlardı ve IDE ya da derleyici gerektirmiyorlardı. O dönemde IDE’ler ve derleyiciler yavaştı ve çoğu zaman ücretsiz de değildi
      Zaten kullanıcıların 56k modemle bağlandığı bir çağda, geliştirme süresini performans artışıyla takas etmenin pek kazancı yoktu. Sunumda ayrıca son 10-20 yılda geliştirme biçimlerinin nasıl değiştiğine ve akımın neden yeniden statik tipleme yönüne kaydığına dair ilginç noktalar da var
    • Bilgisayarlar hızlandı, bellek arttı; demek ki onları kullanacak bir şeyler bulmak gerekiyordu ;-)
      Ayrıca web tarayıcıları popüler bir programlama platformu hâline geldi ve burada çoğunlukla JavaScript kullanıldı. Şimdi de tarayıcı kısmının ötesine geçip web tarayıcısının içine tam teşekküllü bir işletim sistemi sıkıştırmaya çalışıyoruz ve Chrome buna epey yaklaşmış durumda
  • Üniversitenin ilk yılında ilk projem Pascal ile yazılmış bir asansör simülatörüydü ve metin grafikleri kullanıyordu. C ailesi dillerle karşılaştırınca Pascal’da bir tür zarafet vardı ve bu hoşuma gidiyordu
    Bu yüzden bugünlerde Nim’den keyif alıyorum; bildiğim kadarıyla Nim, Ada ve Python’ın yanı sıra Pascal, Modula-3, Oberon, Delphi gibi Wirth ailesi dillerden de etkilenmiş

  • Pascal o kadar da kötü değil ve bence bazı modern programlama dillerine göre gerçek avantajları da var. Elbette kusursuz değil ve eksileri de var
    Bazen DOS programlama için Pascal ve BASIC kullanıyorum; en azından o kullanım için Pascal gayet uygun görünüyor. C de DOS programlamada kullanılıyor ama özellikle real mode için pek iyi görünmüyor
    Linux programlamada genelde C’yi tercih ediyorum ama PostScript de kullanıyorum. Hem C’nin hem de PostScript’in bazı modern dillere kıyasla avantajları olduğunu düşünüyorum. Pascal başka programlar için de kullanılabilir; hatta TeX bile Pascal ile yazılmıştı

    • PostScript’i nerede kullandığını merak ediyorum. Baskı işleri dışında başka amaçlarla kullananları görmek ilginç geliyor