Yeni Rhombus programlama dili: Makroların gücü okunabilir sözdizimiyle buluşuyor

kapanış bildirimi

Bu makale İngilizce olarak da mevcuttur. Teknik yardımla tercüme edildi ve yayınlanmadan önce editoryal olarak gözden geçirildi.

Geleneksel olarak programcıların makro programlama söz konusu olduğunda iki uç nokta arasında seçim yapması gerekir: güçlü bir makro sistemi veya okunması kolay bir sözdizimi. 22 Haziran 2026'da yayımlanan 1.0 sürümündeki yeni Rhombus dili, her ikisine de eşit derecede sahip olmayı amaçlıyor: eski bir makro sözdizimi anlaşmazlığına yeni başlayanlar için uygun bir bakış ve buna modern bir yanıt.

Duyurudan sonra devamını okuyun

Stefan Wintermeyer, yazılım ve sistem mimarisi alanında danışman ve eğitmendir. Odak noktası: Phoenix, Ruby on Rails, Web-Perf, Asterisk/VoIP, yapay zeka ve aracı programlama, etkili iş akışları ve kullanıcı davranışı modelleme.

Rhombus stabildir ve olgun Racket platformuna dayanmaktadır, ancak dil olarak hala gençtir ve küçük bir ekosisteme sahiptir. Yani bir sonraki üretim projesi için bariz bir seçim yerine keşfedilecek bir şey.

Rhombus'un arkasındaki ekip, Lisp ailesinden gelen, onlarca yıldır araştırma ve öğretimde kullanılan ve özellikle güçlü makro sistemiyle tanınan yerleşik bir dil olan Racket'tir. Ekip, Rhombus'u ilk kez 2023'teki prestijli OOPSLA programlama dilleri konferansında sundu.

Kısacası Rhombus işlevsel bir çekirdeğe sahip evrensel ve dinamik bir dildir. Veriler varsayılan olarak değişmezdir, işlevler ve ifadeler merkezdedir ve kalıp eşleştirme (veri yapısına dayalı dallanma) dil genelinde yapılır. Dinamik, Python veya Ruby'de olduğu gibi türlerin genellikle çalışma zamanında kontrol edildiği anlamına gelir. Ek olarak Rhombus, nesne yönelimli çalışma için eksiksiz bir sınıf sistemi ve isteğe bağlı doğrulanmış tür özellikleriyle birlikte gelir. Geliştiricilerin işlevsel mi, nesne odaklı mı yoksa karma mı çalışmak istediklerine karar vermek onlara kalmış.

Kavramsal olarak Rhombus üç teknik katmana dayanır.

  1. Çalı notasyonu: Arayüz sözdizimi, yani yazdıklarınız, Python'a benzer şekilde girintiye ve boşluklara duyarlıdır. Bir iki nokta üst üste : bir blok, dikey bir çizgi açar | alternatifleri ve dönüş gruplarına ilişkin kodu vurgular. Bu katman bilinçli olarak genel ve yeniden kullanılabilir olarak tutulmuştur.
  2. Ağaçlandırma: Pratt ayrıştırmasının bir çeşidi (operatörlerin önceliğini çözen bir prosedür, yani nokta hesaplamasının tire hesaplamasından önce geldiğini bilir). Vurgu: Bu analiz, makro genişletme sırasında (yani makrolar kodu yeniden yazarken) gerçekleştirilir. Bu, kendi kendine tanımlanan infix operatörlerinin gerçek öncelik kurallarına sahip olabileceği ve yine de temiz makro sisteme müdahale edebileceği anlamına gelir.
  3. Bağlama boşlukları (birden fazla ad alanı): Aynı tanımlayıcı, bağlama bağlı olarak bir değer, bir bağlama modeli, bir ek açıklama (tür belirtimi) veya bir işleç gibi farklı bir anlama gelebilir.

Tuhaflık: Diğer dillerde derleyicide yerleşik olanların çoğu Rhombus'ta bir kütüphanedir: desen eşleştirme, sınıflar, tür benzeri açıklamalar ve yeni kontrol yapıları. Bu nedenle bu kavram, kullanımı kolay Marco programlama için temeldir.

Duyurudan sonra devamını okuyun

Teknik olarak Rhombus'un sağlam bir temeli vardır: Racket platformunda çalışır, Chez Scheme (özellikle hızlı bir Scheme uygulaması) kullanarak yerel makine kodunu derler ve yerleşik Racket araçlarını kullanır. MIT veya Apache 2.0 lisansı altında açık kaynaklı ve ücretsizdir. Dosyalar .rhm uzantısına sahiptir ve şu satırla başlar: #lang rhombus (benzer #lang racket).

Kotlin Java için ne ise, İksir de Erlang için ne ise Rhombus da Racket için odur. Kanıtlanmış bir çalışma ortamı ortamına dayanan daha modern bir dil.

Programlamış olan herkes bunların çoğunu hemen tanıyacaktır. Örneğin, Merhaba Dünya elmasın içinde şu şekilde görünüyor:


#lang rhombus

println("Hallo, Bob!")

İlk satır #lang rhombus dosyanın yazıldığı dili ve hemen ardından kodu belirler. Küçük bir işlev bile net kalıyor:


#lang rhombus

fun gruesse(wen):
  "Hallo, " +& wen +& "!"

println(gruesse("Bob"))

Bir fonksiyon şununla başlar: funiki nokta gövdelerini açar, girinti onu doldurur (+& iki metni birbirine bağlar). Sonuç “Merhaba Bob!” Her şey aşağı yukarı Python veya Swift tarzında normal, modern bir dil gibi geliyor.

Değerler ile tanımlanır def. Hesaplarken daha yakından bakmaya değer: +& metni bağlayın, + sayılarla hesaplayın.


#lang rhombus

def name = "Welt"
def jahr = 2026

println("Hallo, " +& name +& "!")
println(jahr + 1)

Sonuç (yorum olarak):

// Hallo, Welt!
// 2027

Yukarıdaki örnekte olduğu gibi bir fonksiyon gruesseotomatik olarak son ifadesini döndürür, yazın return gerekli değil. Buradaki haber şu ::-Notasyon: Bir parametreye, yani tip spesifikasyonuna doğrulanmış bir açıklama ekler. a :: Int bu şu anlama geliyor a bir e tamsayı olmalıdır :: Int parametre listesinin arkasında dönüş değeri için aynı şeyi söylüyor. Rhombus, dinamik doğasına uygun olarak bu tür açıklamaları çalışma zamanında kontrol eder; Yani statik bir sistem değil.


#lang rhombus

fun addiere(a :: Int, b :: Int) :: Int:
  a + b

println(addiere(20, 22))

Üretme: // 42

Listeler köşeli parantez içinde yazılmıştır. THE for-Form iki şey yapabilir: yeni bir liste oluşturmak (anlamak) veya bir toplayıcıyla değer eklemek. Akümülatör, her yürütmede yeni bir değer alan ve ardından yürütmeler arasında ara sonucu güncelleyen kolektif bir değişkendir:


#lang rhombus

def zahlen = [1, 2, 3, 4, 5]

def quadrate = for List (z: zahlen):
  z * z

println(quadrate)

def summe = for values(akku = 0) (z: zahlen):
  akku + z

println(summe)

Üretme:

// [1, 4, 9, 16, 25]
// 15

Sayılardan bahsetmişken: Rhombus tam olarak hesaplar. (3 + 4) / 2 kayan nokta sayısını sağlamaz 3.5ancak tam kesirle aynı değer 7/2.

Desen eşleştirme, yani veri yapısına dayalı dallanma, dilin tamamında çalışır. İle match sırayla birkaç şampiyonu kontrol ediyorsunuz, her biri birbirinin arkasında |. İlk eşleşen model kazanır. Üçüncü kalıba dikkat edin [x, y]: Yalnızca tam olarak iki öğeye sahip listelere uygulanır ve bunları böler x VE y.


#lang rhombus

fun beschreibe(ding):
  match ding
  | 0: "die Null"
  | n :: Int: "die Zahl " +& n
  | [x, y]: "ein Paar: " +& x +& " und " +& y
  | other: "etwas anderes"

println(beschreibe(0))
println(beschreibe(42))
println(beschreibe([3, 4]))
println(beschreibe("hallo"))

Üretme:

// die Null
// die Zahl 42
// ein Paar: 3 und 4
// etwas anderes

Bakması güzel: modeller somut değerleri karıştırıyor (0), ek açıklamalar (n :: Int) ve yapılar ([x, y]) tutarlı bir gösterimde.

IDE ekranı

IDE ekranı

DrRacket IDE'de Desen Eşleştirme: İşlev, ilk maçın kazanılmasıyla birlikte desen kontrollerini birbiri ardına açıklar.

Bu aynı zamanda tek tip bir sınıf sistemini de içerir. Bir sınıf kısa ve öz bir şekilde tanımlanır ve nesneleri oluşturmak için kullanılan model, onu parçalara ayırmak için de kullanılabilir:


#lang rhombus

class Rechteck(breite, hoehe)

fun flaeche(r :: Rechteck):
  r.breite * r.hoehe

def r = Rechteck(10, 5)
println(r)
println(flaeche(r))

def Rechteck(b, h) = r
println("Breite: " +& b +& ", Hoehe: " +& h)

Üretme:

// Rechteck(10, 5)
// 50
// Breite: 10, Hoehe: 5

Sondan bir önceki satır dikkat çekicidir: def Rechteck(b, h) = r sınıf adını bir dikdörtgen oluşturmak için değil, onu parçalara ayırmak için kullanın. Bahsedilen bağlama alanlarının garanti ettiği şey tam olarak budur Rechteck konuma bağlı olarak farklı bir anlama gelir.

Diğer bir unsur elipstir ...tekrarların kompakt bir şekilde ifade edilebildiği. Model [x, ...] bir listenin tüm elemanlarını aynı anda bağlar ve listenin oluşturulması sırasında hesaplama eleman elemana göre dağıtılır:


#lang rhombus

def [x, ...] = [1, 2, 3]
def [y, ...] = [10, 20, 30]

println([x + y, ...])

Üretme: [11, 22, 33]

Bu örneklere ek olarak Rhombus, iyi çalışma zamanı karmaşıklığına (örneğin, birçok öğeyle bile çok hızlı olan O(log n'ye ekler) ve hiyerarşik ad alanlarına sahip genel, değişmez işlevsel veri yapıları sunar. Haberin Sonu göre HTML, JSON için kütüphaneler,

Bu noktaya kadar Rhombus kendisini modern ve düzenli bir dil olarak sunuyor. Asıl vurgu, makro programlama seçenekleriyle birlikte gelir.


Yayımlandı

kategorisi

yazarı:

Etiketler:

Yorumlar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir