Eclipse minangka platform teknologi kanggo 1C: Enterprise Development Tools

Mungkin, eclipse wis suwe ora mbutuhake introduksi khusus. Akeh wong sing kenal karo Eclipse amarga alat pangembangan Java Eclipse (JDT). Iki minangka IDE Java open-source populer sing umume pangembang digandhengake karo tembung "Eclipse". Nanging, Eclipse minangka platform sing bisa diperluas kanggo nggabungake alat pangembangan (Platform Eclipse), lan sawetara IDE sing dibangun kanthi basis, kalebu JDT. Eclipse minangka Proyek Eclipse, proyek tingkat paling dhuwur sing ngoordinasi pangembangan Platform Eclipse lan JDT, lan Eclipse SDK, asil saka pangembangan kasebut. Pungkasan, Eclipse minangka Yayasan sumber terbuka kanthi komunitas proyek sing akeh, ora kabeh ditulis ing Jawa utawa ana gandhengane karo alat pangembangan (contone, proyek. Eclipse IoT и Ilmu Eclipse). Donya Eclipse maneka warna.

Ing artikel iki, sing ringkesan ing alam, kita bakal nyoba ndeleng sawetara dhasar arsitektur Eclipse minangka platform kanggo mbangun alat pangembangan terintegrasi lan menehi ide awal babagan komponen Eclipse sing dadi dhasar teknologi kasebut. platform kanggo "Configurator anyar" 1C: Enterprise. 1C: Piranti Pangembangan Perusahaan. Mesthine, tinjauan kasebut mesthi bakal katon entheng lan diwatesi, kalebu amarga kita ora mung fokus ing pangembang Eclipse minangka target pamirsa. Nanging, kita ngarep-arep manawa pangembang Eclipse sing berpengalaman bakal bisa nemokake informasi sing menarik ing artikel kasebut. Contone, kita bakal ngomong babagan salah sawijining "rahasia Eclipse", proyek sing relatif anyar lan kurang dikenal. Eclipse Handly, sing didegaké lan didhukung dening 1C.
Eclipse minangka platform teknologi kanggo 1C: Enterprise Development Tools

Pambuka Arsitektur Eclipse

Ayo ndeleng sawetara aspek umum arsitektur Eclipse nggunakake conto kasebut Piranti pangembangan Eclipse Java (JDT). Pilihan JDT minangka conto ora sengaja. Iki minangka lingkungan pangembangan terpadu pisanan sing katon ing Eclipse. Proyèk *DT Eclipse liyane, kayata Eclipse C/C++ Development Tooling (CDT), digawe mengko lan nyilih prinsip arsitektur dhasar lan fragmen kode sumber individu saka JDT. Dhasar arsitektur sing dilebokake ing JDT cocog nganti saiki kanggo meh kabeh IDE sing dibangun ing ndhuwur Platform Eclipse, kalebu 1C: Piranti Pangembangan Perusahaan.

Kaping pisanan, kudu dicathet yen Eclipse ditondoi kanthi lapisan arsitektur sing cukup cetha, kanthi pamisahan fungsionalitas basa-basa saka fungsi sing dirancang kanggo ndhukung basa pamrograman tartamtu, lan pamisahan komponen "inti" independen UI saka komponen sing ana gandhengane. karo antarmuka panganggo ndhukung.

Mangkono, Eclipse Platform nemtokake infrastruktur umum sing ora gumantung ing basa, lan alat pangembangan Jawa nambahake IDE Java kanthi fitur lengkap menyang Eclipse. Loro-lorone Eclipse Platform lan JDT kalebu sawetara komponen, sing masing-masing kalebu "inti" UI utawa lapisan UI (Gambar 1).

Eclipse minangka platform teknologi kanggo 1C: Enterprise Development Tools
Gabah. 1. Eclipse Platform lan JDT

Ayo dhaptar komponen utama Eclipse Platform:

  • Runtime - Nemtokake infrastruktur plugin. Eclipse ditondoi kanthi arsitektur modular. Ateges, Eclipse minangka kumpulan "titik ekstensi" lan "ekstensi".
  • Ruang kerja - Ngatur siji utawa luwih proyek. Proyek kalebu folder lan file sing dipetakan langsung menyang sistem file.
  • Toolkit Widget Standar (SWT) - Nyedhiyakake unsur antarmuka pangguna dhasar sing terintegrasi karo sistem operasi.
  • JFace - Nyedhiyani sawetara frameworks UI dibangun ing ndhuwur SWT.
  • Workbench - Nemtokake paradigma UI Eclipse: editor, tampilan, perspektif.

Perlu dikandhakake yen Platform Eclipse uga nyedhiyakake akeh komponen liyane sing migunani kanggo mbangun alat pangembangan terpadu, kalebu Debug, Bandingake, Panelusuran, lan Tim. Sebutan khusus kudu digawe saka JFace Text - basis kanggo mbangun "editor cerdas" kode sumber. Sayange, sanajan pemeriksaan sepintas saka komponen kasebut, uga komponen lapisan UI, ora bisa ditindakake ing ruang lingkup artikel iki, mula ing sisa bagean iki kita bakal mbatesi ringkesan komponen utama "inti" saka Platform Eclipse lan JDT.

Inti Runtime

Infrastruktur plugin Eclipse adhedhasar OSGi lan diwenehake dening proyek kasebut Eclipse Equinox. Saben plugin Eclipse minangka bundel OSGi. Spesifikasi OSGi nemtokake, utamane, mekanisme kanggo versi lan resolusi dependensi. Saliyane mekanisme standar kasebut, Equinox ngenalake konsep kasebut titik expansion. Saben plugin bisa nemtokake titik ekstensi dhewe, lan uga ngenalake fungsi tambahan ("ekstensi") menyang sistem nggunakake titik ekstensi sing ditetepake dening plugin sing padha utawa liyane. Sembarang katrangan rinci babagan mekanisme OSGi lan Equinox ngluwihi ruang lingkup artikel iki. Ayo kita cathet yen modularisasi ing Eclipse iku total (subsistem apa wae, kalebu Runtime, kalebu siji utawa luwih plugin), lan meh kabeh ing Eclipse minangka ekstensi. Kajaba iku, prinsip kasebut ditempelake ing arsitektur Eclipse dawa sadurunge introduksi OSGi (ing wektu iku padha nggunakake teknologi dhewe, meh padha karo OSGi).

Ruang Kerja Inti

Meh kabeh lingkungan pangembangan terpadu sing dibangun ing ndhuwur Platform Eclipse bisa digunakake karo ruang kerja Eclipse. Iki minangka ruang kerja sing biasane ngemot kode sumber aplikasi sing dikembangake ing IDE. Peta ruang kerja langsung menyang sistem file lan kalebu proyek sing ngemot folder lan file. Proyek, folder, lan file kasebut diarani sumber daya ruang kerja. Implementasi ruang kerja ing Eclipse minangka cache sing ana hubungane karo sistem file, sing ndadekake bisa nyepetake traversal wit sumber. Kajaba iku, ruang kerja nyedhiyakake sawetara layanan tambahan, kalebu mekanisme notifikasi kanggo owah-owahan sumber и incremental mbangun infrastruktur.

Komponen Sumber Daya Inti (plugin org.eclipse.core.resources) tanggung jawab kanggo ndhukung ruang kerja lan sumber daya. Utamane, komponen iki nyedhiyakake akses terprogram menyang ruang kerja ing formulir kasebut model sumber daya. Kanggo bisa digunakake kanthi efektif karo model iki, klien butuh cara sing gampang kanggo nampilake link menyang sumber daya. Ing kasus iki, bakal dikarepake kanggo ndhelikake obyek sing langsung nyimpen negara sumber ing model saka akses klien. Yen ora, ing kasus, contone, mbusak file, klien bisa terus nahan obyek sing ora ana maneh ing model, karo masalah sabanjuré. Eclipse ngrampungake masalah iki kanthi nggunakake sing diarani nangani sumber daya. Nangani tumindak minangka tombol (mung ngerti dalan kanggo sumber daya ing ruang kerja) lan rampung kontrol akses menyang obyek model internal, kang langsung nyimpen informasi bab negara sumber. Desain iki minangka variasi saka pola Ngalahake / Badan.

Gabah. Figure 2 nggambaraké Ngalahake / Body idiom minangka Applied kanggo model sumber. Antarmuka IResource nggantosi nangani saka sumber lan API, Boten kados kelas Resource, kang ngleksanakake antarmuka iki, lan ResourceInfo kelas, kang makili awak, kang ora API. We nandheske sing nangani mung ngerti path menyang sumber relatif kanggo ROOT workspace lan ora ngemot link kanggo info sumber. Objek info sumber daya mbentuk sing disebut "wit unsur". Struktur data iki rampung diwujudake ing memori. Kanggo nemokake conto info sumber sing cocog karo gagang, wit unsur dilewati miturut path sing disimpen ing gagang kasebut.

Eclipse minangka platform teknologi kanggo 1C: Enterprise Development Tools
Gabah. 2. IResource lan ResourceInfo

Kaya sing bakal kita deleng mengko, desain dhasar model sumber daya (bisa uga diarani adhedhasar pegangan) digunakake ing Eclipse kanggo model liyane. Saiki, ayo dhaptar sawetara ciri khas desain iki:

  • Handle minangka obyek nilai. Obyek nilai yaiku obyek sing ora bisa diganti sing kesetaraan ora adhedhasar identitas. Objek kasebut bisa digunakake kanthi aman minangka kunci ing wadhah hash. Multiple kedadean saka nangani bisa referensi sumber padha. Kanggo mbandhingake, sampeyan kudu nggunakake metode sing padha (Obyek).
  • Ngalahake nemtokake prilaku sumber, nanging ora ngemot informasi babagan negara sumber (mung data sing disimpen minangka "kunci", dalan menyang sumber).
  • Handle bisa ngarujuk marang sumber daya sing ora ana (sumber daya sing durung digawe, utawa sumber daya sing wis dibusak). Orane sumber bisa dipriksa nggunakake metode IResource.exists ().
  • Sawetara operasi bisa dileksanakake mung adhedhasar informasi sing disimpen ing gagang dhewe (dadi disebut-operasi mung nangani). Contone IResource.getParent (), getFullPath (), etc. Sumber daya ora perlu ana supaya operasi kasebut bisa sukses. Operasi sing mbutuhake sumber daya kanggo sukses uncalan CoreException yen sumber daya ora ana.

Eclipse nyedhiyakake mekanisme sing efisien kanggo ngabari owah-owahan sumber daya ruang kerja (Gambar 3). Sumber daya bisa diganti minangka asil saka tumindak sing ditindakake ing Eclipse IDE dhewe utawa minangka asil sinkronisasi karo sistem file. Ing kasus loro, klien sing langganan kabar diwenehi informasi rinci babagan owah-owahan ing wangun "delta sumber daya". A delta njlèntrèhaké owah-owahan ing antarane rong negara sumber ruang kerja (sub-) wit lan iku dhewe wit, saben simpul sing njlèntrèhaké owah-owahan kanggo sumber daya lan ngemot dhaptar delta ing tingkat sabanjuré sing njlèntrèhaké owah-owahan kanggo sumber daya anak.

Eclipse minangka platform teknologi kanggo 1C: Enterprise Development Tools
Gabah. 3. IResourceChangeEvent lan IResourceDelta

Mekanisme kabar adhedhasar delta sumber nduweni karakteristik ing ngisor iki:

  • Owah-owahan siji lan akeh owah-owahan diterangake nggunakake struktur sing padha, amarga delta dibangun nggunakake prinsip komposisi rekursif. Klien pelanggan bisa ngolah kabar pangowahan sumber daya nggunakake turunan rekursif liwat wit delta.
  • Delta ngemot informasi lengkap babagan owah-owahan sumber daya, kalebu gerakan lan / utawa owah-owahan ing "penanda" sing digandhengake karo (contone, kesalahan kompilasi dituduhake minangka tandha).
  • Wiwit referensi sumber digawe liwat gagang, delta bisa alamiah referensi sumber remot.

Nalika kita bakal weruh, komponen utama desain mekanisme kabar owah-owahan model sumber uga cocog kanggo model basis gagang liyane.

JDT inti

Model sumber daya ruang kerja Eclipse minangka model basa-agnostik dhasar. Komponen JDT Core (plugin org.eclipse.jdt.core) nyedhiyakake API kanggo navigasi lan nganalisa struktur ruang kerja saka perspektif Jawa, sing diarani "model Jawa" (Model Jawa). API iki ditetepake ing syarat-syarat unsur Jawa, minangka gantos kanggo model sumber daya ndasari API, kang ditetepake ing syarat-syarat folder lan file. Antarmuka utama wit unsur Jawa ditampilake ing Fig. 4.

Eclipse minangka platform teknologi kanggo 1C: Enterprise Development Tools
Gabah. 4. Unsur Model Jawa

Model Jawa nggunakake gagang / idiom awak padha karo model sumber (Gambar 5). IJavaElement minangka gagang, lan JavaElementInfo main peran awak. Antarmuka IJavaElement nemtokake protokol umum kanggo kabeh unsur Jawa. Sawetara cara mung nangani: getElementName (), getParent (), etc. Objek JavaElementInfo nyimpen status unsur sing cocog: struktur lan atribute.

Eclipse minangka platform teknologi kanggo 1C: Enterprise Development Tools
Gabah. 5. IJavaElement lan JavaElementInfo

Model Jawa wis sawetara beda ing implementasine saka gagang dhasar / desain awak dibandhingake model sumber. Kaya kasebut ing ndhuwur, ing model sumber daya, wit unsur, sing node minangka obyek info sumber daya, kabeh ana ing memori. Nanging model Jawa bisa duwe nomer Ngartekno luwih gedhe saka unsur saka wit sumber, amarga iku uga makili struktur internal file .java lan .class: jinis, kothak, lan cara.

Kanggo supaya rampung materializing kabeh wit unsur ing memori, implementasine model Jawa nggunakake cache LRU ukuran winates info unsur, ngendi tombol nangani IJavaElement. obyek info unsur digawe ing dikarepake minangka wit unsur navigasi. Ing kasus iki, item sing paling kerep digunakake dibuwang saka cache, lan konsumsi memori model tetep diwatesi ing ukuran cache sing ditemtokake. Iki minangka kauntungan liyane saka desain adhedhasar gagang, sing ndhelikake rincian implementasine saka kode klien.

Mekanisme kanggo ngabari owah-owahan ing unsur Jawa umume padha karo mekanisme kanggo nglacak owah-owahan sumber daya ruang kerja sing dibahas ing ndhuwur. Klien sing pengin ngawasi owah-owahan ing model Jawa langganan kabar, sing dituduhake minangka obyek ElementChangedEvent sing ngemot IJavaElementDelta (Gambar 6).

Eclipse minangka platform teknologi kanggo 1C: Enterprise Development Tools
Gabah. 6. ElementChangedEvent lan IJavaElementDelta

Model Jawa ora ngemot informasi babagan badan metode utawa resolusi jeneng, mula kanggo analisis rinci kode sing ditulis ing Jawa, JDT Core nyedhiyakake model tambahan (non-handle): wit sintaksis abstrak (pohon sintaksis abstrak, AST). AST nggambarake asil parsing teks sumber. Node AST cocog karo unsur struktur modul sumber (deklarasi, operator, ekspresi, lan liya-liyane) lan ngemot informasi babagan koordinat unsur sing cocog ing teks sumber, uga (minangka pilihan) informasi babagan resolusi jeneng ing wangun pranala menyang supaya disebut- bindings. Bindings minangka obyek sing makili entitas sing dijenengi, kayata jinis, metode, lan variabel, sing dikawruhi kompiler. Ora kaya simpul AST, sing mbentuk wit, ikatan ndhukung referensi silang lan umume mbentuk grafik. Kelas abstrak ASTNode minangka kelas dasar umum kanggo kabeh node AST. Subkelas ASTNode cocog karo konstruksi sintaksis tartamtu saka basa Jawa.

Amarga wit sintaks bisa nggunakake jumlah memori sing akeh, JDT mung nyimpen siji AST kanggo editor aktif. Ora kaya model Jawa, AST biasane dideleng minangka model "menengah," "sementara" sing anggotane ora kudu dirujuk dening klien ing njaba konteks operasi sing nyebabake nggawe AST.

Telung model sing kadhaptar (model Java, AST, bindings) dadi basis kanggo mbangun "alat pangembangan cerdas" ing JDT, kalebu editor Jawa sing kuat kanthi macem-macem "pembantu", macem-macem tumindak kanggo ngolah kode sumber (kalebu ngatur dhaptar impor. jeneng lan format miturut gaya khusus), alat telusuran lan refactoring. Ing kasus iki, model Jawa nduweni peran khusus, amarga iku sing digunakake minangka basis kanggo representasi visual saka struktur aplikasi sing dikembangake (contone, ing Package Explorer, Outline, Search, Call Hierarchy, lan Hierarki Tipe).

Komponen Eclipse digunakake ing 1C: Enterprise Developments Tools

Ing Fig. Gambar 7 nuduhake komponen Eclipse sing dadi dhasar platform teknologi kanggo 1C: Piranti Pangembangan Perusahaan.

Eclipse minangka platform teknologi kanggo 1C: Enterprise Development Tools
Gabah. 7. Eclipse minangka platform kanggo 1C: Enterprise Development Tools

Platform Eclipse nyedhiyakake infrastruktur dhasar. Kita ndeleng sawetara aspek infrastruktur iki ing bagean sadurunge.

Eclipse Modeling Framework (EMF) nyedhiyakake sarana umum kanggo ngmodelake data terstruktur. EMF digabungake karo Eclipse Platform, nanging uga bisa digunakake kanthi kapisah ing aplikasi Java biasa. Cukup asring, pangembang Eclipse anyar wis kenal karo EMF, sanajan dheweke durung ngerti seluk-beluk Platform Eclipse. Salah sawijining alasan kanggo popularitas sing pantes kasebut yaiku desain universal, sing kalebu, antara liya, API level meta sing digabung, sing ngidini sampeyan bisa nggarap model EMF kanthi cara umum. Implementasi dhasar kanggo obyek model sing diwenehake dening EMF lan subsistem kanggo ngasilake kode model adhedhasar meta-model kanthi signifikan nambah kacepetan pangembangan lan nyuda jumlah kesalahan. EMF uga ngandhut mekanisme kanggo serializing model, nelusuri owah-owahan ing model, lan akeh liyane.

Kaya alat sing umume umume, EMF cocog kanggo ngrampungake macem-macem masalah modeling, nanging sawetara kelas model (contone, model adhedhasar gagang sing dibahas ing ndhuwur) mbutuhake alat model sing luwih khusus. Ngomong babagan EMF minangka tugas tanpa matur nuwun, utamane ing watesan winates ing siji artikel, amarga iki minangka topik buku sing kapisah, lan cukup kandel. Ayo kita nyathet yen sistem generalisasi kualitas dhuwur sing ndasari EMF ngidini lair saka macem-macem proyek khusus kanggo modeling, sing kalebu ing proyek tingkat paling dhuwur. Eclipse Modeling bebarengan karo EMF dhewe. Salah sawijining proyek kasebut yaiku Eclipse Xtext.

Eclipse Xtext nyedhiyakake infrastruktur "pemodelan teks". Xtext migunakake ANTLR kanggo parsing teks sumber lan EMF kanggo makili asil ASG (grafik semantik abstrak, kang ateges kombinasi AST lan bindings), uga disebut "model semantik". Tata basa kang dimodelake dening Xtext digambarake nganggo basane Xtext dhewe. Iki ngidini sampeyan ora mung nggawe deskripsi grammar kanggo ANTLR, nanging uga entuk mekanisme serialisasi AST (yaiku Xtext nyedhiyakake parser lan unparser), petunjuk konteks, lan sawetara komponen basa liyane. Ing sisih liya, basa gramatika sing digunakake ing Xtext kurang fleksibel tinimbang, ucapake, basa grammar sing digunakake ing ANTLR. Mulane, kadhangkala perlu kanggo "mbengkokake" basa sing dileksanakake menyang Xtext, sing biasane ora dadi masalah yen kita ngomong babagan basa sing dikembangake saka awal, nanging bisa uga ora bisa ditampa kanggo basa kanthi sintaks sing wis ditemtokake. Senadyan mangkono, Xtext saiki dadi alat sing paling diwasa, sugih fitur, lan serbaguna ing Eclipse kanggo mbangun basa pamrograman lan alat pangembangan kanggo dheweke. Utamane, iki minangka alat sing cocog kanggo nggawe prototipe kanthi cepet basa khusus domain (basa khusus domain, DSL). Saliyane "inti basa" sing kasebut ing ndhuwur adhedhasar ANTLR lan EMF, Xtext nyedhiyakake akeh komponen tingkat dhuwur sing migunani, kalebu mekanisme indeksasi, konstruksi tambahan, "editor cerdas", lan liya-liyane, nanging ora bisa ditangani- model basa adhedhasar. Kaya EMF, Xtext minangka subyek sing pantes kanggo buku sing kapisah, lan kita meh ora bisa ngomong babagan kabeh kemampuane saiki.

1C: Piranti Pangembangan Perusahaan kanthi aktif nggunakake EMF dhewe lan sawetara proyek Pemodelan Eclipse liyane. Utamane, Xtext minangka salah sawijining dhasar alat pangembangan kanggo 1C:Basa perusahaan minangka basa pamrograman lan basa pitakon sing dibangun. Dasar liya kanggo alat pangembangan kasebut yaiku proyek Eclipse Handly, sing bakal dibahas kanthi luwih rinci (saka komponen Eclipse sing kadhaptar, isih paling ora dingerteni).

Eclipse Handly, subproyek proyek tingkat paling dhuwur Eclipse Technology, muncul minangka asil kontribusi kode awal kanggo Eclipse Foundation sing digawe dening 1C ing 2014. Wiwit kuwi, 1C terus ndhukung pangembangan proyek kasebut: Komitmen sing handly minangka karyawan perusahaan. Proyèk iki cilik, nanging manggoni ceruk sing rada unik ing Eclipse: tujuan utama yaiku ndhukung pangembangan model adhedhasar gagang.

Prinsip arsitektur dhasar model adhedhasar gagang, kayata idiom gagang / awak, dibahas ing ndhuwur nggunakake model sumber lan model Jawa minangka conto. Uga nyathet manawa model sumber daya lan model Jawa minangka dhasar penting kanggo alat pangembangan Eclipse Java (JDT). Lan wiwit meh kabeh *proyèk DT Eclipse duwe arsitektur padha JDT, iku ora bakal exaggeration gedhe kanggo ngomong sing model basis nangani underlie akeh, yen ora kabeh IDE dibangun ing ndhuwur Eclipse Platform. Contone, Eclipse C / C ++ Development Tooling (CDT) nduweni model C / C ++ adhedhasar pegangan sing nduweni peran sing padha ing arsitektur CDT minangka model Jawa ing JDT.

Sadurunge Handly, Eclipse ora nawakake perpustakaan khusus kanggo mbangun model basa adhedhasar gagang. Model sing saiki ana digawe utamane kanthi langsung adaptasi kode model Jawa (alias copy/paste), ing kasus sing ngidini Lisensi Umum Eclipse (EPL). (Temenan, iki biasane ora masalah legal kanggo, ngomong, Eclipse proyèk dhewe, nanging ora kanggo produk sumber tertutup.) Saliyane haphazardness gawan, technique iki pirso masalah kondhang: duplikasi kode ngenalaken dening nalika adaptasi kanggo kasalahan. lsp. Apa sing luwih elek yaiku model sing diasilake tetep "barang ing awake dhewe" lan ora njupuk keuntungan saka potensial kanggo manunggal. Nanging ngisolasi konsep lan protokol umum kanggo model basa adhedhasar pegangan bisa nyebabake nggawe komponen sing bisa digunakake maneh kanggo nggarap, padha karo sing kedadeyan ing kasus EMF.

Ora Eclipse ora ngerti masalah kasebut. Mbalik ing taun 2005 Martin Aeschlimann, ngringkes pengalaman ngembangake prototipe CDT, mbantah perlu kanggo nggawe infrastruktur umum kanggo model basa, kalebu model basis nangani. Nanging, kaya sing asring kedadeyan, amarga tugas-tugas prioritas sing luwih dhuwur, implementasine gagasan-gagasan kasebut ora bisa ditindakake. Kangge, faktorisasi kode *DT isih dadi salah sawijining topik sing durung dikembangake ing Eclipse.

Ing pangertèn tartamtu, proyek Handly dirancang kanggo ngrampungake kira-kira masalah sing padha karo EMF, nanging kanggo model adhedhasar gagang, lan utamané basa (yaiku, makili unsur struktur sawetara basa program). Tujuan utama nalika ngrancang Handly kapacak ing ngisor iki:

  • Identifikasi abstraksi utama saka area subyek.
  • Ngurangi gaweyan lan ningkatake kualitas implementasi model basa adhedhasar pegangan liwat nggunakake kode maneh.
  • Nyedhiyakake API meta-level terpadu kanggo model asil, nggawe iku bisa kanggo nggawe komponen IDE umum sing bisa karo model basis nangani basa.
  • Fleksibilitas lan skalabilitas.
  • Integrasi karo Xtext (ing lapisan kapisah).

Kanggo nyorot konsep lan protokol umum, implementasine model basis pegangan basa dianalisis. Antarmuka utama lan implementasi dhasar sing diwenehake dening Handly ditampilake ing Fig. 8.

Eclipse minangka platform teknologi kanggo 1C: Enterprise Development Tools
Gabah. 8. Antarmuka umum lan implementasine dhasar saka unsur Handly

Antarmuka IElement makili gagang unsur lan umum kanggo unsur kabeh model Handly basis. Kelas abstrak Unsur ngleksanakake nangani umum / mekanisme awak (Fig. 9).

Eclipse minangka platform teknologi kanggo 1C: Enterprise Development Tools
Gabah. 9. IElement lan umum nangani / implementasine awak

Kajaba iku, Handly menehi mekanisme umum kanggo notifikasi bab owah-owahan ing unsur model (Fig. 10). Nalika sampeyan bisa ndeleng, iku wiyar padha mekanisme kabar dipun ginakaken ing model sumber daya lan model Jawa, lan nggunakake IElementDelta kanggo nyedhiyani perwakilan manunggal saka informasi owah-owahan unsur.

Eclipse minangka platform teknologi kanggo 1C: Enterprise Development Tools
Gabah. 10. Antarmuka umum lan implementasine dhasar saka mekanisme kabar Handly

Part Handly rembugan ndhuwur (Fig. 9 lan 10) bisa digunakake kanggo makili meh wae model basis nangani. Kanggo nggawe linguistik model, proyek nawakake fungsionalitas tambahan - utamane, antarmuka umum lan implementasi dhasar kanggo unsur struktur teks sumber, sing diarani unsur sumber (Gambar 8). Antarmuka ISourceFile makili file sumber, lan ISourceConstruct makili unsur ing file sumber. Kelas abstrak SourceFile lan SourceConstruct ngleksanakake mekanisme umum kanggo ndhukung nggarap file sumber lan unsur-unsure, contone, nggarap buffer teks, ngiket koordinat unsur ing teks sumber, model rekonsiliasi karo isi saiki saka buffer salinan sing bisa digunakake. , lsp. Ngleksanakake mekanisme iki biasane cukup tantangan, lan Handly bisa Ngartekno nyuda gaweyan kanggo ngembangaken model basa adhedhasar nangani dening nyedhiyani implementasine basis kualitas dhuwur.

Saliyane mekanisme inti sing kadhaptar ing ndhuwur, Handly nyedhiyakake prasarana kanggo buffer teks lan snapshot, dhukungan kanggo integrasi karo editor kode sumber (kalebu integrasi out-of-the-box karo editor Xtext), uga sawetara komponen UI umum sing nggarap editor kode sumber. Model sing gampang kaya kerangka kerangka. Kanggo nggambarake kemampuane, proyek kasebut menehi sawetara conto, kalebu implementasine model Java ing Handly. (Dibandhingake karo implementasine lengkap model Jawa ing JDT, model iki sengaja disederhanakake supaya luwih jelas.)

Kaya sing wis kasebut sadurunge, fokus utama sajrone desain awal Handly lan pangembangan sabanjure yaiku lan terus ana ing skalabilitas lan keluwesan.

Ing asas, model adhedhasar gagang ukuran cukup apik "dening desain". Contone, gagang / awak idiom ngijini sampeyan kanggo matesi jumlah memori migunakaken dening model. Nanging ana uga nuansa. Mangkono, nalika nyoba Handly kanggo skalabilitas, masalah ditemokake ing implementasine mekanisme notifikasi - nalika akeh unsur diganti, mbangun delta njupuk akeh wektu. Ternyata masalah sing padha ana ing model JDT Java, saka kode sing cocog sapisan dicocogake. Kita ndandani bug ing Handly lan nyiapake patch sing padha kanggo JDT, sing ditampa kanthi matur nuwun. Iki minangka salah sawijining conto yen ngenalake Handly menyang implementasi model sing wis ana bisa migunani, amarga ing kasus iki, bug kasebut bisa didandani mung ing sak panggonan.

Kanggo nggawe implementasine Handly menyang implementasi model sing wis ana kanthi teknis, perpustakaan kudu nduweni keluwesan sing signifikan. Masalah utama yaiku njaga kompatibilitas mundur ing model API. Masalah iki ditanggulangi ing Cepet 0.5 kanthi cetha misahake API model-tartamtu, ditetepake lan kebak kontrol dening pangembang, saka API meta-tingkat ndadekake kasedhiya dening perpustakaan. Iki ora mung ndadekake teknis bisa ngleksanakake Handly menyang implementasine ana, nanging uga menehi pangembang model anyar kamardikan pinunjul nalika ngrancang API.

Fleksibilitas uga duwe aspek liyane. Contone, Handly nemtokke meh ora watesan ing struktur model lan bisa digunakake kanggo model loro-tujuan umum lan domain-spesifik basa. Nalika mbangun struktur file sumber, Handly ora prescribe sembarang wangun tartamtu saka perwakilan AST lan, ing asas, malah ora mbutuhake ngarsane AST dhewe, saéngga njamin kompatibilitas karo meh kabeh mekanisme parsing. Pungkasan, Handly ndhukung integrasi lengkap karo ruang kerja Eclipse, nanging uga bisa kerja langsung karo sistem file amarga integrasi karo Sistem File Eclipse (EFS).

Versi saiki Cepet 0.6 metu ing Desember 2016. Senadyan kasunyatan manawa proyek kasebut saiki ana ing inkubasi lan API durung rampung, Handly wis digunakake ing rong produk komersial gedhe sing njupuk risiko tumindak minangka "pengguna awal", lan, aku kudu ngomong, aja nyesel.

Kaya sing wis kasebut ing ndhuwur, salah sawijining produk kasebut yaiku 1C: Piranti Pangembangan Perusahaan, ing ngendi Handly digunakake wiwit wiwitan kanggo model unsur struktur tingkat dhuwur kaya 1C: Basa perusahaan minangka basa pamrograman lan basa pitakon sing dibangun. . Produk liyane sing kurang dikenal masyarakat umum. Iki Codasip Studio, lingkungan desain terpadu kanggo prosesor instruksi-set khusus aplikasi (ASIP), digunakake ing perusahaan Ceko Codasip dhewe lan klien, kalebu AMD, AVG, Ponsel, Desain Sigma. Codasip wis nggunakake Handly ing produksi wiwit 2015, diwiwiti karo versi Handly 0.2. Rilis paling anyar saka Codasip Studio nggunakake versi 0.5, dirilis ing wulan Juni 2016. Ondřej Ilčík, sing mimpin pangembangan IDE ing Codasip, kontak karo proyek kasebut, menehi umpan balik penting kanggo "pengguna pihak katelu". Dheweke malah bisa nemokake sawetara wektu luang kanggo melu langsung ing pangembangan project, ngleksanakake lapisan UI (~ 4000 baris kode) kanggo salah siji conto Handly, model Jawa. Informasi tangan pisanan sing luwih rinci babagan panggunaan Handly dening adopters bisa ditemokake ing kaca kasebut sukses proyek.

Kulo pengen sing sawise release saka versi 1.0 karo njamin stabilitas API lan project ninggalake negara inkubasi, Handly bakal adopters anyar. Ing sawetoro wektu, proyek kasebut terus nyoba lan nambah API, ngeculake rong rilis "utama" saben taun - ing wulan Juni (tanggal sing padha karo rilis Eclipse simultaneous) lan Desember, nyedhiyakake jadwal sing bisa diprediksi sing bisa diandelake para adopter. Kita uga bisa nambah manawa "tingkat bug" proyek kasebut tetep ing tingkat sing terus-terusan lan Handly wis kerja kanthi andal ing produk saka pangguna awal wiwit versi pisanan. Kanggo luwih njelajah Eclipse Handly, sampeyan bisa nggunakake Miwiti Tutorial и Ringkesan Arsitektur.

Source: www.habr.com

Add a comment