Мүмкін,
Табиғатта шолу болып табылатын бұл мақалада біз интеграцияланған әзірлеу құралдарын құру платформасы ретінде Eclipse архитектурасының кейбір негіздерін қарастыруға тырысамыз және технологияның негізін құрайтын Eclipse компоненттері туралы бастапқы түсінік береміз. «жаңа конфигураторға» арналған платформа 1С: Кәсіпорын.
Eclipse архитектурасына кіріспе
Алдымен мысалды пайдалана отырып, Eclipse архитектурасының кейбір жалпы аспектілерін қарастырайық
Ең алдымен, Eclipse белгілі бір бағдарламалау тілдерін қолдауға арналған функционалдылықтан тілге тәуелсіз функционалдылықты және UI тәуелсіз «негізгі» компоненттерін байланысты құрамдас бөліктерден бөлумен жеткілікті айқын архитектуралық қабатпен сипатталатынын атап өткен жөн. қолдаушы пайдаланушы интерфейсімен.
Осылайша, Eclipse платформасы жалпы, тілден тәуелсіз инфрақұрылымды анықтайды және Java әзірлеу құралдары Eclipse-ге толық функционалды Java IDE қосады. Eclipse платформасы да, JDT де бірнеше құрамдас бөліктерден тұрады, олардың әрқайсысы UI-ге тәуелсіз «ядроға» немесе UI деңгейіне жатады (1-сурет).
Күріш. 1. Eclipse платформасы және 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 интерфейсі ресурстың дескрипторын білдіреді және API болып табылады, бұл интерфейсті жүзеге асыратын Ресурс сыныбына және API болып табылмайтын денені көрсететін ResourceInfo сыныбына қарағанда. Біз дескриптор жұмыс кеңістігінің түбіріне қатысты ресурсқа жолды ғана білетінін және ресурс ақпаратына сілтемені қамтымайтынын атап өтеміз. Ресурс ақпаратының нысандары «элемент ағашы» деп аталатындарды құрайды. Бұл деректер құрылымы толығымен жадта материалдандырылған. Дескрипторға сәйкес ресурс ақпаратының данасын табу үшін элемент ағашы сол дескрипторда сақталған жолға сәйкес өтеді.
Күріш. 2. IResource және ResourceInfo
Кейінірек көретініміздей, ресурс үлгісінің негізгі дизайны (біз оны өңдеуге негізделген деп атаймыз) Eclipse-де басқа модельдер үшін де қолданылады. Әзірге осы дизайнның кейбір ерекше қасиеттерін тізіп көрейік:
- Handle - мән нысаны. Мән объектілері теңдігі сәйкестікке негізделмейтін өзгермейтін нысандар болып табылады. Мұндай нысандарды хэштелген контейнерлерде кілт ретінде қауіпсіз пайдалануға болады. Дескриптордың бірнеше даналары бір ресурсқа сілтеме жасай алады. Оларды салыстыру үшін equals(Object) әдісін қолдану керек.
- Дескриптор ресурс әрекетін анықтайды, бірақ ресурс күйі туралы ақпаратты қамтымайды (ол сақтайтын жалғыз деректер – «кілт», ресурсқа жол).
- Дескриптор жоқ ресурсқа сілтеме жасай алады (әлі жасалмаған ресурс немесе әлдеқашан жойылған ресурс). Ресурстың бар-жоғын IResource.exists() әдісі арқылы тексеруге болады.
- Кейбір операцияларды тек дескриптордың өзінде сақталған ақпарат негізінде жүзеге асыруға болады (тек өңдеуге арналған операциялар деп аталады). Мысалдар IResource.getParent(), getFullPath() және т.б. Мұндай операция сәтті болуы үшін ресурстың болуы қажет емес. Табысты болу үшін ресурстың болуын талап ететін әрекеттер, егер ресурс жоқ болса, CoreException шығарады.
Eclipse жұмыс кеңістігінің ресурстарының өзгерістері туралы хабарлаудың тиімді механизмін қамтамасыз етеді (3-сурет). Ресурстар Eclipse IDE ішінде орындалатын әрекеттер нәтижесінде немесе файлдық жүйемен синхрондау нәтижесінде өзгеруі мүмкін. Екі жағдайда да хабарландыруларға жазылған клиенттерге «ресурстардың дельталары» түріндегі өзгерістер туралы толық ақпарат беріледі. Дельта жұмыс кеңістігі ресурсының (ішкі) ағашының екі күйі арасындағы өзгерістерді сипаттайды және өзі ағаш болып табылады, оның әрбір түйіні ресурсқа өзгертуді сипаттайды және еншілес ресурстарға өзгерістерді сипаттайтын келесі деңгейдегі дельталар тізімін қамтиды.
Күріш. 3. IResourceChangeEvent және IResourceDelta
Ресурстардың дельталарына негізделген хабарландыру механизмі келесі сипаттамаларға ие:
- Дельта рекурсивті құрам принципі арқылы салынғандықтан, жалғыз өзгеріс және көптеген өзгерістер бірдей құрылымды пайдалана отырып сипатталады. Абоненттік клиенттер ресурсты өзгерту туралы хабарландыруларды дельталар ағашы арқылы рекурсивті түсіруді пайдалана отырып өңдей алады.
- Дельта ресурстағы өзгерістер туралы толық ақпаратты қамтиды, оның ішінде оның қозғалысы және/немесе онымен байланысты «маркерлердің» өзгерістері (мысалы, компиляция қателері маркерлер ретінде көрсетіледі).
- Ресурс сілтемелері дескриптор арқылы жасалғандықтан, Delta қашықтағы ресурсқа табиғи түрде сілтеме жасай алады.
Жақында көретініміздей, ресурс үлгісін өзгерту туралы хабарландыру механизмін жобалаудың негізгі құрамдастары басқа да тұтқаға негізделген үлгілер үшін де өзекті болып табылады.
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 кэштейді. Java үлгісінен айырмашылығы, 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 туралы айту, әсіресе бір мақаланың шектеулі шегінде, алғыссыз міндет, өйткені бұл жеке кітаптың тақырыбы және өте қалың. ЭМӨ негізінде жатқан жоғары сапалы жалпылау жүйесі жоғары деңгейлі жобаға енгізілген модельдеуге арналған жобалардың тұтас кешенін тудыруға мүмкіндік бергенін атап өтейік.
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 жобаларының өзі үшін заңды мәселе емес, бірақ жабық бастапқы өнімдер үшін емес.) Бұл әдіс өзіне тән кездейсоқтықтан басқа, белгілі проблемаларды енгізеді: қателерге бейімделу кезінде енгізілген кодты қайталау, т.б. Ең сорақысы, алынған модельдер «өзіндік заттар» болып қалады және біріктіру мүмкіндігін пайдаланбайды. Бірақ тұтқаға негізделген тіл үлгілері үшін жалпы түсініктер мен хаттамаларды оқшаулау ЭМӨ жағдайында болған жағдайға ұқсас олармен жұмыс істеу үшін қайта пайдалануға болатын компоненттерді жасауға әкелуі мүмкін.
Бұл Eclipse бұл мәселелерді түсінбеді. 2005 жылы
Белгілі бір мағынада Handly жобасы EMF сияқты шамамен бірдей мәселелерді шешуге арналған, бірақ дескрипторға негізделген модельдер үшін және ең алдымен тілдік (яғни, кейбір бағдарламалау тілінің құрылымының элементтерін білдіреді). Handly жобалау кезінде қойылған негізгі мақсаттар төменде келтірілген:
- Пәндік аймақтың негізгі абстракцияларын анықтау.
- Күшті азайту және кодты қайта пайдалану арқылы өңдеуге негізделген тіл үлгілерін енгізу сапасын арттыру.
- Алынған үлгілерге біртұтас мета деңгейлі API қамтамасыз ету, тіл дескрипторына негізделген үлгілермен жұмыс істейтін жалпы IDE құрамдастарын жасауға мүмкіндік береді.
- Икемділік және ауқымдылық.
- Xtext-пен интеграция (бөлек қабатта).
Жалпы тұжырымдамалар мен хаттамаларды бөлектеу үшін тіл дескрипторына негізделген үлгілердің бар іске асырулары талданды. Handly ұсынған негізгі интерфейстер мен негізгі іске асырулар суретте көрсетілген. 8.
Күріш. 8. Жалпы интерфейстер және Handly элементтерінің негізгі іске асырулары
IElement интерфейсі элементтің дескрипторын білдіреді және Handly негізіндегі барлық үлгілердің элементтеріне ортақ болып табылады. дерексіз класс Element жалпыланған тұтқа/дене механизмін жүзеге асырады (Cурет 9).
Күріш. 9. IElement және жалпы дескриптор/денені іске асыру
Сонымен қатар, Handly модель элементтеріндегі өзгерістер туралы хабарлаудың жалпыланған механизмін ұсынады (Cурет 10). Көріп отырғаныңыздай, ол ресурс үлгісінде және Java үлгісінде іске асырылған хабарландыру механизмдеріне кең түрде ұқсайды және элементті өзгерту ақпаратының бірыңғай көрінісін қамтамасыз ету үшін IElementDelta пайдаланады.
Күріш. 10. Handly хабарландыру механизмінің жалпы интерфейстері және негізгі іске асырулары
Жоғарыда талқыланған Handly бөлігін (9 және 10-суреттер) дерлік тұтқаға негізделген үлгілерді көрсету үшін пайдалануға болады. Жасау үшін лингвистикалық модельдер үшін жоба қосымша функционалдылықты ұсынады - атап айтқанда, бастапқы мәтін құрылымының элементтері үшін жалпы интерфейстер және негізгі іске асырулар, деп аталатын бастапқы элементтер (Cурет 8). ISourceFile интерфейсі бастапқы файлды, ал ISourceConstruct бастапқы файлдағы элементті білдіреді. SourceFile және SourceConstruct дерексіз сыныптары бастапқы файлдармен және олардың элементтерімен жұмыс істеуді қолдаудың жалпыланған механизмдерін жүзеге асырады, мысалы, мәтін буферлерімен жұмыс істеу, бастапқы мәтіндегі элементтің координаталарымен байланыстыру, үлгілерді жұмыс көшірме буферінің ағымдағы мазмұнымен салыстыру , т.б. Бұл тетіктерді іске асыру әдетте өте қиын болып табылады және Handly жоғары сапалы базалық енгізулерді қамтамасыз ету арқылы дескрипторға негізделген тіл үлгілерін әзірлеу күш-жігерін айтарлықтай азайтады.
Жоғарыда аталған негізгі механизмдерге қоса, Handly мәтіндік буферлер мен суреттерге арналған инфрақұрылымды, бастапқы код редакторларымен интеграцияны қолдауды (соның ішінде Xtext өңдегішімен қораптан тыс интеграцияны), сондай-ақ кейбір жалпы пайдаланушы интерфейсінің құрамдастарын ұсынады. бастапқы код өңдегіштерімен жұмыс істеу. Оның мүмкіндіктерін көрсету үшін жоба бірнеше мысалдарды, соның ішінде Handly жүйесінде Java үлгісін енгізуді ұсынады. (JDT-де Java үлгісін толық енгізумен салыстырғанда, бұл модель үлкенірек түсінікті болу үшін әдейі жеңілдетілген.)
Жоғарыда айтылғандай, Handly-дің бастапқы дизайны мен одан кейінгі дамуы кезінде ауқымдылық пен икемділікке басты назар аударылды және болып қала береді.
Негізінде, тұтқаға негізделген модельдер «дизайн бойынша» өте жақсы масштабталады. Мысалы, дескриптор/дене идиомасы үлгі тұтынатын жад көлемін шектеуге мүмкіндік береді. Бірақ нюанстар да бар. Осылайша, Handly-ді масштабтауға тестілеу кезінде хабарландыру механизмін жүзеге асыруда мәселе анықталды - элементтердің көп саны өзгерген кезде дельталарды құру тым көп уақытты алды. Дәл осындай мәселе JDT Java үлгісінде болғаны белгілі болды, оның сәйкес коды бір кездері бейімделген. Біз Handly бағдарламасында қатені түзетіп, JDT үшін ұқсас патч дайындадық, ол ризашылықпен қабылданды. Бұл Handly үлгісін бар үлгі іске асыруға енгізу әлеуетті пайдалы болуы мүмкін мысалдардың бірі, себебі бұл жағдайда мұндай қатені тек бір жерде түзетуге болады.
Қолданыстағы модельді іске асыруға Handly енгізуді техникалық мүмкін ету үшін кітапханада айтарлықтай икемділік болуы керек. Негізгі мәселе - API үлгісі бойынша кері үйлесімділікті сақтау. Бұл мәселе жылы шешілді
Икемділіктің басқа да аспектілері бар. Мысалы, Handly модель құрылымына дерлік шектеулер қоймайды және оны жалпы мақсаттағы және доменге тән тілдерді модельдеу үшін пайдалануға болады. Бастапқы файлдың құрылымын құрастыру кезінде Handly AST ұсынудың қандай да бір нақты түрін белгілемейді және, негізінен, AST-тің өзінің болуын талап етпейді, осылайша кез келген дерлік талдау механизмімен үйлесімділікті қамтамасыз етеді. Соңында, Handly Eclipse жұмыс кеңістігімен толық интеграцияны қолдайды, бірақ сонымен бірге оның интеграциясы арқасында файлдық жүйелермен тікелей жұмыс істей алады.
Қазіргі нұсқасы
Жоғарыда атап өтілгендей, осы өнімдердің бірі 1C: Enterprise Development Tools болып табылады, мұнда Handly басынан бастап кірістірілген бағдарламалау тілі және сұраныс тілі ретінде 1С: Кәсіпорын тілдерінің жоғары деңгейлі құрылымының элементтерін модельдеу үшін қолданылады. . Басқа өнім көпшілікке аз белгілі. Бұл
API тұрақтылығының кепілдігі бар 1.0 нұсқасы шығарылғаннан кейін және жоба инкубациялық күйден шыққаннан кейін Handly-де жаңа қабылдаушылар болады деп үміттенеміз. Әзірге жоба API-ны сынауды және одан әрі жетілдіруді жалғастыруда, жылына екі «негізгі» шығарылымды шығарады - маусымда (бір мезгілде Eclipse шығарылымымен бірдей күн) және желтоқсанда, қабылдаушылар сене алатын болжамды кестені қамтамасыз етеді. Сондай-ақ жобаның «қателік деңгейі» тұрақты түрде төмен деңгейде қалып отыр және Handly алғашқы нұсқалардан бастап ерте қолданушылардың өнімдерінде сенімді жұмыс істеп келеді. Eclipse Handly қосымшасын зерттеу үшін пайдалануға болады
Ақпарат көзі: www.habr.com