Магадгүй
Байгалийн тоймтой энэхүү нийтлэлд бид Eclipse архитектурын зарим үндсийг цогц хөгжүүлэлтийн хэрэгслийг бий болгох платформ болгон авч үзэхийг хичээж, технологийн үндэс суурийг бүрдүүлдэг Eclipse бүрэлдэхүүн хэсгүүдийн талаархи анхны санааг өгөх болно. "шинэ тохируулагч" 1С: Аж ахуйн нэгжийн платформ.
Eclipse Architecture-ийн танилцуулга
Эхлээд жишээн дээр Eclipse архитектурын зарим ерөнхий талыг харцгаая
Юуны өмнө, Eclipse нь нэлээд тодорхой архитектурын давхаргаар тодорхойлогддог гэдгийг тэмдэглэх нь зүйтэй бөгөөд хэлээс хамааралгүй функцийг тусгай програмчлалын хэлийг дэмжихэд зориулагдсан функцээс салгаж, UI-аас хамааралгүй "үндсэн" бүрэлдэхүүн хэсгүүдийг холбогдох бүрэлдэхүүн хэсгүүдээс тусгаарладаг. хэрэглэгчийн интерфэйсийг дэмждэг.
Тиймээс Eclipse платформ нь нийтлэг, хэлээс хамааралгүй дэд бүтцийг тодорхойлдог бөгөөд Java хөгжүүлэлтийн хэрэгслүүд нь Eclipse-д бүрэн хэмжээний Java IDE-г нэмж өгдөг. Eclipse Platform болон JDT хоёулаа хэд хэдэн бүрэлдэхүүн хэсгээс бүрдэх бөгөөд тус бүр нь UI-аас хамааралгүй "цөм" эсвэл UI давхаргад багтдаг (Зураг 1).
Цагаан будаа. 1. Eclipse Platform болон JDT
Eclipse платформын үндсэн бүрэлдэхүүн хэсгүүдийг жагсаая:
- Ажиллах цаг — Залгаасны дэд бүтцийг тодорхойлдог. Eclipse нь модульчлагдсан архитектураар тодорхойлогддог. Үндсэндээ Eclipse бол "өргөтгөл" болон "өргөтгөл"-ийн цуглуулга юм.
- Ажлын талбар - Нэг буюу хэд хэдэн төслийг удирддаг. Төсөл нь файлын системд шууд буулгасан хавтас, файлуудаас бүрдэнэ.
- Стандарт виджет хэрэгслийн хэрэгсэл (SWT) - Үйлдлийн системтэй нэгдсэн хэрэглэгчийн интерфейсийн үндсэн элементүүдээр хангана.
- JFace — SWT дээр суурилсан хэд хэдэн UI хүрээг хангадаг.
- Workbench — Eclipse UI парадигмыг тодорхойлдог: редакторууд, үзэл бодол, хэтийн төлөв.
Eclipse платформ нь дибаг хийх, харьцуулах, хайх, баг зэрэг цогц хөгжүүлэлтийн хэрэгслүүдийг бий болгоход хэрэгтэй бусад олон бүрэлдэхүүн хэсгүүдийг өгдөг гэдгийг хэлэх ёстой. Эх кодын "ухаалаг редактор" бүтээх үндэс болсон JFace Text-ийг онцгойлон дурдах хэрэгтэй. Харамсалтай нь, эдгээр бүрэлдэхүүн хэсгүүд, түүнчлэн UI давхаргын бүрэлдэхүүн хэсгүүдийг өнгөцхөн судалж үзэх нь энэ нийтлэлийн хүрээнд боломжгүй тул энэ хэсгийн үлдсэн хэсэгт бид "үндсэн" бүрэлдэхүүн хэсгүүдийн тоймоор хязгаарлагдах болно. Eclipse платформ ба JDT.
Үндсэн ажиллах хугацаа
Eclipse залгаасын дэд бүтэц нь дээр суурилдаг
Үндсэн ажлын талбар
Eclipse платформ дээр баригдсан бараг бүх цогц хөгжүүлэлтийн орчин нь Eclipse ажлын талбартай ажилладаг. Энэ нь ихэвчлэн IDE-д боловсруулсан програмын эх кодыг агуулсан ажлын талбар юм. Ажлын талбар нь файлын системтэй шууд харьцдаг бөгөөд хавтас, файл агуулсан төслүүдээс бүрдэнэ. Эдгээр төсөл, хавтас, файлуудыг дууддаг нөөц ажлын талбар. Eclipse дахь ажлын талбарын хэрэгжилт нь файлын системтэй холбоотой кэш болж үйлчилдэг бөгөөд энэ нь нөөцийн мод руу шилжих үйл явцыг ихээхэн хурдасгах боломжийг олгодог. Нэмж дурдахад ажлын талбар нь хэд хэдэн нэмэлт үйлчилгээ үзүүлдэг
Үндсэн нөөцийн бүрэлдэхүүн хэсэг (org.eclipse.core.resources залгаас) нь ажлын талбар болон түүний нөөцийг дэмжих үүрэгтэй. Ялангуяа энэ бүрэлдэхүүн хэсэг нь маягтын ажлын талбарт програмчлагдсан хандалтыг олгодог нөөцийн загварууд. Энэ загвартай үр дүнтэй ажиллахын тулд үйлчлүүлэгчид эх сурвалжийн холбоосыг үзүүлэх энгийн арга хэрэгтэй. Энэ тохиолдолд загвар дахь нөөцийн төлөвийг шууд хадгалдаг объектыг үйлчлүүлэгчийн хандалтаас нуух нь зүйтэй юм. Үгүй бол, жишээлбэл, файлыг устгасан тохиолдолд үйлчлүүлэгч загварт байхгүй объектыг үргэлжлүүлэн барьж, улмаар асуудал үүсч болно. Eclipse гэдэг зүйл ашиглан энэ асуудлыг шийддэг зохицуулах нөөц. Бариул нь түлхүүрийн үүрэг гүйцэтгэдэг (энэ нь зөвхөн ажлын талбар дахь нөөцөд хүрэх замыг мэддэг) бөгөөд нөөцийн төлөв байдлын талаарх мэдээллийг шууд хадгалдаг дотоод загвар объект руу хандах хандалтыг бүрэн хянадаг. Энэ загвар нь хэв маягийн өөрчлөлт юм
Цагаан будаа. Зураг 2-т нөөцийн загварт хэрэглэгдэх Handle/Body хэлцийг дүрслэн харуулав. IResource интерфэйс нь нөөцийн бариулыг төлөөлдөг бөгөөд энэ интерфейсийг хэрэгжүүлдэг Resource анги болон API биш биеийг төлөөлдөг ResourceInfo ангиас ялгаатай нь API юм. Бариул нь зөвхөн ажлын талбарын үндэстэй холбоотой нөөц рүү хүрэх замыг мэддэг бөгөөд нөөцийн мэдээллийн холбоос агуулаагүй гэдгийг бид онцолж байна. Нөөцийн мэдээллийн объектууд нь "элементийн мод" гэж нэрлэгддэг зүйлийг бүрдүүлдэг. Энэхүү өгөгдлийн бүтэц нь санах ойд бүрэн хэрэгждэг. Бариултай харгалзах нөөцийн мэдээллийн жишээг олохын тулд элементийн модыг тухайн бариулд хадгалагдсан замын дагуу дайран өнгөрнө.
Цагаан будаа. 2. IResource болон ResourceInfo
Бид дараа нь харах болно, нөөц загварын үндсэн загварыг (бид үүнийг бариул дээр суурилсан гэж нэрлэж болно) бусад загваруудад мөн Eclipse-д ашигладаг. Одоохондоо энэ дизайны онцлог шинж чанаруудыг жагсаая:
- Бариул нь утгын объект юм. Үнэт зүйлийн объектууд нь ижил төстэй байдал дээр суурилдаггүй өөрчлөгдөшгүй объектууд юм. Ийм объектыг хэш хийсэн саванд түлхүүр болгон аюулгүй ашиглаж болно. Бариулын олон тохиолдлууд нэг эх сурвалжийг лавлаж болно. Тэдгээрийг харьцуулахын тулд та тэнцүү (Object) аргыг ашиглах хэрэгтэй.
- Бариул нь нөөцийн төлөв байдлыг тодорхойлдог боловч нөөцийн төлөв байдлын талаархи мэдээллийг агуулдаггүй (түүний хадгалдаг цорын ганц өгөгдөл нь "түлхүүр", нөөцөд хүрэх зам юм).
- Бариул нь байхгүй нөөцийг (хараахан үүсгээгүй нөөц эсвэл аль хэдийн устгасан нөөцийг) хэлж болно. Нөөц байгаа эсэхийг IResource.exists() аргыг ашиглан шалгаж болно.
- Зарим үйлдлүүдийг зөвхөн бариулд хадгалагдсан мэдээлэлд үндэслэн хийж болно (зөвхөн бариултай үйлдлүүд гэж нэрлэдэг). Жишээ нь IResource.getParent(), getFullPath() гэх мэт. Ийм ажиллагааг амжилттай явуулахын тулд нөөц байх албагүй. Амжилттай ажиллахын тулд нөөц байх шаардлагатай үйлдлүүд нь нөөц байхгүй тохиолдолд CoreException-г үүсгэдэг.
Eclipse нь ажлын талбарын нөөцийн өөрчлөлтийг мэдэгдэх үр дүнтэй механизмаар хангадаг (Зураг 3). Нөөцүүд нь Eclipse IDE доторх үйлдлүүдийн үр дүнд эсвэл файлын системтэй синхрончлолын үр дүнд өөрчлөгдөж болно. Энэ хоёр тохиолдолд мэдэгдэлд бүртгүүлсэн үйлчлүүлэгчдэд "нөөцийн дельта" хэлбэрээр гарсан өөрчлөлтийн талаарх дэлгэрэнгүй мэдээллийг өгдөг. Дельта нь ажлын талбарын нөөцийн (дэд) модны хоёр төлөвийн хоорондох өөрчлөлтийг тодорхойлдог бөгөөд зангилаа бүр нь нөөцийн өөрчлөлтийг тайлбарлах ба дараагийн түвшний хүүхдийн нөөцийн өөрчлөлтийг тодорхойлсон дельтагийн жагсаалтыг агуулсан мод юм.
Цагаан будаа. 3. IResourceChangeEvent болон IResourceDelta
Нөөцийн дельта дээр суурилсан мэдэгдлийн механизм нь дараахь шинж чанартай байдаг.
- Дельта нь рекурсив найрлагын зарчмаар баригдсан тул нэг өөрчлөлт, олон өөрчлөлтийг ижил бүтцийг ашиглан дүрсэлсэн болно. Захиалагч үйлчлүүлэгчид нөөцийн өөрчлөлтийн мэдэгдлийг гурвалжин модоор дамжуулан рекурсив удмыг ашиглан боловсруулж болно.
- Дельта нь нөөцийн өөрчлөлт, түүний хөдөлгөөн ба/эсвэл үүнтэй холбоотой "тэмдэглэгээ" -ийн өөрчлөлт зэрэг бүрэн мэдээллийг агуулдаг (жишээлбэл, эмхэтгэлийн алдааг тэмдэглэгээгээр илэрхийлдэг).
- Нөөцийн лавлагааг бариулаар хийдэг тул дельта нь алсын нөөцийг лавлах боломжтой.
Бидний удахгүй харах болно, нөөцийн загварын өөрчлөлтийн мэдэгдлийн механизмын дизайны үндсэн бүрэлдэхүүн хэсгүүд нь бариул дээр суурилсан бусад загваруудад мөн хамааралтай болно.
JDT гол
Eclipse ажлын талбарын нөөцийн загвар нь үндсэн хэл-агностик загвар юм. JDT Core бүрэлдэхүүн хэсэг (plugin org.eclipse.jdt.core) нь "Java загвар" гэж нэрлэгддэг Java-ийн өнцгөөс ажлын талбарын бүтцийг удирдах, дүн шинжилгээ хийх API-г өгдөг.Java загвар). Энэ API нь хавтас, файлаар тодорхойлогддог үндсэн нөөцийн загвар API-аас ялгаатай нь Java элементүүдээр тодорхойлогддог. Java элементийн модны үндсэн интерфейсийг Зураг дээр үзүүлэв. 4.
Цагаан будаа. 4. Java загварын элементүүд
Java загвар нь нөөцийн загвартай ижил бариул/биеийн хэлцийг ашигладаг (Зураг 5). IJavaElement нь бариул бөгөөд JavaElementInfo нь биеийн үүргийг гүйцэтгэдэг. IJavaElement интерфэйс нь бүх Java элементүүдийн нийтлэг протоколыг тодорхойлдог. Түүний зарим аргууд нь зөвхөн ажиллах боломжтой: getElementName(), getParent() гэх мэт. JavaElementInfo объект нь харгалзах элементийн төлөвийг хадгалдаг: түүний бүтэц, шинж чанарууд.
Цагаан будаа. 5. IJavaElement болон JavaElementInfo
Java загвар нь нөөцийн загвартай харьцуулахад үндсэн бариул/биеийн дизайны хэрэгжилтэд зарим нэг ялгаа байдаг. Дээр дурдсанчлан нөөцийн загварт зангилаа нь нөөцийн мэдээллийн объект болох элементийн мод бүхэлдээ санах ойд агуулагддаг. Гэхдээ Java загвар нь .java болон .class файлуудын төрөл, талбар, аргуудын дотоод бүтцийг мөн илэрхийлдэг тул нөөцийн модноос хамаагүй олон тооны элементтэй байж болно.
Санах ой дахь элементүүдийн модыг бүхэлд нь бүтээхээс зайлсхийхийн тулд Java загварын хэрэгжилт нь элементийн мэдээллийн хязгаарлагдмал хэмжээтэй LRU кэшийг ашигладаг бөгөөд гол түлхүүр нь IJavaElement-ийг зохицуулдаг. Элементийн модыг чиглүүлэх үед элементийн мэдээллийн объектыг хүсэлтээр үүсгэнэ. Энэ тохиолдолд хамгийн бага ашиглагддаг зүйлсийг кэшээс зайлуулж, загварын санах ойн хэрэглээ нь заасан кэшийн хэмжээгээр хязгаарлагддаг. Энэ нь бариул дээр суурилсан дизайны бас нэг давуу тал бөгөөд ийм хэрэгжилтийн нарийн ширийнийг үйлчлүүлэгчийн кодоос бүрэн нуудаг.
Java элементүүдийн өөрчлөлтийг мэдэгдэх механизм нь дээр дурдсан ажлын талбарын нөөцийн өөрчлөлтийг хянах механизмтай ерөнхийдөө төстэй юм. Java загварын өөрчлөлтийг хянахыг хүссэн үйлчлүүлэгч IJavaElementDelta агуулсан ElementChangedEvent объект хэлбэрээр илэрхийлэгддэг мэдэгдлүүдэд бүртгүүлдэг (Зураг 6).
Цагаан будаа. 6. ElementChangedEvent болон IJavaElementDelta
Java загвар нь аргын биетүүд эсвэл нэрийн нарийвчлалын талаарх мэдээллийг агуулаагүй тул Java хэл дээр бичигдсэн кодын нарийвчилсан дүн шинжилгээ хийхийн тулд JDT Core нэмэлт (бариул дээр суурилсан бус) загварыг өгдөг.
Синтакс мод их хэмжээний санах ойг хэрэглэж чаддаг тул JDT идэвхтэй засварлагчийн хувьд зөвхөн нэг AST-г кэшлэнэ. Жава загвараас ялгаатай нь AST нь ихэвчлэн "завсрын", "түр зуурын" загвар гэж үздэг бөгөөд AST-ийг бий болгоход хүргэсэн үйл ажиллагааны хам сэдэвээс гадуур үйлчлүүлэгчид гишүүдийг нь лавлаж болохгүй.
Жагсаалтад орсон гурван загвар (Java загвар, AST, холбоосууд) нь JDT-д "ухаалаг хөгжүүлэлтийн хэрэгсэл"-ийг бий болгох үндэс суурь болж өгдөг, үүнд төрөл бүрийн "туслагч" бүхий хүчирхэг Java редактор, эх кодыг боловсруулах янз бүрийн үйлдэл (импортын жагсаалтыг зохион байгуулах гэх мэт). тохируулсан хэв маягийн дагуу нэр, формат), хайлт, дахин боловсруулах хэрэгслүүд. Энэ тохиолдолд Java загвар нь онцгой үүрэг гүйцэтгэдэг, учир нь үүнийг боловсруулж буй програмын бүтцийг дүрслэн харуулах үндэс болгон ашигладаг (жишээлбэл, Package Explorer, Outline, Search, Call Hierarchy, болон Шатлалын төрөл).
1C: Enterprise Development Tools-д ашигласан Eclipse бүрэлдэхүүн хэсгүүд
Зураг дээр. Зураг 7-д 1C: Enterprise Development Tools-ийн технологийн платформын суурийг бүрдүүлдэг Eclipse бүрэлдэхүүн хэсгүүдийг харуулав.
Цагаан будаа. 7. Eclipse нь 1C: Enterprise Development Tools-ийн платформ юм
Eclipse платформ суурь дэд бүтцээр хангадаг. Бид өмнөх хэсэгт энэ дэд бүтцийн зарим талыг авч үзсэн.
Аливаа жинхэнэ ерөнхий зориулалтын хэрэгслийн нэгэн адил EMF нь загварчлалын өргөн хүрээний асуудлыг шийдвэрлэхэд тохиромжтой боловч зарим ангиллын загварууд (жишээлбэл, дээр дурдсан бариул дээр суурилсан загварууд) илүү нарийн мэргэжлийн загварчлалын хэрэгсэл шаарддаг. EMF-ийн тухай ярих нь ялангуяа нэг өгүүллийн хязгаарлагдмал хүрээнд талархалгүй ажил юм, учир нь энэ нь тусдаа номын сэдэв бөгөөд нэлээд зузаан юм. EMF-ийн үндэс суурь болсон өндөр чанарын ерөнхий үнэлгээний систем нь дээд түвшний төсөлд багтсан загварчлалд зориулагдсан бүхэл бүтэн төслүүдийг бий болгох боломжийг олгосон гэдгийг тэмдэглэх нь зүйтэй.
1C: Enterprise Development Tools нь EMF өөрөө болон бусад хэд хэдэн Eclipse Modeling төслүүдийг идэвхтэй ашигладаг. Ялангуяа Xtext нь 1C: Enterprise хэлийг програмчлалын програмчлалын хэл, асуулгын хэл зэрэг хөгжүүлэх хэрэгслүүдийн нэг юм. Эдгээр хөгжүүлэлтийн хэрэгслүүдийн өөр нэг үндэс нь Eclipse Handly төсөл бөгөөд бид үүнийг илүү дэлгэрэнгүй авч үзэх болно (жагсаалтад орсон Eclipse бүрэлдэхүүн хэсгүүдээс энэ нь хамгийн бага мэдэгддэг хэвээр байна).
Бариул/биеийн хэлц гэх мэт бариул дээр суурилсан загваруудын архитектурын үндсэн зарчмуудыг жишээ болгон нөөцийн загвар болон Java загварыг ашиглан дээр авч үзсэн. Мөн нөөцийн загвар болон Java загвар нь Eclipse Java хөгжүүлэлтийн хэрэгслүүдийн (JDT) чухал үндэс суурь болохыг мөн тэмдэглэсэн. Бараг бүх *DT Eclipse төслүүд нь JDT-тэй төстэй архитектуртай байдаг тул бариул дээр суурилсан загварууд нь Eclipse платформ дээр бүтээгдсэн бүх IDE биш юмаа гэхэд олонх нь байдаг гэж хэлэхэд хэтрүүлэг болохгүй байх. Жишээлбэл, Eclipse C/C++ Development Tooling (CDT) нь бариул дээр суурилсан C/C++ загвартай бөгөөд CDT архитектурт Java загвар JDT-д гүйцэтгэдэгтэй ижил үүрэг гүйцэтгэдэг.
Handly-ээс өмнө Eclipse нь бариул дээр суурилсан хэлний загвар бүтээх тусгай номын санг санал болгодоггүй байв. Одоо байгаа загваруудыг голчлон Java загварын кодыг (хуулбарлах / буулгах гэх мэт) шууд тохируулснаар бүтээгдсэн. зөвшөөрсөн тохиолдолд Eclipse Public License (EPL). (Мэдээжийн хэрэг, энэ нь ихэвчлэн Eclipse төслүүдийн хувьд хууль ёсны асуудал биш, харин хаалттай эхийн бүтээгдэхүүнүүдийн хувьд биш юм.) Энэ техник нь төрөлхийн санамсаргүй байдлаас гадна сайн мэддэг асуудлуудыг танилцуулдаг: алдаатай дасан зохицох үед нэвтрүүлсэн кодын давхардал, гэх мэт. Хамгийн муу зүйл бол үүссэн загварууд нь "өөрсдөө зүйл" хэвээр үлдэж, нэгдэх боломжийг ашигладаггүй явдал юм. Гэхдээ бариул дээр суурилсан хэлний загварт зориулсан нийтлэг ойлголт, протоколуудыг тусгаарлах нь EMF-ийн тохиолдолтой адил тэдэнтэй ажиллахад дахин ашиглах боломжтой бүрэлдэхүүн хэсгүүдийг бий болгоход хүргэж болзошгүй юм.
Энэ нь Eclipse эдгээр асуудлыг ойлгоогүй гэсэн үг биш юм. 2005 онд буцаж
Тодорхой утгаараа Handly төсөл нь EMF-тэй ижил төстэй асуудлуудыг шийдвэрлэхэд зориулагдсан боловч бариул дээр суурилсан загварууд, үндсэндээ хэлний (жишээ нь зарим програмчлалын хэлний бүтцийн элементүүдийг төлөөлдөг) загваруудад зориулагдсан болно. Handly дизайн хийхдээ тавьсан гол зорилгыг доор жагсаав.
- Сэдвийн талбайн үндсэн хийсвэр ойлголтыг тодорхойлох.
- Кодыг дахин ашиглах замаар бариул дээр суурилсан хэлний загварыг хэрэгжүүлэх хүчин чармайлтыг бууруулж, чанарыг сайжруулах.
- Үүссэн загваруудад нэгдсэн мета түвшний API-г өгч, хэл дээр суурилсан загваруудтай ажиллах нийтлэг IDE бүрэлдэхүүн хэсгүүдийг үүсгэх боломжтой болгодог.
- Уян хатан байдал, өргөтгөх чадвар.
- Xtext-тэй нэгтгэх (тусдаа давхаргад).
Нийтлэг ойлголт, протоколуудыг тодруулахын тулд хэл дээр суурилсан загваруудын одоо байгаа хэрэгжилтэд дүн шинжилгээ хийсэн. Handly-ийн өгсөн үндсэн интерфэйсүүд болон үндсэн хэрэгжилтийг Зураг дээр үзүүлэв. 8.
Цагаан будаа. 8. Handly элементүүдийн нийтлэг интерфейс ба үндсэн хэрэгжилт
IElement интерфэйс нь элементийн бариулыг илэрхийлдэг бөгөөд Handly-д суурилсан бүх загваруудын элементүүдэд нийтлэг байдаг. Хийсвэр анги Элемент нь бариул/биеийн ерөнхий механизмыг хэрэгжүүлдэг (Зураг 9).
Цагаан будаа. 9. IElement болон ерөнхий бариул/биеийн хэрэгжилт
Нэмж дурдахад Handly загварын элементүүдийн өөрчлөлтийн талаар мэдээлэх ерөнхий механизмыг өгдөг (Зураг 10). Таны харж байгаагаар энэ нь нөөцийн загвар болон Java загварт хэрэгжсэн мэдэгдлийн механизмтай ерөнхийдөө төстэй бөгөөд элементийн өөрчлөлтийн мэдээллийн нэгдсэн дүрслэлийг хангахын тулд IElementDelta ашигладаг.
Цагаан будаа. 10. Handly мэдэгдлийн механизмын ерөнхий интерфейс ба үндсэн хэрэгжилт
Дээр дурдсан Handly хэсгийг (9 ба 10-р зураг) бариул дээр суурилсан бараг бүх загварыг төлөөлөхөд ашиглаж болно. Үүсгэхийн тулд хэл шинжлэлийн загваруудын хувьд төсөл нь нэмэлт функцуудыг санал болгодог - тухайлбал эх текстийн бүтцийн элементүүдийн нийтлэг интерфейс ба үндсэн хэрэгжилтийг санал болгодог. эх үүсвэрийн элементүүд (Зураг 8). ISourceFile интерфейс нь эх файлыг, ISourceConstruct нь эх файл доторх элементийг төлөөлдөг. SourceFile болон SourceConstruct хийсвэр ангиуд нь эх файлууд болон тэдгээрийн элементүүдтэй ажиллахад туслах ерөнхий механизмыг хэрэгжүүлдэг, жишээлбэл, текстийн буфертэй ажиллах, эх текст дэх элементийн координатыг холбох, загваруудыг ажиллаж буй хуулбар буферийн одоогийн агуулгатай нийцүүлэх. , гэх мэт. Эдгээр механизмыг хэрэгжүүлэх нь ихэвчлэн нэлээд бэрхшээлтэй байдаг бөгөөд Handly нь өндөр чанартай үндсэн хэрэгжилтийг хангаснаар бариулд суурилсан хэлний загваруудыг боловсруулах хүчин чармайлтыг эрс багасгадаг.
Дээр дурдсан үндсэн механизмуудаас гадна Handly нь текстийн буфер болон агшин зуурын агшинд зориулсан дэд бүтэц, эх кодын засварлагчтай нэгтгэх дэмжлэг (Xtext засварлагчтай бэлэн интеграцчилал гэх мэт), түүнчлэн зарим нийтлэг UI бүрэлдэхүүн хэсгүүдээр хангадаг. эх кодын засварлагчтай ажиллах. тойм хүрээ зэрэг гар аргаар загварчлах. Түүний чадавхийг харуулахын тулд төсөл нь Handly-д Java загварыг хэрэгжүүлэх зэрэг хэд хэдэн жишээг өгдөг. (Java загварыг JDT-д бүрэн хэрэгжүүлсэнтэй харьцуулахад энэ загварыг илүү ойлгомжтой болгох үүднээс зориуд бага зэрэг хялбаршуулсан болно.)
Өмнө дурьдсанчлан, Handly-ийн анхны загвар болон дараагийн хөгжүүлэлтийн явцад томоохон анхаарал хандуулсан зүйл бол өргөтгөх чадвар, уян хатан байдалд байсан бөгөөд одоо ч байсаар байна.
Зарчмын хувьд бариул дээр суурилсан загварууд нь "дизайнаар" нэлээд сайн масштабтай байдаг. Жишээлбэл, бариул/биеийн хэлц нь загварт зарцуулсан санах ойн хэмжээг хязгаарлах боломжийг олгодог. Гэхдээ бас нюансууд байдаг. Тиймээс Handly-ийг өргөтгөх чадварыг туршиж үзэхэд мэдэгдлийн механизмыг хэрэгжүүлэхэд асуудал илэрсэн - олон тооны элементүүд өөрчлөгдсөн үед дельта барихад хэтэрхий их цаг зарцуулсан. Харгалзах кодыг нэг удаа тохируулсан JDT Java загварт ижил асуудал байсан нь тогтоогдсон. Бид Handly дээрх алдааг засч, JDT-д зориулсан ижил төстэй нөхөөсийг бэлтгэсэн нь талархалтайгаар хүлээн авсан. Энэ бол одоо байгаа загварын хэрэгжилтэд Handly-г нэвтрүүлэх нь ашигтай байж болох цорын ганц жишээ юм, учир нь энэ тохиолдолд ийм алдааг зөвхөн нэг газар засах боломжтой.
Handly-г одоо байгаа загваруудын хэрэгжилтийг техникийн хувьд боломжтой болгохын тулд номын сан ихээхэн уян хатан байх ёстой. Хамгийн гол асуудал бол API загвар дээр хоцрогдсон нийцтэй байдлыг хадгалах явдал юм. Энэ асуудлыг онд шийдсэн
Уян хатан байдал нь өөр талуудтай. Жишээлбэл, Handly нь загварын бүтцэд бараг ямар ч хязгаарлалт тавьдаггүй бөгөөд ерөнхий зориулалтын болон домэйны тусгай хэлийг хоёуланг нь загварчлахад ашиглаж болно. Эх файлын бүтцийг бүтээхдээ Handly нь AST дүрслэлийн тодорхой хэлбэрийг заагаагүй бөгөөд зарчмын хувьд AST өөрөө байхыг шаарддаггүй тул бараг бүх задлан шинжлэх механизмтай нийцтэй байдлыг хангадаг. Эцэст нь Handly нь Eclipse ажлын талбартай бүрэн интеграцчлахыг дэмждэг боловч интеграцчлагдсаныхаа ачаар файлын системтэй шууд ажиллах боломжтой.
Одоогийн хувилбар
Дээр дурдсанчлан эдгээр бүтээгдэхүүний нэг нь 1C: Enterprise Development Tools бөгөөд Handly нь 1C: Enterprise хэлний өндөр түвшний бүтцийн элементүүдийг анхнаасаа суулгасан програмчлалын хэл, асуулгын хэл болгон загварчлахад ашигладаг. . Өөр нэг бүтээгдэхүүнийг олон нийтэд төдийлөн мэддэггүй. Энэ
API тогтвортой байдлын баталгаатай 1.0 хувилбарыг гаргасны дараа төсөл инкубацийн төлөвөөс гарсны дараа Handly шинэ хэрэглэгчтэй болно гэж найдаж байна. Энэ хооронд төсөл нь API-г турших, цаашид сайжруулах ажлыг үргэлжлүүлж, жилд хоёр "гол" хувилбарыг гаргадаг - зургадугаар сард (нэгэн зэрэг Eclipse хувилбартай ижил огноо) болон XNUMX-р сард, үрчлэгч нарт найдаж болох урьдчилан таамаглах боломжтой хуваарийг гаргаж өгдөг. Төслийн "алдааны түвшин" тогтмол бага түвшинд хэвээр байгаа бөгөөд Handly нь эхний хувилбаруудаас хойш анхдагч хэрэглэгчдийн бүтээгдэхүүн дээр найдвартай ажиллаж байгааг бид нэмж хэлж болно. Eclipse Handly-г цаашид судлахын тулд та ашиглаж болно
Эх сурвалж: www.habr.com