REXX (REstructured eXtended eXecutor), 1979 yılında IBM'in Hursley Laboratuvarları'nda çalışan Mike Cowlishaw tarafından tasarlanmış bir makro ve scripting dilidir. Dilin temel motivasyonu, o dönemde yaygın olan EXEC ve EXEC 2 gibi IBM anaçatı (mainframe) betik dillerinin yetersizliklerine ve karmaşıklıklarına bir çözüm sunmaktı. Cowlishaw, "insanlar için okunabilirlik" felsefesini merkeze alarak, hem sistem programcılarının hem de günlük kullanıcıların kolayca öğrenebileceği ve uygulayabileceği bir dil yaratmayı hedefledi.

Dilin resmi olarak duyurulması ve yaygınlaşması, 1980'lerin başında IBM'in VM/CMS ve MVS/TSO işletim sistemleriyle birlikte gelmesiyle gerçekleşti. REXX, bu platformlarda sistem yönetimi, otomasyon ve uygulama prototipleme için hızla standart bir araç haline geldi. IBM'in desteği, dilin anaçatı ekosistemindeki güvenilirliğini ve kurumsal benimsenmesini sağlamıştır.

1980'lerin ortalarına gelindiğinde, REXX'in popülaritesi IBM ekosisteminin dışına taşmaya başladı. Dilin taşınabilir (portable) yapısı, AmigaOS gibi kişisel bilgisayar platformlarına port edilmesine olanak tanıdı. Bu genişleme, REXX'in temel tasarım prensiplerinin ne kadar başarılı olduğunun bir kanıtıydı.

Dilin standartlaşma süreci, 1990'larda Amerikan Ulusal Standartlar Enstitüsü (ANSI) bünyesinde gerçekleşti. ANSI Standard X3.274-1996 onayı, REXX'in farklı uygulamalar arasında tutarlılığını garanti altına aldı ve dilin resmi bir spesifikasyon kazanmasını sağladı. Bu standart, dilin çekirdek özelliklerini tanımlayarak, uyumluluk sorunlarının önüne geçmeyi amaçlamıştır.

Dilin Temel Felsefesi ve Tasarım Prensipleri

REXX'un tasarımında merkezi olan birkaç temel prensip bulunmaktadır. Bunların en önemlisi, "okunabilirlik ve anlaşılırlık üzerine kurulu bir dil" fikridir. Cowlishaw, bir programın yazılma süresinden çok, bakım ve değiştirme süresinin uzun olduğunu gözlemleyerek, sözdizimini (syntax) son derece serbest ve insan diline yakın hale getirmiştir. Bu, kodun kendini belgeleyen (self-documenting) bir nitelik kazanmasına olanak tanır.

Dilin ikinci temel prensibi, esneklik ve dayanıklılıktır (resilience). REXX, birçok durumda programcıyı hatalardan korumak için "makul varsayılanlar" politikasını benimser. Örneğin, tanımlanmamış bir değişken kullanıldığında, çoğu dil hata verirken REXX bu değişkenin adını büyük harfe çevirerk (uppercase) ve değerini kendisi atayarak (genellikle değişkenin adı) yürütmeye devam eder. Bu yaklaşım, prototipleme ve hızlı geliştirme için idealdir.

Tasarım Prensibi Açıklama Uygulamadaki Örneği
Serbest Format Satır sonu dışında noktalama zorunluluğu yoktur. İfadeler boşluklarla ayrılır. `SAY "Merhaba"` ile `SAY"Merhaba"` aynıdır.
Dinamik Veri Tipleri Tüm veriler string (karakter dizisi) olarak işlenir, gerektiğinde sayıya dönüştürülür. `"10" + "20"` ifadesi sonucu `30` sayısını verir.
Kapsamlı Hata Yönetimi Programcıya, tüm hataları yakalama ve uygun şekilde ele alma imkanı tanınır. `SIGNAL ON SYNTAX`, `SIGNAL ON ERROR` direktifleri.
Güçlü String İşleme Metin işleme, dilin birinci sınıf özelliğidir. Çok sayıda yerleşik fonksiyon sunar. `WORD()`, `POS()`, `SUBSTR()`, `TRANSLATE()` fonksiyonları.

Üçüncü bir önemli prensip, dilin genişletilebilirliğidir (extensibility). REXX, harici komutları ve işlevleri çağırmak için mükemmel bir mekanizma sunar. Bir REXX programından, işletim sisteminin kabuk komutları (DIR, LS, COPY gibi) veya diğer yürütülebilir programlar, sanki dilin bir parçasıymış gibi çağrılabilir. Bu özellik, onu sistem yönetimi ve otomasyon için ideal bir "tutkal dili" (glue language) yapar. Ayrıca, dilin çekirdeği, kullanıcı tanımlı fonksiyonlar ve harici kütüphaneler (function packages) ile kolayca genişletilebilir.

Temel Sözdizimi ve Yapısal Özellikler

REXX sözdiziminin en belirgin özelliği, neredeyse hiçbir zorunlu noktalama işareti veya özel karakter gerektirmemesidir. Program akışı, temel olarak CLAUSE adı verilen mantıksal birimler tarafından yönetilir. Bir clause genellikle bir satır sonu ile biter, ancak noktalı virgül (`;`) ile birden fazla clause aynı satıra yazılabilir. Değişkenler, herhangi bir beyan (declaration) gerektirmeden dinamik olarak oluşturulur ve tümü büyük harfe çevrilmiş stringler olarak saklanır. Bu, `myVar`, `MYVAR` ve `MyVar`'ın tümünün aynı bellek konumunu işaret ettiği anlamına gelir.

Dil, akış kontrolü için geleneksel yapıları sunar: `IF...THEN...ELSE`, `SELECT...WHEN...OTHERWISE`, `DO...END` döngüleri ve `DO` döngüsünün çeşitli varyasyonları (`DO WHILE`, `DO UNTIL`, `DO n TIMES`). `DO...END` bloğu, sadece döngü değil, aynı zamanda genel amaçlı bir gruplama mekanizmasıdır. REXX'teki döngülerin ve koşullu ifadelerin önemli bir özelliği, kontrol değişkenlerinin döngü veya blok sonunda otomatik olarak yok edilmemesi, programın geri kalanında erişilebilir kalmasıdır.

REXX, güçlü bir yerleşik fonksiyon kütüphanesine sahiptir. Bu fonksiyonlar genellikle bir veya daha fazla argüman alır ve bir değer döndürür. Örneğin, `LENGTH(string)` bir stringin uzunluğunu, `SUBSTR(string, n, m)` n'inci pozisyondan başlayarak m karakteri, `WORD(string, n)` ise string içindeki n'inci boşlukla ayrılmış kelimeyi döndürür. Aritmetik operatörler (`+`, `-`, `*`, `/`, `%` (tamsayı bölme), `//` (kalan)) standart matematiksel önceliğe sahiptir, ancak parantezlerle bu öncelik kolayca değiştirilebilir.


/* REXX'te Basit Bir Program Örneği */
SAY 'Lütfen bir sayı girin:'
PULL sayi
toplam = 0
DO i = 1 TO sayi
  toplam = toplam + i
END
SAY '1' sayi 'arasındaki sayıların toplamı:' toplam
/* Değişkenlerin durumunu kontrol et */
SAY 'Döngü değişkeni i'nin son değeri:' i

Fonksiyon ve subroutine çağrıları da dilin temel taşlarındandır. Kullanıcı tanımlı bir fonksiyon `PROCEDURE` ifadesi ile başlar ve `RETURN` ile bir değer döndürür. `PROCEDURE` kullanılmazsa, fonksiyon çağrıldığı ortamdaki tüm değişkenlere erişebilir (exposed variables). Subroutine'ler ise `CALL` komutu ile çağrılır ve değişkenleri argüman olarak alabilir, `RETURN` ile ana programa dönebilir. Bu mekanizma, modüler programlama için güçlü bir altyapı sağlar.

Veri Türü / Yapı REXX'taki İşlenişi Önemli Sonuç
Sayılar (Numbers) Hesaplamalarda kullanılana kadar string olarak saklanır. Otomatik dönüşüm uygulanır. Arbitrary-precision aritmetik (keyfi hassasiyet) varsayılan olarak desteklenir.
Stringler (Karakter Dizileri) Tüm verinin temel temsilidir. Concatenation boşluk veya `||` operatörü ile yapılır. Metin işleme operasyonları son derece verimli ve sezgiseldir.
Stem Variables (Kök Değişkenler) Nokta (`.`) ile biten ve dizi/kompleks veri yapısı oluşturmaya yarayan değişkenler. `sınıf.1 = "Ali"` şeklinde kullanılır. Bu, asosiyatif dizi benzeri bir yapıdır.
Parçalı Değerlendirme `INTERPRET` komutu, runtime'da bir stringi REXX kodu olarak yorumlatır. Dinamik kod üretimi ve yürütülmesine izin verir, ancak güvenlik riski taşıyabilir.
  • Basit Atama: `degisken = ifade` şeklindedir. Sağdaki ifade hesaplanır, sonuç stringe dönüştürülür ve soldaki değişkene atanır.
  • Karşılaştırma Operatörleri: `=`, `>`, `<`, `>=`, `<=`, `<>` veya `\=` (eşit değil), `==` (tamamen eşit, boşlukları da dikkate alarak).
  • Mantıksal Operatörler: `&` (AND), `|` (OR), `&&` (exclusive OR), `\` veya `¬` (NOT). Bu operatörler bitwise değil, boolean olarak çalışır.
  • Özel Değişkenler: `RC` (Return Code - son çalışan komutun çıkış kodu), `RESULT` (CALL'dan dönen değer), `SIGL` (hatanın oluştuğu satır numarası).

Hata yönetimi, REXX'in güçlü olduğu bir diğer alandır. `SIGNAL` komutu, belirli hata koşulları (`SYNTAX`, `ERROR`, `FAILURE`, `HALT`, `NOVALUE`) oluştuğunda program akışını önceden tanımlanmış bir etikete yönlendirir. Bu, programcıya hataları zarif bir şekilde ele alma ve kaynakları temizleme şansı verir. Ayrıca, `CALL ON` yapısı da benzer şekilde subroutine çağrıları sırasında hata yakalamak için kullanılabilir.

Son olarak, debugging ve izleme (tracing) için dil içi destek bulunmaktadır. `TRACE` komutu, programın adım adım yürütülmesini, değişken değerlerinin değişimini ve hesaplamaların ara sonuçlarını göstererek, karmaşık programların hatasını ayıklamada paha biçilmez bir araçtır. `TRACE ?R` gibi interaktif modlar, kodu durdurup kullanıcıdan yön almaya olanak tanır.

İşletim Sistemi ve Platform Bağımsızlığı

REXX'in en önemli başarılarından biri, tasarımından itibaren platform bağımsızlığı göz önünde bulundurularak geliştirilmiş olmasıdır. Dilin çekirdek spesifikasyonu, herhangi bir işletim sistemine özgü özelliklerden mümkün olduğunca arındırılmıştır. Bu taşınabilirlik, 1980'lerin sonunda İşletim Sistemleri Arabirimi (Operating System Interfaces) standardizasyonu ile resmiyet kazanmıştır. Bir REXX programı, temel I/O operasyonları, dosya yönetimi ve sistem komutu çağırma gibi işlevler için standartlaştırılmış fonksiyonlar (`LINEIN()`, `LINEOUT()`, `CHARIN()`, `CHAROUT()`, `STREAM()`) kullanır. Bu fonksiyonların altındaki gerçek sistem çağrıları, REXX interpretörü (yorumlayıcısı) tarafından soyutlanır.

Dilin platformlar arası yayılımını sağlayan kilit gelişme, 1990'larda ortaya çıkan Regina REXX ve later ooRexx (Open Object Rexx) gibi açık kaynak implementasyonlarıdır. Regina REXX, POSIX uyumlu sistemler (Linux, Unix, BSD varyantları) üzerinde çalışacak şekilde yazılmış ve dilin anaçatı dışındaki en popüler yorumlayıcısı haline gelmiştir. Benzer şekilde, Kilowatt Software'in Personal REXX'i ve sonrasında Regina Windows portları, dilin kişisel bilgisayar platformlarında da kullanılabilir olmasını sağlamıştır.

Bu bağımsızlık, uygulama geliştiricilere önemli avantajlar sağlar. Bir sistem yönetimi betiği, minimal değişikliklerle (genellikle sadece sistem-specific komut satırları değiştirilerek) bir IBM z/OS anaçatısından bir Linux sunucusuna veya bir Windows istemcisine taşınabilir. Bu, kurumsal ortamlarda çoklu platform desteği gerektiren otomasyon görevlerinde REXX'i stratejik bir araç haline getirmiştir.

Ancak, platform bağımsızlığının pratikteki sınırları da vardır. Özellikle, işletim sisteminin doğrudan çağrıldığı harici komutlar (`'dir'` veya `'ls'`), grafiksel kullanıcı arayüzü (GUI) işlemleri veya platforma özgü API'lere erişimler, kodun taşınabilirliğini kırar. İleri seviye, taşınabilir REXX programları yazmak isteyen geliştiriciler, bu tür çağrıları `PARSE SOURCE` ve `PARSE VERSION` gibi komutlarla tespit edilen ortama göre koşullandırarak veya tüm platformlar için ortak çözümler sunan harici kütüphaneler kullanarak yönetmelidir.

Ana Dil Varyantları: Classic Rexx ve ooRexx

REXX dilinin evrimi, iki ana kola ayrılmıştır: Classic Rexx (veya Standard Rexx) ve Object-Oriented Rexx (ooRexx). Classic Rexx, ANSI X3.274-1996 standardı ile tanımlanan, nesne yönelimli olmayan orijinal dil spesifikasyonunu ifade eder. IBM'in anaçatı sistemlerinde varsayılan olarak gelen TSO/E REXX, z/OS REXX ve açık kaynaklı Regina REXX bu kategoriye girer. Tüm temel sözdizimi, yapısal özellikler ve tasarım felsefesi Classic Rexx ile şekillenmiştir. Bu varyant, özellikle betik tabanlı otomasyon, sistem yönetimi ve veri işleme görevlerinde hala altın standart olarak kabul edilir.

Object-Oriented Rexx (ooRexx) ise, 1990'ların ortalarında Mike Cowlishaw tarafından başlatılan ve dilin nesne yönelimli paradigmaları destekleyecek şekilde genişletilmesini sağlayan bir evrimdir. ooRexx, Classic Rexx ile tamamen geriye dönük uyumludur; her Classic Rexx programı, bir ooRexx yorumlayıcısında sorunsuz çalışır. Ancak, ooRexx sınıflar (classes), nesneler (objects), kalıtım (inheritance) ve polimorfizm (polymorphism) gibi modern kavramları dilin esnek ve okunabilir yapısına entegre eder. Örneğin, bir `Directory` veya `Bag` koleksiyonu oluşturmak, kök değişkenler (stem variables) ile uğraşmaktan çok daha sistematik ve güçlüdür.

Karakteristik Classic Rexx (ANSI Standard) Object-Oriented Rexx (ooRexx)
Programlama Paradigması Yapısal, prosedürel, makro. Tamamen nesne yönelimli, prosedürel (geriye uyumlu).
Veri Soyutlama Stem variables (kök değişkenler) ile kompozisyon. Sınıflar, Metotlar, Özellikler (Attributes) ile kapsülleme.
Kod Tekrar Kullanımı Fonksiyonlar, subroutine'ler ve harici dosyalar ile. Kalıtım, kompozisyon ve kütüphaneler (Class libraries) ile.
Dağıtım ve Topluluk IBM lisanslı ürünleri, Regina REXX (açık kaynak). IBM'in RexxLA konsorsiyumu tarafından açık kaynak geliştirilir.
Ana Kullanım Alanı Sistem otomasyonu, batch işlemleri, hızlı prototipleme. Daha büyük uygulama geliştirme, GUI programlama (e.g., RexxGD).

İki varyant arasındaki geçişi anlamak için basit bir örnek verilebilir. Bir isim listesini yönetmek için Classic Rexx'te bir kök değişken dizisi kullanılırken (`isimler.1 = "Ali"`, `isimler.2 = "Veli"`), ooRexx'te bir `Array` veya `List` sınıfının metotları kullanılabilir. Bu, veri yapıları üzerinde sıralama, filtreleme ve arama gibi işlemleri çok daha kolay ve hatasız hale getirir. ooRexx ayrıca, hata yönetimi için istisna mekanizması (exception handling) sunarak `RAISE` ve `CATCH` yapılarını dilin bir parçası haline getirir.

Günümüzde, Rexx Language Association (RexxLA) dilin gelişimini ve standartlarını yöneten ana kuruluştur. RexxLA, hem Classic Rexx spesifikasyonunun koruyucusu hem de ooRexx'in resmi geliştiricisidir. Bu organizasyon, dilin açık kaynak topluluğu tarafından sürdürülebilirliğini garanti altına almaktadır. Regina REXX gibi implementasyonlar, her iki varyantı da destekleyerek kullanıcılara esneklik sağlar.

Sonuç olarak, dilin bu iki yüzü, farklı ihtiyaçlara hitap eder. Klasik sistem yöneticisi için hızlı, güvenilir ve her yerde çalışan betikler yazmak amacıyla Classic Rexx yeterli ve hatta tercih edilirken, daha karmaşık ve bakımı zor uygulamalar geliştirenler için ooRexx'in sunduğu soyutlama seviyeleri ve yapısal disiplin vazgeçilmezdir.

Uygulama Alanları ve Modern Kullanımı

REXX'in tarihsel gücü, IBM anaçatı (mainframe) ekosistemindeki merkezi rolünden gelir. Bu ortamlarda, JCL (Job Control Language) ile birlikte veya onun yerine batch iş akışlarını yönetmek, sistem kaynaklarını izlemek (örneğin, RACF güvenlik yönetimi), veri setlerini (datasets) işlemek ve uygulama yazılımlarına (CICS, IMS, Db2) arayüz oluşturmak için yaygın olarak kullanılır. Bu bağlamda REXX, sadece bir betik dili değil, aynı zamanda kurumsal IT operasyonlarının omurgasını oluşturan kritik bir operasyonel araçtır.

Anaçatı dışında, REXX'in taşınabilirliği onu çeşitli niş alanlarda değerli kılmıştır. AmigaOS gibi eski sistemlerde, sistem komut dosyası dili olarak derinlemesine entegre edilmiştir. Günümüzde ise, özellikle legacy sistemlerin bakımı, migrasyon projeleri ve çapraz-platform otomasyon araçlarında varlığını sürdürmektedir. Örneğin, birçok kurum, farklı işletim sistemlerinde çalışan dağıtık süreçleri koordine etmek için ince REXX sarmalayıcı betikleri (wrapper scripts) kullanır.

  • Sistem ve Ağ Yönetimi: Konfigürasyon dosyalarının oluşturulması, log analizi, yedekleme senaryolarının otomatikleştirilmesi, SNMP veya basit soket operasyonları için araçlar.
  • Uygulama Prototipleme ve Test: Karmaşık algoritmaların veya veri dönüşüm mantığının, düşük ek yükle hızla modellenmesi. Bir API'nin davranışını simüle eden mock servislerin yazılması.
  • Veri İşleme ve Raporlama: Düz metin, CSV veya sabit genişlikli dosya formatlarından veri çıkarma, dönüştürme, birleştirme (ETL benzeri görevler) ve özet raporlar üretme.
  • Diğer Diller ve Sistemler için 'Tutkal' (Glue): C, Java veya .NET gibi dillerde yazılmış bileşenleri bir araya getiren, komut satırı argümanlarını yöneten ve çıktıyı formatlayan kontrol betikleri.

Modern yazılım geliştirme pratikleri bağlamında, REXX kendine yeni nişler bulmuştur. DevOps ve CI/CD (Sürekli Entegrasyon/Sürekli Teslim) pipeline'larında, özellikle anaçatı kaynaklı artefaktların (artifact) işlenmesi aşamasında kullanılabilir. Ayrıca, Rexx ile yazılmış mevcut kurumsal mantığın mikroservis mimarilerine adapte edilmesi projelerinde, REXX programları container'lar içinde paketlenerek REST API'ler sunan hafif hizmetlere dönüştürülebilmektedir.

Dilin geleceğini şekillendiren bir diğer faktör, özel amaçlı interpreter'ların ve araçların varlığıdır. Örneğin, NetRexx (ayrıca Cowlishaw tarafından geliştirilmiştir) REXX benzeri bir sözdizimini Java bytecode'a derleyerek, REXX programcılarının Java platformunun gücünden ve kütüphanelerinden yararlanmasına olanak tanır. Benzer şekilde, BREXX gibi hafif yorumlayıcılar, gömülü sistemler veya kaynağın kısıtlı olduğu ortamlar için uygundur.

Güçlü ve Zayıf Yönlerinin Analizi

REXX programlama dilinin akademik ve pratik açıdan değerlendirilmesi, benzersiz bir dengeyi ortaya koyar. Dilin en belirgin güçlü yanı, daha önce de vurgulandığı üzere, üstün okunabilirlik ve düşük öğrenme eğrisidir. Sözdizimsel katılıkların minimize edilmesi, programcıyı dilin kendisiyle değil, çözmeye çalıştığı problemle uğraşmaya teşvik eder. Bu özellik, onu domain expert'lerin (alan uzmanlarının) doğrudan katkıda bulunabildiği bir araç haline getirir; örneğin, bir finans uzmanı karmaşık bir hesaplama algoritmasının prototipini, profesyonel bir yazılımcıya ihtiyaç duymadan geliştirebilir.

Dilin ikinci büyük avantajı, sağlam hata toleransı ve kapsamlı hata yönetimi yetenekleridir. Tanımsız değişkenlerin otomatik olarak ele alınması, programın önemsiz hatalarda bile çalışmaya devam etmesini sağlar. Bu, özellikle interaktif veya batch ortamlarda çalışan, operasyonel bakım betikleri için kritik öneme sahiptir. Bir betiğin tamamen çökmesi yerine, bir hata mesajı verip kontrollü bir şekilde sonlanması veya alternatif bir yola sapması, sistem güvenilirliğini artırır. Ayrıca, `TRACE` mekanizması ile sunlan şeffaf debugging ortamı, karmaşık mantık hatalarının bulunmasını diğer birçok script diline kıyasla daha kolay hale getirir.

REXX'in üçüncü güçlü yönü, tasarımının getirdiği mükemmel genişletilebilirlik ve entegrasyon kapasitesidir. Dil, harici komutları ve programları doğal bir parçasıymış gibi çağırabilir (`ADDRESS` komutu). Bu, onu gerçek anlamda bir "sistem dili" yapar. Bir REXX betiği, bir veritabanı sorgusunu çalıştırabilir, bir ağ dosyasını indirebilir, bir dosyayı dönüştürebilir ve sonucu e-posta ile gönderebilir; tüm bu adımlar farklı harici araçların koordinasyonuyla gerçekleşir. Bu özellik, modern microservices veya serverless mimarilerinde bile, var olan araçları birbirine bağlamak için kullanışlı olabilir.

Ancak, REXX'in modern yazılım geliştirme bağlamında bazı önemli zayıflıkları ve eleştirilen yönleri de bulunmaktadır. En temel eleştiri, dilin performans karakteristiğine yöneliktir. Dinamik yorumlanan (interpreted) bir dil olması, her değişkenin string olarak işlenmesi ve arbitrary-precision aritmetiğin maliyeti, hesaplama-yoğun (computation-intensive) görevlerde C, Java veya Python (NumPy ile) gibi dillere kıyasla önemli ölçüde daha yavaş çalışmasına neden olur. Bu nedenle REXX, CPU-bound problemlerden ziyade I/O-bound veya koordinasyon görevleri için uygundur.

İkinci bir zayıflık, modern yazılım mühendisliği pratikleri ve ekosistemiyle sınırlı entegrasyondur. Dilin standart kütüphanesi, ağ programlama (sockets, HTTP), modern veri formatları (JSON, XML parsers) veya gelişmiş eşzamanlılık (concurrency) için güncel modüller sunmaz. Bu tür ihtiyaçlar, genellikle harici, platforma özgü kütüphanelere veya diğer dillerle yazılmış yardımcı programlara bağımlılık yaratır. Ayrıca, büyük ölçekli projelerde modülerliği ve bağımlılık yönetimini sağlamak, Java'nın Maven'i veya Python'un pip'i gibi merkezi bir paket yöneticisinin olmaması nedeniyle daha zordur.

Son olarak, dilin topluluk ve popülerlik dinamikleri bir diğer sınırlayıcı faktördür. REXX, 1980'lerin ve 1990'ların teknoloji dünyasında bir dev olmasına rağmen, 2000'lerden sonra Python, Ruby ve JavaScript gibi dillerin yükselişi karşısında popülaritesini koruyamamıştır. Bu, yeni kütüphanelerin, framework'lerin, eğitim materyallerinin ve iş fırsatlarının azalması anlamına gelir. Genç nesil yazılımcılar arasında farkındalığı düşüktür, bu da dilin sürdürülebilirliği ve yenilikçiliği konusunda uzun vadeli endişeler doğurmaktadır. Ancak, bu durum aynı zamanda REXX'i, özellikle legacy sistemlerin sürdürülmesi ve modernizasyonu gibi niş ve kritik alanlarda uzmanlaşmış geliştiriciler için değerli ve az bulunur bir beceri haline getirmektedir.