APL (programlama dili) - APL (programming language)

APL
paradigma Dizi , işlevsel , yapılandırılmış , modüler
Tarafından tasarlandı Kenneth E.Iverson
geliştirici Larry Breed , Dick Lathwell , Roger Moore ve diğerleri
İlk ortaya çıktı 27 Kasım 1966 ; 54 yıl önce ( 1966-11-27 )
kararlı sürüm
ISO/IEC 13751:2001 / 1 Şubat 2001 ; 20 yıl önce ( 2001-02-01 )
Yazma disiplini Dinamik
Platformu Çapraz platform
Lisans Tescilli , açık kaynak
Başlıca uygulamalar
  • APL\360
  • APL\1130
  • APL*Artı
  • Keskin APL
  • APL2
  • Diyalog APL'si
  • NARS2000
  • APLX
  • GNU APL'si
Tarafından etkilenmiş
matematiksel gösterim
Etkilenen

APL (adını A Programming Language adlı kitaptan almıştır ) 1960'larda Kenneth E. Iverson tarafından geliştirilen bir programlama dilidir . Merkezi veri tipi çok boyutlu dizidir . Çoğu işlevi ve operatörü temsil etmek için çok çeşitli özel grafik sembolleri kullanır ve bu da çok kısa kodlara yol açar. Kavram modelleme, elektronik tablolar , fonksiyonel programlama ve bilgisayar matematik paketlerinin geliştirilmesinde önemli bir etkisi olmuştur . Ayrıca diğer birçok programlama diline de ilham kaynağı olmuştur.

Tarih

matematiksel gösterim

Dizileri manipüle etmek için bir matematiksel gösterim , 1957'de Harvard Üniversitesi'nde başlayarak Kenneth E. Iverson tarafından geliştirildi . 1960 yılında IBM için çalışmaya başladı ve burada Adin Falkoff ile birlikte bu gösterimi geliştirdi ve 1962'de A Programming Language adlı kitabında yayınladı . Önsöz, öncülünü belirtiyor:

Uygulamalı matematik, büyük ölçüde, çeşitli fonksiyonların tam veya yaklaşık değerlerini hesaplamak için açık prosedürlerin tasarımı ve analizi ile ilgilidir. Bu tür açık prosedürlere algoritmalar veya programlar denir . Programların tanımlanması için etkili bir notasyon dikkate değer bir sözdizimsel yapı sergilediğinden, programlama dili olarak adlandırılır .

Bu gösterim, IBM içinde, Burroughs B5000 gibi bilgisayar sistemleri hakkında kısa araştırma raporları ve yığın makineleri ve kayıt makinelerinin IBM tarafından gelecek bilgisayarlar için değerlendirildiği yığın mekanizması için kullanıldı.

Iverson da bölüm bir taslak onun gösterim kullanılan Dili Programlama A diye birlikte yazdığı bir kitap için yazılmıştır, Fred Brooks , Otomatik Veri İşleme 1963 yılında yayınlanan olacağını.

1979'da Iverson , APL üzerindeki çalışmaları nedeniyle Turing Ödülü'nü aldı .

Bir bilgisayar programlama diline geliştirme

1962 gibi erken bir tarihte, notasyonu eksiksiz bir bilgisayar sistemini tanımlamak için kullanmaya yönelik ilk girişim, Falkoff'un William C. Carter ile daha sonra IBM System/360 ailesi olacak olan makineler için talimat setini standartlaştırma çalışmalarını tartışmasından sonra gerçekleşti .

1963 yılında, IBM Systems Research Institute'de çalışan Herbert Hellerman, gösterimin bir bölümünü bir IBM 1620 bilgisayarında uyguladı ve özel bir lise dersinde öğrenciler tarafından seri toplama ile aşkın fonksiyonların hesaplanmasında kullanıldı. Öğrenciler kodlarını Hellerman'ın laboratuvarında test ettiler. Notasyonun bir bölümünün bu uygulamasına Kişiselleştirilmiş Dizi Çevirici (PAT) adı verildi.

1963'te, tümü IBM'de çalışan Falkoff, Iverson ve Edward H. Sussenguth Jr. , gösterimi IBM System/360 serisi makine mimarisinin ve işlevselliğinin resmi bir açıklaması için kullandılar ve bu, IBM Systems Journal'da yayınlanan bir makaleyle sonuçlandı . 1964. Bu yayınlandıktan sonra, ekip dikkatlerini gösterimin bir bilgisayar sisteminde uygulanmasına çevirdi. Bu uygulama odağının motivasyonlarından biri, 1964'te IBM tarafından satın alınan bir eğitim şirketi olan Science Research Associates'te yeni görevler üstlenen John L. Lawrence'ın ilgisiydi. Lawrence, Iverson ve grubundan, dili bir araç olarak kullanmasına yardım etmelerini istedi. eğitimde bilgisayar geliştirmek ve kullanmak.

Sonra Lawrence M. Breed ve Philip S. Abrams Stanford Üniversitesi, IBM Araştırma de takım katıldı, onlar programlanmış bir uygulama üstünde onların önceki çalışmalarına devam FORTRAN IV için yapıldığını gösterimin bir kısmı için IBM 7090 bilgisayar üzerinde çalışan IBSYS işletim sistemi. Bu çalışma 1965 sonlarında tamamlandı ve daha sonra IVSYS (Iverson sistemi için) olarak adlandırıldı. Bu uygulamanın temeli, Abrams tarafından 1966'da Stanford Üniversitesi Teknik Raporunda "An Interpreter for Iverson Notation"da ayrıntılı olarak açıklanmıştır, bunun akademik yönü resmi olarak Niklaus Wirth tarafından denetlenmiştir . Hellerman'ın daha önceki PAT sistemi gibi, bu uygulama APL karakter setini içermiyordu, ancak işlevler ve operatörler için özel İngilizce ayrılmış kelimeler kullandı. Sistem daha sonra zaman paylaşımlı bir sisteme uyarlandı ve Kasım 1966'ya kadar zaman paylaşım modunda çalışan IBM System/360 Model 50 bilgisayarı için yeniden programlandı ve IBM'de dahili olarak kullanıldı.

Donanım

APL Yunanca karakterlerini içeren IBM yazı topları ve yazı çarkı.
APL yazma öğesi yazıcı kafası takılıyken IBM 2741 klavye düzeninin bir programcının görünümü

Katot ışın tüpü ( CRT ) terminallerinin yaygın kullanımından önce, APL'yi etkin bir şekilde kullanma becerisindeki önemli bir gelişme, üzerinde tüm özel APL karakterlerinin bulunduğu özel bir IBM Selectric daktilo değiştirilebilir yazma öğesinin geliştirilmesiydi. Bu, IBM 1050 ve IBM 2741 terminali gibi Selectric daktilo ve yazma elemanı mekanizması kullanan kağıt baskı terminali iş istasyonlarında kullanıldı . Tuşa basıldığında hangi APL karakterlerinin girileceğini ve yazılacağını göstermek için normal tuşların üzerine tuş başlıkları yerleştirilebilir. İlk kez, bir programcı Iverson'ın notasyonunda kullanıldığı gibi uygun APL karakterlerini yazıp görebilir ve bunların garip İngilizce anahtar kelime temsillerini kullanmak zorunda kalmaz. Falkoff ve Iverson, 1964 yılının sonlarında tasarlanan 987 ve 988 numaralı özel APL Selectric yazma elemanlarına sahipti, ancak bunları kullanmak için hiçbir APL bilgisayar sistemi mevcut değildi. Iverson, APL karakter seti için bir IBM Selectric yazma öğesi kullanma fikrine ilham kaynağı olarak Falkoff'u gösterdi.

Birçok APL sembolü, Selectric yazma öğesindeki APL karakterleriyle bile, mevcut iki öğe karakterinin aşırı vurgulanmasıyla yazılması gerekiyordu. Bir örnek, bir deltadan (shift-H) ve bir Sheffer konturundan (shift-M) yapılması gereken not yükseltme karakteridir . APL karakter kümesi, harfler büyük harflerle (büyük harflerle) sınırlandırıldığında bile, yazma öğesinde izin verilen 88 karakterden çok daha büyük olduğundan bu gerekliydi.

Ticari kullanılabilirlik

İlk etkileşimli APL oturum açma ve bir APL çalışma alanı oluşturma, 1966 yılında Larry Breed tarafından Yorktown Heights, New York'ta APL'nin evi olan Thomas J. Watson Araştırma Merkezi yakınlarındaki IBM Mohansic Labs'ta bir IBM 1050 terminali kullanılarak yapıldı .

IBM, APL'nin pazara sunulmasından başlıca sorumluydu. APL'nin halka açık ilk sürümü 1968'de IBM 1130 için yayınlandı . IBM, APL\1130'u ücretsiz olarak sağladı, ancak herhangi bir yükümlülük veya destek olmaksızın. 8k 16 bitlik bellek sözcükleriyle çalışır ve 1 megabaytlık özel bir sabit disk kullanırdı.

APL, kısmen dinamik adres çeviri donanımına sahip olmayan düşük özellikli sistemlerde birden fazla kullanıcıyı destekleyeceği için 1960'ların sonundan 1980'lerin başına kadar ana bilgisayar zaman paylaşım sistemlerinde yer edindi . Seçilen IBM System/370 anabilgisayar sistemleri için performansta ek iyileştirmeler, APL yürütmesi için bazı desteğin işlemcinin sabit yazılımına dahil edildiği APL Assist Microcode'u içeriyordu . Bir süre sonra, uygun performans gösteren donanım nihayet 1980'lerin ortasından sonuna kadar kullanılabilir hale geldiğinden, birçok kullanıcı uygulamalarını kişisel bilgisayar ortamına taşıdı.

IBM 360 ve IBM 370 donanımı için erken IBM APL yorumlayıcıları, ana bilgisayar hizmetlerine güvenmek yerine kendi çok kullanıcılı yönetimini uyguladılar, bu nedenle kendi zaman paylaşım sistemleriydiler. İlk olarak 1966'da IBM'de kullanıma sunulan APL\360 sistemi, çok kullanıcılı bir yorumlayıcıydı. Programlı bilgi ve ayar tercüman sistem değişkenleri için işletim sistemiyle iletişim yeteneği ikisini de kullanarak, özel ayrıcalıklı "I-profil" işlevleri aracılığıyla yapıldığını monadic ve diyadik işlemleri.

1973'te IBM , aynı ürünün devamı olan, ancak işletim sistemi dosyaları gibi APL sistemi dışındaki tesislere erişmek için bir araç olarak paylaşılan değişkenler sunan APL.SV'yi yayımladı . 1970'lerin ortalarında, IBM anabilgisayar yorumlayıcısı, zamanın diğer küçük bilgisayarlarının çoğu yalnızca BASIC sunduğunda, küçük bir CRT ve bir APL klavyesi olan IBM 5100 masaüstü bilgisayarında kullanım için bile uyarlandı . 1980'lerde, VSAPL program ürünü, Konuşma İzleme Sistemi (CMS), Zaman Paylaşım Seçeneği (TSO), VSPC , MUSIC/SP ve CICS kullanıcıları ile yaygın olarak kullanılmaya başlandı .

1973–1974'te Patrick E. Hagerty, Sperry UNIVAC 1100/2200 serisi ana bilgisayar bilgisayarlarının 1100 hattı için Maryland Üniversitesi APL yorumlayıcısının uygulanmasını yönetti . O zaman, Sperry'nin hiçbir şeyi yoktu. 1974'te öğrenci Alan Stebbens'e dahili bir işlevi uygulama görevi verildi. Xerox APL, Haziran 1975'ten itibaren CP-V çalıştıran Xerox 560 ve Sigma 6, 7 ve 9 anabilgisayarları ve Honeywell CP-6 için mevcuttu .

1960'larda ve 1970'lerde, IBM APL\360 yorumlayıcısının değiştirilmiş sürümlerini kullanarak APL hizmetleri satan birkaç zaman paylaşımlı şirket ortaya çıktı. Kuzey Amerika'da daha iyi bilinenler IP Sharp Associates , Scientific Time Sharing Corporation (STSC), Time Sharing Resources (TSR) ve The Computer Company (TCC) idi. CompuServe ayrıca, 1978'de, DEC'in KI ve KL 36-bit makinelerinde çalışan Digital Equipment Corp ve Carnegie Mellon'un değiştirilmiş bir versiyonuna dayanan bir APL Yorumlayıcı ile pazara girdi. CompuServe'nin APL'si hem ticari pazarında hem de tüketici bilgi hizmetinde mevcuttu. İlk olarak IBM 4300 gibi daha ucuz anabilgisayarların ve daha sonra kişisel bilgisayarın ortaya çıkmasıyla birlikte, 1980'lerin ortalarında devre paylaşım endüstrisi neredeyse tamamen ortadan kalkmıştı.

Sharp APL , ilk olarak 1960'larda bir zaman paylaşımlı hizmet olarak ve daha sonra 1979'da başlayan bir program ürünü olarak IP Sharp Associates'ten temin edilebilirdi . Sharp APL , paketler (bir veya tek bir değişkende daha fazla nesne), dosya sistemi, iç içe diziler ve paylaşılan değişkenler .

APL yorumlayıcıları diğer ana bilgisayar ve mini bilgisayar üreticilerinden de, özellikle Burroughs , Control Data Corporation (CDC), Data General , Digital Equipment Corporation (DEC), Harris , Hewlett-Packard (HP), Siemens AG , Xerox ve diğerlerinden mevcuttu. .

Syracuse Üniversitesi'nden Garth Foster, Syracuse'un New York Blue Mountain Lake'deki Minnowbrook Konferans Merkezinde APL uygulayıcıları topluluğunun düzenli toplantılarına sponsor oldu . Daha sonraki yıllarda, Eugene McDonnell , Monterey, California yakınlarındaki Asilomar Konferans Alanlarında ve Watsonville, California yakınlarındaki Pajaro Dunes'da benzer toplantılar düzenledi . Association for Computing Machinery'nin SIGAPL özel ilgi grubu , APL topluluğunu desteklemeye devam ediyor.

mikrobilgisayarlar

1970'lerin ortalarından itibaren kullanıma sunulan mikrobilgisayarlarda, BASIC baskın programlama dili haline geldi. Bununla birlikte, bazı mikro bilgisayarlar bunun yerine APL sağladı - ilki 1974'te piyasaya sürülen ve öncelikle eğitimde kullanılan Intel 8008 tabanlı MCM/70 idi. Bu zamanın bir başka makinesi, 1977'de piyasaya sürülen ve APL/S adı verilen APL lehçesiyle sağlanan VideoBrain Ailesi Bilgisayarıydı .

Commodore SuperPET 1981 yılında tanıtılan, tarafından geliştirilen bir APL tercüman dahil Waterloo Üniversitesi .

1976'da Bill Gates Hobicilere Açık Mektup'ta Microsoft Corporation'ın Intel 8080 ve Motorola 6800 için APL uyguladığını, ancak yazılım korsanlığı nedeniyle "hobiciler için kullanılabilir hale getirmek için çok az teşviği" olduğunu iddia etti . Asla serbest bırakılmadı.

APL2

1980'lerin başlarından başlayarak, Jim Brown liderliğindeki IBM APL geliştirmesi, birincil geliştirmesi olarak bir dizinin diğer dizileri içerebileceği iç içe diziler kavramını ve yeni dil özelliklerini içeren APL dilinin yeni bir sürümünü uyguladı. iç içe dizileri program iş akışına entegre etmeyi kolaylaştırdı. Artık APL dilinin geliştirilmesi üzerinde kontrol sahibi olmayan Ken Iverson, IBM'den ayrıldı ve en büyük katkılarından birinin Sharp APL'nin gelişimini kendi vizyonuyla daha uyumlu olacak şekilde yönlendirmek olduğu IP Sharp Associates'e katıldı .

Diğer satıcılar yeni donanımlar, özellikle de Unix tabanlı mikro bilgisayarlar için APL yorumlayıcıları geliştirmekle meşgul olduklarından , APL2 hemen hemen her zaman yeni APL yorumlayıcı geliştirmeleri için seçilen standarttı. Bugün bile, çoğu APL satıcısı veya kullanıcıları, bu ürünler için bir satış noktası olarak APL2 uyumluluğunu belirtiyor.

IBM ana bilgisayar bilgisayarları için APL2 hala mevcuttur. IBM, problem çözme, sistem tasarımı, prototip oluşturma, mühendislik ve bilimsel hesaplamalar, uzman sistemler, matematik ve diğer konuları öğretmek, görselleştirme ve veritabanı erişimi için kullanımına atıfta bulunur ve ilk olarak 1984'te CMS ve TSO için mevcuttu . APL2 Workstation sürümü (Windows, OS/2 , AIX , Linux ve Solaris ) 1990'ların başlarında çok daha sonra geldi.

Modern uygulamalar

APLX, Dyalog ve diğerleri tarafından APL'nin çeşitli uygulamaları, nesne yönelimli programlama için uzantıları , .NET Framework desteğini , XML dizisi dönüştürme temel öğelerini, grafik oluşturmayı, işletim sistemi arabirimlerini ve lambda hesabı ifadelerini içerir.

türev diller

APL, aşağıdaki dillerin temelini oluşturmuş veya etkilemiştir:

  • A ve A+ , alternatif bir APL, ikincisi grafik uzantılı.
  • FP , işlevsel bir programlama dilidir.
  • Ivy, Rob Pike tarafından geliştirilen ve girdi olarak ASCII kullanan APL benzeri bir dil için bir tercüman .
  • J da Iverson tarafından tasarlanan edildi ve kullanır ASCII ile digraphs yerine özel simgeler.
  • K , Arthur Whitney tarafından geliştirilen APL'nin tescilli bir çeşididir.
  • LYaPAS , APL'nin bir Sovyet uzantısı.
  • MATLAB , sayısal bir hesaplama aracı.
  • Nial , işlevsel bir programlama notasyonuna sahip üst düzey bir dizi programlama dili.
  • Benzer bir temel dile sahip etkileşimli, genişletilebilir bir dil olan Polimorfik Programlama Dili .
  • S , istatistiksel bir programlama dili (genellikle şimdi R olarak bilinen açık kaynaklı sürümde görülür ).
  • Speakeasy , sayısal bir bilgi işlem etkileşimli ortamı.
  • Wolfram Language , Mathematica'nın programlama dili .

Dil özellikleri

Karakter seti

APL, benzersiz, standart olmayan bir karakter seti seçimi nedeniyle hem eleştirildi hem de övüldü. Bunu öğrenen bazı kişiler, Iverson'ın kullanılan notasyonun bir fark yarattığı fikrinin arkasında bir miktar ağırlık olduğunu öne sürerek, ateşli taraftarlar haline geliyor. 1960'larda ve 1970'lerde, birkaç terminal cihazı ve hatta ekran monitörleri APL karakter setini yeniden üretebilirdi. En popüler olanları, özel bir APL tipi elemanla kullanılan IBM Selectric baskı mekanizmasını kullandı. İlk APL hat terminallerinden biri (sadece hat modu işlemi, tam ekran değil ) Texas Instruments TI Model 745 (1977 dolaylarında) idi ve APL zamanı ile etkileşim için yarım ve tam dubleks telekomünikasyon modlarını içeren tam APL karakter setine sahipti. - RJE adı verilen uzak bir bilgisayar işini çalıştırmak için hizmet veya uzak anabilgisayar paylaşımı .

Zamanla, yüksek kaliteli grafik ekranların evrensel kullanımı, yazdırma cihazları ve Unicode desteği ile APL karakter yazı tipi sorunu büyük ölçüde ortadan kaldırıldı. Bununla birlikte, APL karakterlerinin girilmesi , diğer programlama dillerine alışmış yeni başlayanları hayal kırıklığına uğratabilecek giriş yöntemi düzenleyicilerinin , klavye eşlemelerinin, sanal/ekrandaki APL simge kümelerinin veya kolay referanslı basılı klavye kartlarının kullanılmasını gerektirir. Diğer programlama dilleriyle önceden deneyimi olmayan yeni başlayanlarla, lise öğrencilerinin dahil olduğu bir araştırma, APL karakterlerini yazmanın ve kullanmanın öğrencileri ölçülebilir bir şekilde engellemediğini buldu.

APL kullanımını savunmak için APL, yazmak için daha az kodlama gerektirir ve klavye eşlemeleri zamanla ezberlenir. Ayrıca, Microsoft Windows gibi işletim sistemleri için ücretsiz olarak temin edilebilen indirilebilir yazı tipleri gibi özel APL klavyeler de üretilmekte ve günümüzde kullanılmaktadır. Bildirilen üretkenlik kazanımları, ortak görevler için önemli sayıda deyimden bahsetmeye gerek yok, sembolleri, anlamlarını ve klavye eşlemelerini ezberlemeye değer kılmak için APL'de çalışmak için yeterince zaman harcayacağını varsayıyor.

Tasarım

Geleneksel olarak yapılandırılmış programlama dillerinden farklı olarak, APL kodu tipik olarak monadik veya ikili işlev zincirleri ve diziler üzerinde hareket eden operatörler olarak yapılandırılmıştır . APL, tek bir sembol veya birkaç sembolün bir kombinasyonu ile gösterilen birçok standart olmayan ilkellere (işlevler ve operatörler) sahiptir. Tüm ilkeller aynı önceliğe sahip olacak şekilde tanımlanır ve her zaman sağla ilişkilendirilir. Böylece, APL sağdan sola okunur veya en iyi anlaşılır .

Erken APL uygulamaları (yaklaşık 1970) veya döngüler ve yapılar gibi programlama döngü akışı kontrol yapılarına sahip değildi . Bunun yerine, dizi işlemlerini kullandılar ve yapılandırılmış programlama yapılarının kullanılması çoğu zaman gerekli değildi, çünkü tek bir ifadede tam bir dizi üzerinde bir işlem gerçekleştirilebilirdi. Örneğin, ( ) işlevi for-loop yinelemesinin yerini alabilir : ιN bir skaler pozitif tamsayıya uygulandığında tek boyutlu bir dizi (vektör), 1 2 3 ... N verir. APL'nin daha yeni uygulamaları genellikle kapsamlı kontrol yapılarını içerir. , böylece veri yapısı ve program kontrol akışı net ve temiz bir şekilde ayrılabilir. dowhileif-then-elseiotaι

APL ortamına çalışma alanı denir . Bir çalışma alanında kullanıcı programları ve verileri tanımlayabilir, yani veri değerleri programların dışında da mevcuttur ve kullanıcı ayrıca bir program tanımlamaya gerek kalmadan verileri değiştirebilir. Aşağıdaki örneklerde, APL yorumlayıcısı, kullanıcının girişini beklemeden önce altı boşluk yazar. Kendi çıktısı birinci sütunda başlar.

      n  4 5 6 7
Bir dizi oluşturma işlemi olan değişkene {4 5 6 7} değer vektörü atar n. Eşdeğer ancak daha özlü bir APL ifadesi . Dizide birden çok değer saklanır , işlem resmi döngüler veya kontrol akışı dili olmadan gerçekleştirilir . n 3 + 4n
      n 
4 5 6 7
nŞu anda bir dizi veya vektörün içeriğini görüntüleyin .
      n+4
8 9 10 11
4 şimdi vector öğesinin tüm öğelerine eklenir ve n4 öğeli bir vektör {8 9 10 11} oluşturulur.
Yukarıdaki gibi, APL'nin yorumlayıcısı, ifadenin değeri bir değişkene ( a ile ) atanmadığı için sonucu görüntüler .
      +/n
22
APL, vektörün bileşenlerinin toplamını gösterir n, yani 22 (= 4 + 5 + 6 + 7)çok kompakt bir gösterim kullanarak: +/'yı "artı, fazla..." olarak okuyun ve hafif bir değişiklik "çarpma, fazla..." olur.
      m  +/3+⍳4
      m
22
Bu işlemler, APL'nin ifadeleri sağdan sola değerlendirdiğini hatırlayarak tek bir ifadede birleştirilebilir: önce bir dizi oluşturur , ardından her bileşene 3 eklenir, bunlar birlikte toplanır ve değişken içinde depolanan sonuç en sonunda görüntülenir. 4[1,2,3,4]m

Normal matematiksel gösterimde şuna eşdeğerdir: . Matematiksel ifadelerin sağdan sola okunmadığını veya değerlendirilmediğini hatırlayın.

Kullanıcı, çalışma alanını tüm değerler, programlar ve yürütme durumu ile kaydedebilir.

APL , geleneksel aritmetik ve cebirsel gösterimin bir uzantısı olan bir dizi ASCII olmayan sembol kullanır. Tek komut için tek karakter adlarına sahip olmak, çoklu veri ( SIMD ) vektör işlevleri, APL'nin Conway'in Game of Life'ını tek bir kod satırında hesaplamak gibi veri dönüşümü için algoritmaların kompakt formülasyonunu etkinleştirme yollarından biridir. APL'nin hemen hemen tüm sürümlerinde, herhangi bir hesaplanabilir işlevi tek bir ifadede, yani bir kod satırında ifade etmek teorik olarak mümkündür.

Alışılmadık karakter kümesi nedeniyle , birçok programcı APL kodu yazmak için APL tuşlu özel klavyeler kullanır . Sadece ASCII karakterlerini kullanarak APL kodu yazmanın çeşitli yolları olsa da pratikte neredeyse hiç yapılmaz. (Bunun, Iverson'un bir düşünce aracı olarak notasyon hakkındaki tezini desteklediği düşünülebilir .) Modern uygulamaların tümü olmasa da çoğu, ASCII olmayan karakterlere erişmek için özel eşlemeler veya giriş yöntemi düzenleyicileri ile standart klavye düzenlerini kullanır . Tarihsel olarak, APL yazı tipi, büyük italik alfabetik karakterler ve dik rakamlar ve sembollerle ayırt edici olmuştur. Çoğu satıcı, APL karakter kümesini özel bir yazı tipinde görüntülemeye devam eder.

APL'nin savunucuları, sözde salt- yazılabilir kod örneklerinin (kötü yazılmış ve neredeyse anlaşılmaz kod), neredeyse her zaman, herhangi bir dilde meydana gelebilecek zayıf programlama uygulamalarının veya acemi hataların örnekleri olduğunu iddia eder . Savunucular ayrıca APL ile daha geleneksel bilgisayar dillerinden çok daha üretken olduklarını ve çalışan yazılımın diğer teknolojileri kullanmaktan çok daha kısa sürede ve çok daha az programcı ile uygulanabileceğini iddia ediyorlar.

Ayrıca, kompakt ve özlü olduğu için APL'nin kendisini daha büyük ölçekli yazılım geliştirme ve karmaşıklığa iyi bir şekilde ödünç verdiğini, çünkü kod satırlarının sayısının büyük ölçüde azaltılabileceğini iddia edebilirler. Birçok APL savunucusu ve uygulayıcısı da COBOL ve Java gibi standart programlama dillerini nispeten sıkıcı olarak görmektedir. APL genellikle, ticaret sistemleri gibi pazara sunma süresinin önemli olduğu yerlerde bulunur.

terminoloji

APL, fonksiyonlar ve operatörler arasında net bir ayrım yapar . İşlevler, bağımsız değişken olarak dizileri (değişkenler veya sabitler veya ifadeler) alır ve sonuç olarak dizileri döndürür. Operatörler ( üst düzey işlevlere benzer şekilde ), işlevleri veya dizileri argüman olarak alır ve ilgili işlevleri türetir. Örneğin, toplam fonksiyonu uygulanarak elde edilir indirgeme operatör ek fonksiyonu. Aynı indirgeme operatörünü maksimum işleve (iki sayıdan büyük olanı döndürür) uygulamak, bir grup (vektör) sayının en büyüğünü döndüren bir işlev türetir. J dilinde Iverson koşullar ikame fiil için fonksiyon ve zarf ya da bağlantılı için operatör .

APL ayrıca dilde yerleşik olan ve bir sembolle veya sabit bir sembol kombinasyonuyla temsil edilen özellikleri ilkel olarak tanımlar . Çoğu ilkel ya işlevler ya da işleçlerdir. APL'yi kodlama, büyük ölçüde ilkel olmayan işlevlerin ve (APL'nin bazı sürümlerinde) operatörlerin yazılması işlemidir. Bununla birlikte, birkaç ilkel, en belirgin şekilde atama olmak üzere ne işlev ne de operatör olarak kabul edilir.

APL literatüründe kullanılan bazı kelimelerin hem matematikteki hem de bilgisayar biliminin genelindeki anlamlardan farklı anlamları vardır.

APL operatörlerinin terminolojisi
Terim Açıklama
işlev skaler, dizi veya daha karmaşık yapılar olabilen sıfır, bir (sağ) veya iki (sol ve sağ) argüman alan ve benzer şekilde karmaşık bir sonuç döndürebilen işlem veya eşleme. Bir işlev şunlar olabilir:
  • İlkel: yerleşik ve tek bir glif ile temsil edilir;
  • Tanımlanmış: program ifadelerinin adlandırılmış ve sıralanmış bir koleksiyonu olarak;
  • Türetilmiş: bir operatörün argümanlarıyla birleşimi olarak.
dizi Her bir öğenin bir ilkel skaler veri veya başka bir dizi olduğu, büyük satır sırasına göre sıfır veya daha fazla ortogonal boyutlu veri değerli nesne .
niladik herhangi bir argüman almamak veya gerektirmemek, nullary
monadik sadece bir argüman gerektiren; bir fonksiyon için sağda, bir operatör için solda, tekli
çift hem sol hem de sağ argüman gerektiren, ikili
kararsız veya monadik sol argümanının atlanmasına izin vererek, monadik veya ikili bir bağlamda kullanılabilir
Şebeke bir (sol) veya iki (sol ve sağ) işlev veya dizi değerli argümanlar (işlenenler) alan ve bir işlev türeten işlem veya eşleme. Operatör şunlar olabilir:
  • İlkel: yerleşik ve tek bir glif ile temsil edilir;
  • Tanımlı: program ifadelerinin adlandırılmış ve sıralanmış bir koleksiyonu olarak.

Sözdizimi

APL, işlevlerin, operatörlerin ve sözdiziminin açık temsillerine sahiptir, böylece dilde genişletilmiş tesislerin açık ve açık ifadesi için bir temel ve bunlar üzerinde deney yapmak için araçlar sağlar.

Örnekler

Selam Dünya

Bu, " Merhaba dünya " görüntüler:

'Hello, world'

APL'deki bir tasarım teması, diğer programlama dillerinin çoğunda sözdizimi hataları üretecek bazı durumlarda varsayılan eylemleri tanımlamaktır.

Yukarıdaki 'Merhaba, dünya' dize sabiti görüntülenir, çünkü görüntüleme, açıkça herhangi bir eylemin belirtilmediği herhangi bir ifadede varsayılan eylemdir (örneğin, atama, işlev parametresi).

üs alma

Bu temanın başka bir örneği, APL'deki üs almanın " 2*3" olarak yazılmasıdır , bu da 2'nin 3. kuvvetine yükseltildiğini gösterir (bu, 2^3diğer bazı dillerde " 2**3" ve FORTRAN ve Python'da " " olarak yazılır ): birçok dil için * kullanır 2*3'teki gibi çarpmayı belirtir, ancak APL 2×3bunun için kullanır . Ancak, herhangi bir taban belirtilmezse ( *3APL'de " ^3" veya diğer dillerde " " ifadesinde olduğu gibi ), diğer programlama dillerinin çoğunda bir sözdizimi hatası olur. Ancak APL, eksik tabanın doğal logaritma sabiti e (2.71828....) olduğunu varsayar ve bu nedenle " *3" öğesini " " olarak yorumlar 2.71828*3.

Basit istatistikler

Bunun Xbir sayı dizisi olduğunu varsayalım . Sonra (+/X)÷⍴Xortalamasını verir. Okuma sağdan sola , ⍴XX öğe sayısını verir ve o zamandan beri ÷bir diyadik operatörüdür, onun solunda terim sıra gereklidir. Parantez içindedir, çünkü aksi takdirde X alınır (böylece X÷⍴X, X'in her bir elemanının toplamı , X'deki eleman sayısına bölünür) ve X'in +/Xtüm elemanlarını toplar. Buna dayanarak , standart sapmayı hesaplar. . Ayrıca, atama bir operatör olduğundan, bir ifade içinde görünebilir, bu nedenle ((+/((X - (+/X)÷⍴X)*2))÷⍴X)*0.5

SD((+/((X - AV(T+/X)÷⍴X)*2))÷⍴X)*0.5

uygun değerleri T, AV ve SD'ye yerleştirir. Doğal olarak, kişi bu ifadeyi her seferinde yeniden yazmak yerine tekrarlanan kullanım için bir işlev haline getirirdi.

6 piyango numarası seçin

Aşağıdaki anında mod ifadesi, tipik bir Pick 6 piyango numarası seti oluşturur : 1 ile 40 arasında değişen altı sözde rasgele tam sayı , tekrarlanmaması garanti edilir ve bunları artan düzende sıralanmış olarak görüntüler:

x[x6?40]

Yeni bir APLer için karmaşık görünse de, kısaca yukarıdakiler çok şey yapar . Aşağıdaki APL işlevlerini ( ilkel ve glifler olarak da adlandırılır ) birleştirir:

  • İlk (en sağdaki en soldaki için APL yürütür) yürütülen diyadik fonksiyonudur edilmesi ?(adı dealzaman diyadik) olup döner bir vektör , belirli bir sayıda oluşan (sol argüman: 6 bu durumda) 1 ila belirli bir maksimum arasında değişen rasgele sayının ( doğru argüman: bu durumda 40), söz konusu maksimum ≥ vektör uzunluğunun tekrarlanmaması garanti edilir; bu nedenle, 1-40 arasında değişen 6 rastgele tam sayı üretin/oluşturun.
  • Bu vektör daha sonra ( ) değişkenine atanır , çünkü daha sonra ihtiyaç duyulur.x
  • Bu vektör daha sonra , sağındaki her şeyi bir sonraki dengesiz parantez veya yakın paranteze kadar doğru argümanı olan bir monadik fonksiyonla artan düzende sıralanır . Sonuç , argümanını artan sıraya koyacak indekslerdir.
  • Daha sonra çıktısı, daha önce bu amaç için kaydettiğimiz değişkeni indekslemek için kullanılır x, böylece öğeleri artan sırayla seçilir.

En soldaki x'in solunda APL'ye sonuçla ne yapacağını söyleyen bir işlev olmadığından, bunu yapmak için herhangi bir açık talimata ihtiyaç duymadan bunu ekrana (tek bir satırda, boşluklarla ayrılmış olarak) verir.

?ayrıca roll1 ile [sağındaki] tek işleneni arasında rastgele bir tamsayı döndüren adlı bir monadik eşdeğeri vardır . Bu nedenle, bir rol yapma oyunu programı, ?20yirmi taraflı bir zarı atmak için ifadeyi kullanabilir .

asal sayılar

Aşağıdaki ifade , 1'den R'ye kadar olan tüm asal sayıları bulur . Hem zaman hem de uzayda, hesaplama karmaşıklığı ( Big O notasyonunda ) şeklindedir.

(~RR∘.×R)/R1↓⍳R

Sağdan sola yürütülür, bu şu anlama gelir:

  • Iota içeren bir vektör oluşturur tamsayılar gelen1etmekR(eğerR= 6programın başında,⍳Rolan1 2 3 4 5 6)
  • Bu vektörün ( işlev) ilk öğesini bırakın , yani 1. Yani 1↓⍳Rbir2 3 4 5 6
  • RYeni vektöre ayarlayın ( , ilkel atama ), yani2 3 4 5 6
  • / Çoğaltmak operatör diyadik (ikili) ve yorumlayıcı ilk (tam parantez içinde) sol argümanı değerlendirir:
  • Oluşturmak dış ürün arasında Rçarpılır R, yani bir matris çarpım tablosunu R ile (R °.×, örneğin operatör),
4 6 8 10 12
6 9 12 15 18
8 12 16 20 24
10 15 20 25 30
12 18 24 30 36
  • Bir vektör ile aynı uzunlukta kurmak Rile 1karşılık gelen sayı, her yerde Rdış ürün matrisi içinde ( , resim dahil veya elemanının ya da epsilon örneğin, operatörü),0 0 1 0 1
  • Vektördeki değerleri mantıksal olarak olumsuzlayın ( değil ) (sıfırları bire ve birleri sıfıra değiştirin) ( , mantıksal not veya Tilde operatörü), yani,1 1 0 1 0
  • RKarşılık gelen öğenin 1( / kopyalama operatörü) olduğu öğeleri seçin , ör.2 3 5

(Not: Bu şekilde APL kökenli 1. APL kaynaklı olarak 0 kullanmak için ayarlanabilir yani, endeksler başlangıç 1, kabul ι6olan 0 1 2 3 4 5bazı hesaplamalar için uygun olan,.)

sıralama

Aşağıdaki ifade , matris X'te saklanan bir kelime listesini kelime uzunluğuna göre sıralar :

X[X+.' ';]

Hayatın oyunu

Dyalog APL'de yazılan aşağıdaki fonksiyon "life", bir boole matrisi alır ve Conway'in Game of Life'ına göre yeni nesli hesaplar . APL'nin karmaşık bir algoritmayı çok az kodla uygulama gücünü gösterir, ancak APL hakkında ileri düzeyde bilgi sahibi olmadıkça takip etmesi de çok zordur.

life{1 .3 4=+/,¯1 0 1∘.¯1 0 1∘.⌽⊂}

HTML etiketlerinin kaldırılması

Aşağıdaki örnekte, yine Dyalog'da, ilk satır bir değişkene bir miktar HTML kodu atar txtve ardından tüm HTML etiketlerini kaldırmak için bir APL ifadesi kullanır ( açıklama ):

      txt'<html><body><p>This is <em>emphasized</em> text.</p></body></html>'
      { /⍨ ~{∨≠\}'<>'} txt
This is emphasized text.

adlandırma

APL, adını Iverson'ın A Programming Language adlı kitabının baş harflerinden alır, ancak kitap bu makalede açıklanan uygulamalı programlama dili yerine Iverson'ın matematiksel gösterimini tanımlamaktadır. Ad yalnızca APL\360 ile başlayan gerçek uygulamalar için kullanılır .

Adin Falkoff , adı 1966'da IBM'de APL\360'ın uygulanması sırasında ortaya attı :

Üç öğrencinin paylaştığı ofisin yanından geçerken, devam eden bir tartışmanın seslerini duyabiliyordum. Başımı kapıdan içeri uzattım ve Eric bana, "Kullandığımız notasyonun APL olarak adlandırıldığını herkesin bildiği doğru değil mi?" diye sordu. Hiç böyle denildiğini duymadığımı itiraf ederek onu hayal kırıklığına uğrattığım için üzgünüm. Bunun iyi bilindiği fikrine nereden varmıştı? Ve buna kim böyle demeye karar vermişti? Aslında, neden böyle bir denilmesi gerekiyordu ki? Bir süre sonra adını duydum. 1966 Haziran'ında uygulama çalışmaları başladığında, belgeleme çalışmaları da başladı. Sanırım "bu" hakkında yazmak zorunda kaldıklarında Falkoff ve Iverson, yapmak zorunda kalacaklarını anladılar. "it"e bir isim verin.O zamanlar muhtemelen pek çok öneri vardı, ama ben sadece ikisini duydum.Şikago'da SRA'da bu notasyonu kullanarak öğretim materyalleri geliştiren bir grup "Mathlab" ismini tercih etti. Bir başka öneri de buna "Iverson's Better Math" adını vermek ve daha sonra insanların uygun kısaltmayı bulmalarına izin vermekti.

Sonra bir gün Adin Falkoff Ken'in ofisine girdi ve tahtaya "Bir Programlama Dili" ve altına "APL" kısaltmasını yazdı. Böylece doğdu. Bundan sadece bir hafta kadar sonra, Eric Iverson, adının IBM Research'ten IBM Mohansic'e Taconic Parkway'in on üç mil yukarısında henüz yolunu bulamamışken bana sorusunu sordu.

APL ara sıra Dizi Programlama Dili veya Dizi İşleme Dili olarak yeniden yorumlanır , böylece APL bir arka ad haline gelir .

İngiliz APL Derneği (BAPLA) konferans laptop çantası.

APL satıcıları arasında her zaman işbirliği olmuştur ve 1969'dan 2010'a kadar düzenli olarak ortak konferanslar düzenlenmiştir. Bu tür konferanslarda, APL motifleri veya satıcı logolarının koleksiyonunu içeren APL ürünleri genellikle dağıtılırdı. Yaygın olan elmalar ( elma ve APL'nin telaffuzundaki benzerlik üzerine bir kelime oyunu olarak ) ve klasik APL klavye düzeninin APL değiştirici tuşunu basılı tutarken ve "APL" yazarken ürettiği semboller olan kod parçacığıydı . *

Tüm bu topluluk çabalarına rağmen, programlama dili için evrensel bir satıcıdan bağımsız logo ortaya çıkmadı. Popüler programlama dilleri giderek daha fazla tanınabilir logolar oluşturduğundan, Fortran 2020'de bir tane alırken, British APL Association 2021'in ikinci yarısında APL için böyle bir logo oluşturmak için bir kampanya başlattı.

Kullanmak

APL, finans ve sigorta uygulamaları, yapay zeka , sinir ağları ve robotik dahil olmak üzere birçok amaç için kullanılmaktadır . APL'nin bir programlama dili değil , bir hesaplama aracı olduğu tartışılmıştır ; sembolik doğası ve dizi yetenekleri, onu bir bilgisayar programcısı becerilerine sahip olmayan veya bu becerilere ihtiyaç duymayan alan uzmanları ve veri bilimcileri arasında popüler hale getirmiştir .

APL, grafik dönüşümlerinin matris çarpımları olarak kodlanabildiği görüntü işleme ve bilgisayar animasyonu için çok uygundur . İlk ticari bilgisayar grafiği evlerinden biri olan Digital Effects , 1982 filmi Tron için televizyon reklamları ve animasyon oluşturmak için kullanılan Visions adlı bir APL grafik ürünü üretti . Son olarak, Stormwind tekne simülatörü , temel mantığını, işleme hattı ara yazılımına arabirimini ve fizik motorunun büyük bir bölümünü uygulamak için APL'yi kullanır .

Günümüzde APL, yatırım yönetimi , varlık yönetimi , sağlık hizmetleri ve DNA profilleme gibi çok çeşitli ticari ve bilimsel uygulamalarda ve hobiler tarafından kullanılmaya devam etmektedir.

Önemli uygulamalar

APL\360

APL'nin tanınabilir APL sembollerini kullanan ilk uygulaması, IBM System/360 üzerinde çalışan APL\360 idi ve o sırada yalnızca IBM içinde kullanımda kalmasına rağmen Kasım 1966'da tamamlandı. 1973 yılında kendi uygulamacılarıdır Larry Breed , Dick Lathwell ve Roger Moore , verildi Grace Murray Hopper Ödülü dan Association for Computing Machinery (ACM). "APL\360'ın tasarımı ve uygulanmasındaki çalışmaları için, etkileşimli sistemler için basitlik, verimlilik, güvenilirlik ve yanıt süresinde yeni standartlar belirledikleri için" verildi.

1975'te, IBM 5100 mikrobilgisayar APL\360'ı bilgisayar için iki yerleşik ROM tabanlı yorumlanmış dilden biri olarak sundu ve dilde kullanılan tüm özel sembolleri destekleyen bir klavye ve ekranla tamamlandı.

APL\ 360'taki önemli gelişmeler arasında , CMS ve APLSV'nin sanal depolama yeteneklerini kullanan, paylaşılan değişkenleri , sistem değişkenlerini ve sistem işlevlerini tanıtan CMS/APL vardı . Daha sonra , 1983'teki son sürümüne kadar IBM System/370 ve VSPC platformlarına taşındı , ardından APL2 ile değiştirildi.

APL\1130

1968'de APL\1130, IBM tarafından IBM 1130 için oluşturulan ilk halka açık APL sistemi oldu . IBM'in yayınladığı en popüler IBM Type-III Library yazılımı oldu.

APL*Plus ve Sharp APL

APL*Plus ve Sharp APL, veri biçimlendirme ve APL dizilerini harici dosyalarda depolamaya yönelik olanaklar gibi ek iş odaklı uzantılara sahip APL\360 sürümleridir. Orijinal IBM APL\360 geliştirme ekibinin çeşitli üyelerini kullanan iki şirket tarafından ortaklaşa geliştirildiler.

İki şirket, 1964 yılında Ian Sharp, Roger Moore ve diğerleri tarafından kurulan bir APL\360 hizmet şirketi olan IP Sharp Associates (IPSA) ve 1969 yılında Lawrence Breed ve diğerleri tarafından kurulan bir zaman paylaşımı ve danışmanlık hizmeti şirketi olan STSC idi . İkisi birlikte APL*Plus'ı geliştirdi ve daha sonra birlikte çalışmaya devam etti, ancak APL'yi APL*Plus ve Sharp APL olarak ayrı ayrı geliştirdi. STSC, APL*Plus'ı VAX 11, PC ve UNIX için yapılan sürümlerle birçok platforma taşıdı, oysa IPSA kişisel bilgisayarın gelişine farklı bir yaklaşım getirdi ve ek PC-XT/360 donanımı kullanarak Sharp APL'yi bu platformda kullanılabilir hale getirdi. . 1993 yılında, Sharp APL'yi desteklemek için Soliton Incorporated kuruldu ve Sharp APL'yi SAX'a (Sharp APL for Unix) dönüştürdü. 2018 yılı itibariyle APL*Plus, APL2000 APL+Win olarak devam etmektedir.

1985 yılında, STSC'den Ian Sharp ve Dan Dyer, APL'ye Olağanüstü Katkı için Kenneth E. Iverson Ödülü'nü birlikte aldılar .

APL2

APL2, 1971'de geliştirilen ve ilk olarak 1984'te piyasaya sürülen IBM tarafından APL'nin önemli bir yeniden uygulamasıydı. Dile birçok eklemeler sağlar, bunların en dikkate değer olanı iç içe (dikdörtgen olmayan) dizi desteğidir. 2018 itibariyle, z/OS veya z/VM çalıştıran ana bilgisayar bilgisayarları ve AIX , Linux , Sun Solaris ve Microsoft Windows çalıştıran iş istasyonları için kullanılabilir .

APL2 Ürün ve Hizmet Ekibinin tamamı, 2007 yılında Iverson Ödülü'ne layık görüldü.

APLGOL

1972'de APLGOL, dil çerçevesine yapılandırılmış programlama dili yapıları ekleyen APL'nin deneysel bir versiyonu olarak piyasaya sürüldü. İfadeler arası kontrol, koşullu ifade yürütme ve ifade yapılandırması için yeni ifadeler ve ayrıca algoritmanın amacını netleştirmek için ifadeler eklendi. 1977'de Hewlett-Packard için uygulandı.

Diyalog APL'si

Dyalog APL ilk olarak 1983 yılında İngiliz şirketi Dyalog Ltd. tarafından piyasaya sürüldü ve 2018 itibariyle AIX , Linux ( Raspberry Pi dahil ), macOS ve Microsoft Windows platformları için mevcut. Nesne yönelimli programlamayı ve işlevsel programlamayı destekleyen uzantıları olan APL2'ye dayanmaktadır . Lisanslar kişisel/ticari olmayan kullanım için ücretsizdir.

1995 yılında, geliştirme ekibinden ikisi - John Scholes ve Peter Donnelly - tercüman üzerindeki çalışmaları nedeniyle Iverson Ödülü'ne layık görüldü. Gitte Christensen ve Morten Kromberg, 2016 yılında Iverson Ödülü'nün ortak sahipleriydi.

NARS2000

NARS2000 İbrahim Sağlam, gelen tanınmış APL geliştirici ve Uygulatıcı tarafından yazılan bir açık kaynak APL tercüman olan STSC 1970 ve 1980'lerde. NARS2000, gelişmiş özellikler ve yeni veri türleri içerir ve yerel olarak Microsoft Windows'ta ve Wine altındaki diğer platformlarda çalışır .

APLX

APLX, APL2'ye dayanan ve ilk olarak 2002 yılında İngiliz şirketi MicroAPL tarafından piyasaya sürülen çeşitli uzantılara sahip APL'nin bir çapraz platform lehçesidir . Artık geliştirme aşamasında veya ticari satışta olmasa da, artık Dyalog'dan ücretsiz olarak temin edilebilir.

GNU APL'si

GNU APL, ISO/IEC 13751:2001'de belirtildiği gibi Genişletilmiş APL'nin ücretsiz bir uygulamasıdır ve dolayısıyla APL2'nin bir uygulamasıdır. Bu üzerinde çalışan Linux (Ahududu Pi dahil), MacOS, birkaç BSD lehçelerde ve Windows üzerinde (kullanarak Cygwin tüm sistem fonksiyonlarının tam destek ya da eksik olan sistem fonksiyonlarının bazıları ile bir yerli 64-bit Windows ikili gibi) . GNU APL, Unicode'u dahili olarak kullanır ve komut dosyasıyla yazılabilir. Jürgen Sauermann tarafından yazılmıştır.

GNU Projesi'nin kurucusu Richard Stallman , 1969 yazında bir lise öğrencisi olarak bir metin editörü yazmak için APL'yi ilk benimseyenlerdendi.

APL'nin yorumlanması ve derlenmesi

APL geleneksel olarak yorumlanan bir dildir ve derlemeye pek uygun olmayan zayıf değişken yazma gibi dil özelliklerine sahiptir . Bununla birlikte, temel veri yapısı olarak diziler ile paralellik , paralel hesaplama , büyük ölçüde paralel uygulamalar ve çok büyük ölçekli entegrasyon (VLSI) aracılığıyla performans kazanımları için fırsatlar sağlar ve en başından beri APL, yüksek performanslı bir dil olarak kabul edilmiştir. - örneğin, "diziler üzerinde çalıştığı ve dahili olarak matris ters çevirme gibi işlemleri gerçekleştirdiği için" karmaşık matris işlemlerini gerçekleştirme hızına dikkat çekti.

Bununla birlikte, APL nadiren tamamen yorumlanır ve kullanılan veya kullanılmış olan derleme veya kısmi derleme teknikleri aşağıdakileri içerir:

deyim tanıma

Çoğu APL yorumlayıcısı deyim tanımayı destekler ve yaygın deyimleri tek işlemler olarak değerlendirir. Örneğin, deyimi BV/⍳⍴Atek bir işlem olarak değerlendirerek (burada BVbir Boole vektörü ve Abir dizidir), iki ara dizinin oluşturulmasından kaçınılır.

Optimize edilmiş bayt kodu

APL'de zayıf yazma, bir adın bir diziye (herhangi bir veri türünden), bir işleve veya bir operatöre başvurabileceği anlamına gelir. Genel olarak, yorumlayıcı bunun hangi biçimde olacağını önceden bilemez ve bu nedenle çalışma zamanında analiz, sözdizimi denetimi vb. gerçekleştirmelidir. Bununla birlikte, belirli durumlarda, bir adın hangi türe başvurması beklendiğini önceden belirlemek ve daha sonra azaltılmış çalışma zamanı ek yükü ile yürütülebilecek bayt kodu oluşturmak mümkündür. Bu bayt kodu, sabit katlama veya ortak alt ifade eliminasyonu gibi derleme teknikleri kullanılarak da optimize edilebilir . Yorumlayıcı, mevcut olduğunda ve yapılmış herhangi bir varsayım karşılandığında bayt kodunu yürütecektir. Dyalog APL, optimize edilmiş bayt kodu desteği içerir.

Derleme

APL'nin derlenmesi , dil ilk kullanıma sunulduğundan beri araştırma ve deney konusu olmuştur; ilk derleyicinin 1971 civarında piyasaya sürülen Burroughs APL-700 olduğu kabul edilir. APL'yi derleyebilmek için dil sınırlamalarının getirilmesi gerekir. APEX, Robert Bernecky tarafından yazılmış ve GNU Kamu Lisansı altında bulunan bir araştırma APL derleyicisidir .

STSC o fonksiyonların derleme sağlar - APL Derleyici bir bayt kodu eniyileyicideki ve derleyici bir melez makine koduna alt fonksiyonları ve globaller şartıyla beyan , ancak tercüman hala olarak kullanılan çalışma zamanı kütüphanesinde ve yapılacak fonksiyonlarını yürütmek için derleme gereksinimlerini karşılamıyor.

standartlar

APL, Amerikan Ulusal Standartlar Enstitüsü (ANSI) çalışma grubu X3J10 ve Uluslararası Standardizasyon Örgütü (ISO) ve Uluslararası Elektroteknik Komisyonu (IEC), ISO/IEC Ortak Teknik Komitesi 1 Alt Komite 22 Çalışma Grubu 3 tarafından standardize edilmiştir. ISO 8485:1989'da belirtilmiştir ve Genişletilmiş APL dili ISO/IEC 13751:2001'de belirtilmiştir.

Referanslar

daha fazla okuma

Video

Dış bağlantılar

Çevrimiçi kaynaklar

sağlayıcılar

Kullanıcı grupları ve topluluklar