Kontentke ótiw

Apache Groovy

Wikipedia — erkin enciklopediya
Groovy
Paradigmaları Kóp paradigmalı: obyektke baǵdarlanǵan, imperativ, funkcional, aspektke baǵdarlanǵan, skriptlew
Dóretiwshi Djeyms Streychen
Baǵdarlamashılar
  • Pol King (PMC Baslıǵı)
  • Yoxen Teodoru (Texnikalıq jetekshi)
  • Giyom Laforj
  • Sedrik Shampo
  • Daniel San
  • Erik Mills
Birinshi payda bolıwı 2003-jıl
Turaqlı reliz 5.0.1 (7-sentyabr, 2025-jıl)
Tiplestiriw tártibi Dinamikalıq, statikalıq, kúshli, duck
Platforma Java SE
Licenziya Apache License 2.0
Fayl keńeytpeleri .groovy, .gvy, .gy, .gsh
Veb-saytı groovy-lang.org

Apache Groovy — bul Java platformasına arnalǵan, Java sintaksisine sáykes keletuǵın obyektke baǵdarlanǵan programmalastırıw tili. Ol Python, Ruby hám Smalltalk tillerindegige uqsas ózgeshelikleri bar statikalıq hám dinamikalıq til bolıp tabıladı. Ol Java Platforması ushın programmalastırıw tili de, skriptlew tili retinde de qollanılıwı múmkin, Java virtual mashinası (JVM) bayt-kodına kompilyaciya etiledi hám basqa Java kodı hám kitapxanaları menen tegis óz-ara islesedi. Groovy Javaǵa uqsas figuralı qawsırmalı sintaksisti paydalanadı. Groovy jabıwlardı, kóp qatarlı qatarlardı hám qatarlarǵa jaylastırılǵan ańlatpalardı qollap-quwatlaydı. Groovydiń kúshiniń úlken bólimi onıń annotaciyalar arqalı iske túsiriletuǵın AST transformaciyalarında.

Groovy 1.0 2007-jıl 2-yanvarda, al Groovy 2.0 2012-jıl iyulda shıǵarıldı. 2-versiyadan baslap, Groovy statikalıq kompilyaciyalana aladı, bul tipti shıǵarıw hám ónimdarlıqtıń Javaǵa jaqın bolıwın usınadı[1][2]. Groovy 2.4 Pivotal Software qáwenderligindegi sońǵı iri reliz boldı, bul qáwenderlik 2015-jıl martta tamamlandı[3]. Sonnan berli Groovy óziniń basqarıw strukturasın Apache Programmalıq Támiynat Fondındaǵı Proektti Basqarıw Komitetine ózgertti[4].

Tariyxı

Djeyms Streychen birinshi ret Groovydi islep shıǵıw haqqında 2003-jıl avgust ayında óz blogında ayttı[5]. 2004-jıl martta Groovy Java Jámiyetshilik Processine (JCP) JSR 241 retinde usınıldı hám dawıs beriw arqalı qabıl etildi. 2004 hám 2006-jıllar arasında bir neshe versiyalar shıǵarıldı. JCP standartlastırıw jumısı baslanǵannan keyin, versiya nomerleniwi ózgerdi hám «1.0» dep atalǵan versiya 2007-jıl 2-yanvarda shıǵarıldı. 1.1 nomerli hár túrli beta hám reliz kandidatlarınan keyin, 2007-jıl 7-dekabrde Groovy 1.1 Final shıǵarıldı hám kirgizilgen kóplegen ózgerislerdi sáwlelendiriw ushın tez arada Groovy 1.5 dep qayta nomerlendi.

2007-jılı Groovy JAX 2007 innovaciya sıylıǵında birinshi orındı iyeledi[6]. 2008-jılı Groovy veb-freymvorkı Grails JAX 2008 innovaciya sıylıǵında ekinshi orındı iyeledi[7].

2008-jıl noyabr ayında SpringSource Groovy hám Grails kompaniyasın (G2One) satıp aldı[8]. 2009-jıl avgust ayında VMware SpringSource-tı satıp aldı[9].

2012-jıl aprel ayında, segiz jıllıq belsendiliksizlikten keyin, Specifikaciya jetekshisi JSR 241 statusın belsendi emes dep ózgertti[10].

Streychen proektten 2007-jılı Groovy 1.0 relizinen bir jıl aldın únsiz ketken edi. 2016-jıl oktyabr ayında Streychen bılay dedi: «Men ele de groovy-di (jenkins pipeline-ları júdá groovy!), java, go, typescript hám kotlin-di jaqsı kóremen»[11].

2012-jıl 2-iyulda Groovy 2.0 shıǵarıldı, ol basqa jańa ózgeshelikler menen birge, statikalıq kompilyaciyalawdı hám statikalıq tip tekseriwin qostı.

EMC Corporation (EMC) hám VMware tárepinen 2013-jıl aprel ayında Pivotal Software birlesken kárxanası dúzilgende, Groovy hám Grails onıń ónim portfeliniń bir bólimin quradı. Pivotal 2015-jıl aprel ayınan baslap Groovy hám Grails-ke qáwenderlikti toqtattı. Sol ayda Groovy óziniń basqarıw strukturasın Codehaus repozitoriyasınan Apache Programmalıq Támiynat Fondınıń inkubatorı arqalı Proektti Basqarıw Komitetine (PMC) ózgertti. Groovy Apache inkubatorınan shıǵıp, 2015-jıl noyabr ayında joqarı dárejeli joybarǵa aylandı[12].

2020-jıl 7-fevralda Groovy 3.0 shıǵarıldı[13]. 4.0 versiyası 2022-jıl 25-yanvarda shıǵarıldı[14].

Ózgeshelikleri

Kópshilik jaramlı Java faylları sonday-aq jaramlı Groovy faylları bolıp tabıladı. Eki til uqsas bolsa da, Groovy kodı anaǵurlım ıqsham bolıwı múmkin, sebebi oǵan Java talap etetuǵın barlıq elementler kerek emes. Bul Java baǵdarlamashılarına anaǵurlım kóbirek Groovy programmalastırıw idiomaların iyelewden aldın, tanıs Java sintaksisinen baslap, Groovydi basqıshpa-basqısh úyreniwge imkaniyat beredi[15].

Javada bolmaǵan Groovy ózgesheliklerine statikalıq hám dinamikalıq tiplestiriw (def gilt sózi menen), operatorlardı artıqsha júklew, dizimler hám associativ massivler (kartalar) ushın jergilikli sintaksis, turaqlı ańlatpalar ushın jergilikli qollap-quwatlaw, polimorfli iteraciya, qatar interpolyaciyası, qosımsha járdemshi metodlar hám null kórsetkishlerdi avtomat túrde tekseriw ushın qáwipsiz navigaciya operatorı ?. (mısalı, variable?.method() yamasa variable?.field) kiredi[16].

2-versiyadan baslap, Groovy sonday-aq modullikti (proekt paydalanatuǵın tek ǵana jar faylların jetkerip beriw, usılayınsha Groovy kitapxanasınıń kólemin azaytıw), tip tekseriwin, statikalıq kompilyaciyanı, Project Coin sintaksis jaqsılanıwların, multicatch blokların hám Java 7-de kirgizilgen invokedynamic kórsetpesin paydalanıp, úziliksiz ónimdarlıqtı arttırıwdı qollap-quwatlaydı[17].

Groovy XML hám HTML sıyaqlı belgilew tillerin ishki Hújjet Obyekt Modeli (DOM) sintaksisin qollanıw arqalı tábiyiy túrde qollap-quwatlaydı. Bul ózgeshelik bir qıylı hám qısqa sintaksis penen programmalastırıw metodologiyası járdeminde kóplegen túrdegi hár túrli maǵlıwmat aktivlerin anıqlawǵa hám basqarıwǵa imkaniyat beredi.

Javadan ayırmashılıǵı, Groovy derek kodı faylı, eger ol hár qanday klass anıqlamasınan tıs kodtı óz ishine alsa, eger ol main metodı bar klass bolsa, yamasa ol Runnable yamasa GroovyTestCase bolsa, (kompilyaciyalanbaǵan) skript retinde orınlanıwı múmkin. Groovy skripti orınlanıwdan aldın tolıq analizlenedi, kompilyaciya etiledi hám generaciya etiledi (Python hám Ruby sıyaqlı). Bul jasırın túrde júz beredi hám kompilyaciyalanǵan versiya process artefaktı retinde saqlanbaydı.

GroovyBeans, qásiyetler

GroovyBeans — bul Groovydiń JavaBeans versiyası. Groovy jasırın túrde getterler hám setterlerdi payda etedi. Tómendegi kodta setColor(String color) hám getColor() jasırın túrde payda etiledi. Sońǵı eki qatar, color-ǵa tikkeley kiriwge urınǵan sıyaqlı kórinedi, biraq negizinde jasırın payda etilgen metodlardı shaqıradı.

class AGroovyBean {
  String color
}

def myGroovyBean = new AGroovyBean()

myGroovyBean.setColor('baby blue')
assert myGroovyBean.getColor() == 'baby blue'

myGroovyBean.color = 'pewter'
assert myGroovyBean.color == 'pewter'

Groovy Javanıń massiv sintaksisin esletetuǵın, dizimler hám kartalar menen islesiw ushın ápiwayı, izbe-iz sintaksisti usınadı.

def movieList = ['Dersu Uzala', 'Ran', 'Seven Samurai'] // Massivke uqsaydı, biraq bul dizim
assert movieList[2] == 'Seven Samurai'
movieList[3] = 'Casablanca' // Dizimge element qosadı
assert movieList.size() == 4

def monthMap = [ 'January' : 31, 'February' : 28, 'March' : 31 ] // Kartanı járiyalaydı
assert monthMap['March'] == 31 // Jazıwǵa kiredi
monthMap['April'] = 30 // Kartaǵa jazıw qosadı
assert monthMap.size() == 4

Prototip keńeytpesi

Groovy ExpandoMetaClass, Keńeytpe Modulleri (tek Groovy 2-de), Objective-C-ge uqsas Kategoriyalar hám DelegatingMetaClass arqalı prototip keńeytpesin qollap-quwatlaydı[18].

ExpandoMetaClass Rubydiń ashıq klass koncepciyasına uqsas, klassqa kirgizilgen ózgerislerdi ańsat ańlatıw ushın arnawlı taraw tili (DSL) usınadı:

Number.metaClass {
  sqrt = { Math.sqrt(delegate) }
}

assert 9.sqrt() == 3
assert 4.sqrt() == 2

Groovydegi kodqa prototiplew arqalı kirgizilgen ózgerisler Javada kórsetilmeydi, sebebi Groovydegi hárbir atribut/metod shaqırıwı metaklass registri arqalı ótedi. Ózgertilgen kodqa Javadan tek metaklass registrine barıw arqalı ǵana kiriwge boladı.

Derekler

  1. «Groovy 2.0 Performance compared to Java» (25-avgust 2012-jıl).
  2. «Java vs Groovy2.0 vs Scala Simple Performance Test» (10-iyul 2012-jıl). 10-dekabr 2012-jılda túp nusqadan arxivlendi. Qaraldı: 7-oktyabr 2012-jıl.
  3. «Groovy 2.4 And Grails 3.0 To Be Last Major Releases Under Pivotal Sponsorship» (19-yanvar 2015-jıl).
  4. «Groovy joins Apache Incubator» (11-mart 2015-jıl).
  5. James Strachan. «Groovy - the birth of a new dynamic language for the Java platform» (29-avgust 2003-jıl). 1-sentyabr 2003-jılda túp nusqadan arxivlendi.
  6. «Groovy wins first prize at JAX 2007 innovation award» (26-aprel 2007-jıl). 13-may 2015-jılda túp nusqadan arxivlendi. Qaraldı: 7-oktyabr 2012-jıl.
  7. «They say a lot can happen over a cup of coffee». 19-aprel 2011-jılda túp nusqadan arxivlendi. Qaraldı: 7-oktyabr 2012-jıl.
  8. «SpringSource Acquires Groovy and Grails company (G2One)» (11-noyabr 2008-jıl).
  9. «VMWare Acquires SpringSource» (10-avgust 2009-jıl).
  10. «Java Community Process JSR 241».
  11. «Tweet from James Strachan» (24-noyabr 2016-jıl). Qaraldı: 24-noyabr 2016-jıl.
  12. «Announcement on dev mailing list».
  13. «Release GROOVY_3_0_0 · apache/groovy» (en). GitHub. Qaraldı: 27-mart 2024-jıl.
  14. «Release GROOVY_4_0_0 · apache/groovy» (en). GitHub. Qaraldı: 27-mart 2024-jıl.
  15. «Groovy style and language feature guidelines for Java developers». Groovy.codehaus.org. 17-yanvar 2015-jılda túp nusqadan arxivlendi. Qaraldı: 22-yanvar 2015-jıl.
  16. «Groovy – Differences from Java». Groovy.codehaus.org. 17-mart 2009-jılda túp nusqadan arxivlendi. Qaraldı: 12-avgust 2013-jıl.
  17. «What's new in Groovy 2.0?» (28-iyun 2012-jıl).
  18. «JN3525-MetaClasses». 1-oktyabr 2012-jılda túp nusqadan arxivlendi. Qaraldı: 7-oktyabr 2012-jıl.