Mungkin,
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.
Pambuka Arsitektur Eclipse
Ayo ndeleng sawetara aspek umum arsitektur Eclipse nggunakake conto kasebut
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).
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
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
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
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.
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.
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.
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.
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).
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):
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.
Gabah. 7. Eclipse minangka platform kanggo 1C: Enterprise Development Tools
Platform Eclipse nyedhiyakake infrastruktur dhasar. Kita ndeleng sawetara aspek infrastruktur iki ing bagean sadurunge.
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.
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).
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
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.
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).
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.
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
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
Versi saiki
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
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
Source: www.habr.com