Neden Pascal kullanılıyor
(castle-engine.io)- 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
3 yorum
Delphi.. ne nostaljiydi. Borland, Delmadang..
Windows geliştirdiğim dönemde gerçekten de Delphi ile Object Pascal en iyisiymiş gibi geliyordu.
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
Lazarus ve Delphi'yi en son kullandığımda Unicode zorluydu ve genel olarak ASCII varsayılıyor hissi veriyordu
[0] https://github.com/markmal/freeship-plus-in-lazarus
[1] http://web.archive.org/web/20160128212152/http://hydronship.net/index.php?lang=en
[2] https://sourceforge.net/projects/freeship
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ıyorFreePascal'ı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
{}aslında aynı anlama gelmiyor.{}yerel kapsamı tanımlar ama begin/end bunu yapmaz90'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
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
Hâlâ modern Pascal implementasyonları olduğunu bilmiyordum; belki de ilk aşkımla yeniden yakınlaşmam gerekiyordur
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ı
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
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
O yüzden gerçekte olduğundan 50 kat daha yavaş olduğuna hükmettirten benchmark'ın ne olduğunu merak ediyorum
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, 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
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
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
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
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
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
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
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
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ı