{"id":32464,"date":"2019-10-31T21:47:12","date_gmt":"2019-10-31T18:47:12","guid":{"rendered":"https:\/\/prohoster.info\/blog\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools\/"},"modified":"2019-10-31T21:47:12","modified_gmt":"2019-10-31T18:47:12","slug":"eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","status":"publish","type":"post","link":"https:\/\/prohoster.info\/no\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","title":{"rendered":"Eclipse som teknologiplattform for 1C:Enterprise Development Tools","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kanskje, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/\">Eclipse<\/a><\/noindex> trenger ikke lengre noen spesiell presentasjon. Mange er kjent med Eclipse takket v\u00e6re Eclipse Java development tools (<noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/jdt\/\">JDT<\/a><\/noindex>). Det er nettopp denne popul\u00e6re open-source Java IDE som de fleste utviklere assosierer med ordet \u201cEclipse\u201d. Men Eclipse er ogs\u00e5 en utvidbar plattform for integrering av utviklingsverkt\u00f8y (Eclipse Platform), samt en rekke IDE-er bygget p\u00e5 den, inkludert JDT. Eclipse er ogs\u00e5 Eclipse Project, et toppniv\u00e5prosjekt som koordinerer utviklingen av Eclipse Platform og JDT, samt Eclipse SDK \u2013 det leverte resultatet av denne utviklingen. Til slutt er Eclipse ogs\u00e5 en open-source Foundation med et stort fellesskap av prosjekter, hvor ikke alle er skrevet i Java eller er relatert til utviklingsverkt\u00f8y (for eksempel prosjekter <noindex><a rel=\"nofollow\" href=\"https:\/\/iot.eclipse.org\/\">Eclipse IoT<\/a><\/noindex> og <noindex><a rel=\"nofollow\" href=\"https:\/\/science.eclipse.org\/\">Eclipse Science<\/a><\/noindex>). Verdenen av Eclipse er sv\u00e6rt mangfoldig.<\/p>\n<p>I denne artikkelen, som er av generell karakter, vil vi pr\u00f8ve \u00e5 se p\u00e5 noen grunnleggende aspekter av Eclipse-arkitekturen som en plattform for bygging av integrerte utviklingsverkt\u00f8y og gi en innledende forst\u00e5else av komponentene i Eclipse som utgj\u00f8r grunnlaget for den teknologiske plattformen for \u00abden nye Konfiguratoren\u00bb 1C: Enterprise, <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/release_IDE\/\">1C:Enterprise Development Tools<\/a><\/noindex>. Naturligvis vil en slik gjennomgang uunng\u00e5elig v\u00e6re delvis overfladisk og ganske begrenset, ogs\u00e5 fordi vi ikke bare retter oss mot Eclipse-utviklere som m\u00e5lgruppe. Vi h\u00e5per imidlertid at selv erfarne Eclipse-utviklere vil kunne finne interessant informasjon i artikkelen. For eksempel vil vi fortelle om ett av \u00abEclipse-hemmelighetene\u00bb, et relativt nytt og lite kjent prosjekt <noindex><a rel=\"nofollow\" href=\"http:\/\/eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex>, som ble grunnlagt og st\u00f8ttet av firmaet 1C.<br \/>\n<img decoding=\"async\" alt=\"Eclipse som teknologiplattform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/eb399a50bf86b6acce1df9e3d40848d4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Innledning til Eclipse-arkitektur<\/h2>\n<p>\nLa oss f\u00f8rst se p\u00e5 noen generelle aspekter av Eclipse-arkitekturen med eksempelet <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/jdt\/overview.php\">Eclipse Java development tools<\/a><\/noindex> (JDT). Valget av JDT som eksempel er ikke tilfeldig. Det er det f\u00f8rste integrerte utviklingsmilj\u00f8et som kom til Eclipse. De andre *DT-prosjektene i Eclipse, som Eclipse C\/C++ Development Tooling (CDT), ble laget senere og l\u00e5nte b\u00e5de de grunnleggende arkitektoniske prinsippene og enkelte fragmenter av kildekoden fra JDT. Grunnlagene for arkitekturen som er lagt i JDT, er fortsatt relevante for nesten enhver IDE bygget p\u00e5 Eclipse Platform, inkludert 1C:Enterprise Development Tools.<\/p>\n<p>F\u00f8rst og fremst m\u00e5 det p\u00e5pekes at Eclipse har en ganske klar arkitektonisk oppdeling, med separasjon av spr\u00e5k-uavhengig funksjonalitet fra funksjonalitet designet for \u00e5 st\u00f8tte spesifikke programmeringsspr\u00e5k, og separasjon av UI-uavhengige \"kjernen\" (core) komponenter fra komponenter som er relatert til st\u00f8tte for brukergrensesnittet.<\/p>\n<p>Slik definerer Eclipse Platform en felles, spr\u00e5k-uavhengig infrastruktur, mens Java utviklingsverkt\u00f8y legger til en fullverdig Java IDE til Eclipse. B\u00e5de Eclipse Platform og JDT best\u00e5r av flere komponenter, hver av dem knyttet enten til det UI-uavhengige \"kjernen\" eller til UI-laget (figur 1).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologiplattform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/230825124962e721ecca7dfb7dee9a0c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figur 1. Eclipse Platform og JDT<\/b><\/p>\n<p>La oss liste opp hovedkomponentene i Eclipse Platform:<\/p>\n<ul>\n<li><b>Runtime<\/b> \u2014 Definerer plugin-infrastrukturen. Eclipse har en modul\u00e6r arkitektur. I realiteten er Eclipse en samling av \"utvidelsespunkter\" og \"utvidelser\".<\/li>\n<li><b>Workspace<\/b> \u2014 H\u00e5ndterer ett eller flere prosjekter. Et prosjekt best\u00e5r av mapper og filer som vises direkte i filsystemet.<\/li>\n<li><b>Standard Widget Toolkit (SWT)<\/b> \u2014 Tilbyr grunnleggende brukergrensesnittelementer integrert med operativsystemet.<\/li>\n<li><b>JFace<\/b> \u2014 Tilbyr en serie UI-rammeverk bygget over SWT.<\/li>\n<li><b>Workbench<\/b> \u2014 Definerer UI-paradigmet for Eclipse: redakt\u00f8rer, visninger, perspektiver.<\/li>\n<\/ul>\n<p>\nDet m\u00e5 sies at Eclipse Platform ogs\u00e5 tilbyr mange andre nyttige komponenter for oppbyggingen av integrerte utviklingsverkt\u00f8y, blant annet kan Debug, Compare, Search, og Team nevnes. Det b\u00f8r ogs\u00e5 nevnes JFace Text \u2013 grunnlaget for \u00e5 bygge \"smarte redakt\u00f8rer\" for kildekode. Dessverre er det ikke mulig \u00e5 gi en overfladisk gjennomgang av disse komponentene, s\u00e5 vel som komponentene i UI-laget, innenfor rammen av denne artikkelen, derfor vil vi i denne delen begrense oss til en oversikt over de viktigste \"kjerne\" komponentene i Eclipse Platform og JDT.<\/p>\n<h4>Core Runtime<\/h4>\n<p>\nEclipse-plugininfrastrukturen er basert p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.osgi.org\/developer\/specifications\/\">OSGi<\/a><\/noindex> og leveres av prosjektet <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/equinox\/\">Eclipse Equinox<\/a><\/noindex>. Hver Eclipse-plugin er en OSGi-bundle. OSGi-spesifikasjonen definerer blant annet versjonerings- og avhengighetsl\u00f8sningsmekanismer. I tillegg til disse standardmekanismene, introduserer Equinox begrepet <i>utvidelsesspunkter<\/i>Hver plug-in kan definere sine egne utvidelsespunkter, samt tilf\u00f8re systemet ekstra funksjonalitet (\"utvidelser\"), ved \u00e5 bruke utvidelsespunkter definert av denne eller andre plug-ins. En detaljert beskrivelse av OSGi og Equinox-mekanismene g\u00e5r utenfor rammen av denne artikkelen. Det er verdt \u00e5 merke seg at modularisering i Eclipse er total (hvert subsystem, inkludert Runtime, best\u00e5r av \u00e9n eller flere plug-ins), og praktisk talt alt i Eclipse er en utvidelse. Disse prinsippene ble forankret i Eclipse-arkitekturen lenge f\u00f8r implementeringen av OSGi (p\u00e5 det tidlige tidspunktet ble det brukt en egen teknologi, som i stor grad ligner OSGi).<\/p>\n<h4>Kjerne arbeidsomr\u00e5de<\/h4>\n<p>\nN\u00e6r sagt hver integrerte utviklingsmilj\u00f8 bygget p\u00e5 Eclipse-plattformen arbeider med Eclipse arbeidsomr\u00e5de. Det er arbeidsomr\u00e5det som vanligvis inneholder kilden til applikasjonen som utvikles i IDE. Arbeidsomr\u00e5det samsvarer direkte med filsystemet og best\u00e5r av prosjekter som inneholder mapper og filer. Disse prosjektene, mappene og filene kalles <i>ressurser<\/i> arbeidsomr\u00e5det. Implementeringen av arbeidsomr\u00e5det i Eclipse fungerer som en type cache i forhold til filsystemet, noe som merkbart \u00f8ker hastigheten ved gjennomgang av ressursens trestruktur. I tillegg tilbyr arbeidsomr\u00e5det en rekke ekstra tjenester, inkludert <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Resource-deltas\/resource-deltas.html\">mekanisme for varsling av endringer i ressurser<\/a><\/noindex> og <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Builders\/builders.html\">infrastruktur for inkrementelle byggere<\/a><\/noindex>.<\/p>\n<p>Core Resources-komponenten (plug-in org.eclipse.core.resources) er ansvarlig for \u00e5 st\u00f8tte arbeidsomr\u00e5det og dets ressurser. Denne komponenten gir spesielt programmatisk tilgang til arbeidsomr\u00e5det i form av <i>ressursmodell<\/i>. For effektivt arbeid med denne modellen trenger klientene en enkel m\u00e5te \u00e5 representere en referanse til en ressurs. I denne forbindelse ville det v\u00e6re \u00f8nskelig \u00e5 skjule objektet som direkte lagrer ressursens tilstand i modellen fra klienttilgang. Ellers, for eksempel ved sletting av en fil, kunne klienten fortsatt holde p\u00e5 objektet som ikke lenger eksisterer i modellen, noe som ville medf\u00f8re problemer. Eclipse l\u00f8ser dette problemet ved \u00e5 bruke det s\u00e5kalte <i>h\u00e5ndtaket<\/i> til ressursen. H\u00e5ndtaket fungerer som en n\u00f8kkel (den kjenner bare stien til ressursen i arbeidsomr\u00e5det) og kontrollerer fullstendig tilgangen til det interne objektet i modellen, som direkte lagrer informasjon om ressursens tilstand. Denne designen er en variasjon av m\u00f8nsteret <noindex><a rel=\"nofollow\" href=\"http:\/\/wiki.c2.com\/?HandleBodyPattern\">H\u00e5ndtak\/Kropp<\/a><\/noindex>.<\/p>\n<p>Figur 2 illustrerer idiomet Handle\/Body i forhold til ressursmodellen. Grensesnittet IResource representerer handle for ressursen og fungerer som API, i motsetning til klassen Resource, som implementerer dette grensesnittet, samt klassen ResourceInfo, som representerer body og ikke er et API. Det er viktig \u00e5 p\u00e5peke at handle bare kjenner banen til ressursen i forhold til roten av arbeidsomr\u00e5det og ikke inneholder en lenke til resource info. Objekter av resource info danner s\u00e5kalt 'elementtre' (element tree). Denne datastrukturen er helt materialisert i minnet. For \u00e5 finne en instans av resource info som tilsvarer et bestemt handle, traverseres elementtreet i henhold til banen lagret i dette handle.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologiplattform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/9d17cd95be3730ab6b5b9e6e3ed71ace.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figur 2. IResource og ResourceInfo<\/b><\/p>\n<p>Som vi vil se senere, brukes det grunnleggende designet til ressursmodellen (som kan kalles handle-basert) i Eclipse og for andre modeller. La oss n\u00e5 liste opp noen s\u00e6regne egenskaper ved dette designet:<\/p>\n<ul>\n<li>Handle er et verdiobjekt (value object). Verdiobjekter er immutable objekter, hvor likhet ikke er basert p\u00e5 identitet. Slike objekter kan trygt brukes som n\u00f8kkel i hasherte containere. Flere instanser av handle kan referere til den samme ressursen. For \u00e5 sammenligne dem, m\u00e5 metoden equals(Object) brukes.<\/li>\n<li>Handle definerer oppf\u00f8rselen til ressursen, men inneholder ingen informasjon om ressursens tilstand (de eneste dataene det lagrer er \"n\u00f8kkelen\", banen til ressursen).<\/li>\n<li>Handle kan referere til en ikke-eksisterende ressurs (enten en ressurs som enn\u00e5 ikke er opprettet, eller en ressurs som allerede er slettet). Eksistensen av ressursen kan sjekkes ved hjelp av metoden IResource.exists().<\/li>\n<li>Noen operasjoner kan utelukkende implementeres basert p\u00e5 informasjonen som lagres i selve handle (s\u00e5kalte handle-only operasjoner). Eksempler p\u00e5 dette er IResource.getParent(), getFullPath() osv. Ressursen trenger ikke n\u00f8dvendigvis \u00e5 eksistere for at en slik operasjon skal lykkes. Operasjoner som krever at ressursen eksisterer for \u00e5 utf\u00f8res, vil kaste et unntak (CoreException) hvis ressursen ikke eksisterer.<\/li>\n<\/ul>\n<p>\nEclipse tilbyr en effektiv mekanisme for varsling om endringer i workspace-ressurser (se figur 3). Ressurser kan endres b\u00e5de som f\u00f8lge av handlinger utf\u00f8rt i Eclipse IDE selv, og som f\u00f8lge av synkronisering med filsystemet. I begge tilfeller f\u00e5r klientene som har meldt seg p\u00e5 varsler, detaljert informasjon om endringer i form av \u00abressursdelt\u00bb (resource delta). Deltat beskriver endringer mellom to tilstander av (under)treet med workspace-ressurser og er selv et tre, der hver node beskriver endringen av en viss ressurs og inneholder en liste over deltaktene p\u00e5 neste niv\u00e5, som beskriver endringer i underordnede ressurser.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologiplattform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/8af412412ee97d205137ab70c8444a50.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figur 3. IResourceChangeEvent og IResourceDelta<\/b><\/p>\n<p>Den varslingmekanismen som er basert p\u00e5 ressursdelt, har f\u00f8lgende egenskaper:<\/p>\n<ul>\n<li>Enkeltendringer og flere endringer beskrives med samme struktur, siden deltaen bygges opp p\u00e5 prinsippet om rekursiv komposisjon. Klienter som abonnerer kan h\u00e5ndtere varsler om endringer i ressurser ved \u00e5 bruke rekursiv nedstigning gjennom deltatreet.<\/li>\n<li>Deltaen inneholder fullstendig informasjon om endringen av ressursen, inkludert dens flytting og\/eller endringer i tilknyttede \u00abmark\u00f8rer\u00bb (for eksempel representeres kompilasjonsfeil som mark\u00f8rer).<\/li>\n<li>Siden henvisninger til ressursen gj\u00f8res via h\u00e5ndtak, kan deltaen naturlig henvise til en fjern ressurs.<\/li>\n<\/ul>\n<p>\nSom vi snart vil se, er de viktigste komponentene i designet av varslingmekanismen for endring av ressursmodellen relevante ogs\u00e5 for andre h\u00e5ndteringsbaserte modeller.<\/p>\n<h4>JDT Core<\/h4>\n<p>\nModellen for Eclipse workspace-ressurser er en grunnleggende spr\u00e5k-uavhengig modell. JDT Core-komponenten (plugin org.eclipse.jdt.core) tilbyr API for navigering og analyse av strukturen til workspace sett fra Java-perspektiv, den s\u00e5kalte \u00abJava-modellen\u00bb (<i>Java model<\/i>). Dette API-et er definert i termer av Java-elementer, i motsetning til det underliggende API-et for ressursmodellen, som er definert i termer av mapper og filer. De viktigste grensesnittene i treet av Java-elementer er avbildet i figur 4.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologiplattform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/67bfd31e93eaa66aa94b30281693a318.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figur 4. Elementene i Java-modellen<\/b><\/p>\n<p>Java-modellen bruker den samme idiomen handle\/body som ressursmodellen (figur 5). IJavaElement er h\u00e5ndtaket, mens JavaElementInfo fungerer som kroppen. Grensesnittet IJavaElement definerer et felles protokoll for alle Java-elementer. Noen av metodene er kun h\u00e5ndtak: getElementName(), getParent(), osv. JavaElementInfo-objektet lagrer tilstanden til det tilsvarende elementet: dets struktur og egenskaper.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologiplattform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/5b473cccfc8f258d563033ce334cb94f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figur 5. IJavaElement og JavaElementInfo<\/b><\/p>\n<p>Java-modellen har noen avvik i implementeringen av den grunnleggende handle\/body-designen sammenlignet med ressursmodellen. Som nevnt tidligere, inneholder ressursmodellens elementtre, hvor nodene er objekter med ressursinformasjon, fullt ut i minnet. Men i Java-modellen kan det v\u00e6re betydelig flere elementer enn i ressurs-treet, ettersom den ogs\u00e5 representerer den interne strukturen av .java- og .class-filer: typer, felt og metoder.<\/p>\n<p>For \u00e5 unng\u00e5 full materialisering av hele elementtreet i minnet, bruker implementeringen av Java-modellen en begrenset LRU-cache for elementinformasjon, der n\u00f8kkelen er h\u00e5ndtaket IJavaElement. Elementinformasjonsobjektene opprettes etter behov n\u00e5r navigeringen i elementtreet skjer. De minst brukte elementene blir utvist fra cachen, og minneforbruket for modellen forblir innenfor den fastsatte cache-st\u00f8rrelsen. Dette er enda en fordel med handle-basert design, som fullstendig skjuler slike implementasjonsdetaljer fra klientkoden.<\/p>\n<p>Mekanismen for varsling om endringer av Java-elementer er i store trekk lik den tidligere beskrevne mekanismen for sporing av endringer i ressursarbeidsomr\u00e5de. En klient som \u00f8nsker \u00e5 overv\u00e5ke endringer i Java-modellen, abonnerer p\u00e5 varsler som presenteres som et ElementChangedEvent-objekt som inneholder IJavaElementDelta (figur 6).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologiplattform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/0402ec362078eaf50f47756e7f24de01.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figur 6. ElementChangedEvent og IJavaElementDelta<\/b><\/p>\n<p>Java-modellen inneholder ikke informasjon om kroppene til metodene eller navnel\u00f8sning, s\u00e5 for en detaljert analyse av kode skrevet i Java, tilbyr JDT Core en ekstra (ikke handle-basert) modell: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/articles\/Article-JavaCodeManipulation_AST\/index.html\">abstrakt syntaks tre<\/a><\/noindex> (abstrakt syntaksetre, AST). AST representerer resultatet av syntaktisk analyse av kildeteksten. Nodene i AST tilsvarer elementene i strukturen til den aktuelle modulen (erkl\u00e6ringer, operatorer, uttrykk osv.) og inneholder informasjon om koordinatene til det respektive elementet i kildeteksten, samt (som et alternativ) informasjon om navneoppl\u00f8sning i form av referanser til det s\u00e5kalte <i>bindings<\/i>. Bindings er objekter som representerer navngitte enheter, som typer, metoder, og variabler kjent for kompilatoren. I motsetning til nodene i AST, som danner et tre, st\u00f8tter bindings kryssreferanser og danner generelt et graf. Den abstrakte klassen ASTNode er en felles baseklasse for alle noder i AST. Underklassene til ASTNode tilsvarer spesifikke syntaktiske konstruksjoner i Java-spr\u00e5ket.<\/p>\n<p>Siden syntaktiske tr\u00e6r kan bruke betydelig mengde minne, cacher JDT bare ett AST for den aktive redigereren. I motsetning til Java-modellen betraktes AST generelt som en \u00abintermedi\u00e6r\u00bb, \u00abmidlertidig\u00bb modell, der klientene ikke b\u00f8r opprettholde referanser utenfor konteksten av operasjonen som f\u00f8rte til opprettelsen av AST.<\/p>\n<p>De tre oppf\u00f8rte modellene (Java-modell, AST, bindings) utgj\u00f8r sammen grunnlaget for utviklingen av \u00abintelligente utviklingsverkt\u00f8y\u00bb i JDT, hvorav et kraftig Java-redigeringsprogram med forskjellige \u00abassistenter\u00bb, ulike handlinger for behandling av kildekode (blant annet organisering av importliste over navn og formatering i henhold til den angitte stilen), og verkt\u00f8y for s\u00f8k og refaktorering. I denne forbindelse spiller Java-modellen en spesiell rolle, ettersom den brukes som grunnlag for visuell presentasjon av strukturen til den utviklede applikasjonen (for eksempel i Package Explorer, Outline, Search, Call Hierarchy, og Type Hierarchy).<\/p>\n<h2>Eclipse-komponenter som brukes i 1C:Enterprise Developments Tools<\/h2>\n<p>\nFig. 7 viser Eclipse-komponentene som danner grunnlaget for den teknologiske plattformen for 1C:Enterprise Development Tools.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologiplattform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/248cceea47ee507b9ad22d6964738ee7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 7. Eclipse som plattform for 1C:Enterprise Development Tools<\/b><\/p>\n<p><b>Eclipse-plattformen<\/b> tilbyr grunnleggende infrastruktur. Vi har sett p\u00e5 noen aspekter av denne infrastrukturen i forrige avsnitt.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/modeling\/emf\/\">Eclipse Modeling Framework<\/a><\/noindex><\/b> (<b>EMF<\/b>) gir vanlig verkt\u00f8y for modellering av strukturerte data. EMF er integrert med Eclipse Platform, men kan ogs\u00e5 brukes selvstendig i vanlige Java-applikasjoner. Det er ganske vanlig at nybegynnere i Eclipse allerede er godt kjent med EMF, selv om de fortsatt ikke helt forst\u00e5r nyansene i Eclipse Platform. En grunn til den velfortjente populariteten er det universelle designet, som blant annet inkluderer et forent API p\u00e5 meta-niv\u00e5 som gj\u00f8r det mulig \u00e5 jobbe generelt med enhver EMF-modell. De grunnleggende implementeringene av EMF for modellobjekter og modellenes kodegenereringsundersystem basert p\u00e5 meta-modellen \u00f8ker utviklingshastigheten betydelig og reduserer feil. EMF inneholder ogs\u00e5 mekanismer for serialisering av modeller, sporing av endringer i modellen, og mye mer. <\/p>\n<p>Som ethvert virkelig universelt verkt\u00f8y, er EMF egnet for en rekke oppgaver knyttet til modellering, men noen klasser av modeller (for eksempel de h\u00e5ndterte modellene nevnt tidligere) kan trenge mer spesialiserte verkt\u00f8y for modellering. \u00c5 forklare EMF er en utakknemlig oppgave, s\u00e6rlig innen rammen av en enkelt artikkel, siden det er et emne for en egen bok, og en ganske tykk en. La oss bare merke oss at den kvalitetsmessige generaliseringssystemet som ligger til grunn for EMF har gjort det mulig \u00e5 utvikle et helt spekter av prosjekter dedikert til modellering, som inng\u00e5r i toppniv\u00e5prosjektet. <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/modeling\/\">Eclipse Modellering<\/a><\/noindex> sammen med selve EMF. Et slikt prosjekt er Eclipse Xtext.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/Xtext\/\">Eclipse Xtext<\/a><\/noindex><\/b> gir infrastrukturen for 'tekstmodellering'. Xtext bruker <noindex><a rel=\"nofollow\" href=\"http:\/\/www.antlr.org\/\">ANTLR<\/a><\/noindex> for syntactic analysis of the source text and EMF for representing the resulting ASG (abstract semantic graph, which is essentially a combination of AST and bindings), also known as the \"semantic model.\" The grammar of the modeled language using Xtext is described in its own Xtext language. This allows not only generating a grammar description for ANTLR but also obtaining an AST serialization mechanism (i.e., Xtext provides both a parser and an unparser), context-aware suggestions, and a variety of other language components. On the other hand, the grammar description language used in Xtext is less flexible compared to, say, the grammar description language in ANTLR. Therefore, sometimes it is necessary to \"bend\" the implemented language to Xtext, which is usually not an issue if we are dealing with a newly developed language but may be unacceptable for languages with an established syntax. Nevertheless, Xtext is currently the most mature, functionally complete, and versatile tool in Eclipse for creating programming languages and development tools for them. It is particularly ideal for rapid prototyping. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA\">domain-specific languages<\/a><\/noindex> (domain-specific language, DSL). In addition to the aforementioned \u201clanguage core\u201d based on ANTLR and EMF, Xtext offers a multitude of useful higher-level components, including indexing mechanisms, incremental building, a \u201csmart editor,\u201d and much, much more, but it leaves aside language handle-based models. Like EMF, Xtext is a subject worthy of a separate book, and we will hardly be able to even briefly touch on all its capabilities now.<\/p>\n<p>1C:Enterprise Development Tools actively utilizes both EMF itself and a number of other Eclipse Modeling projects. In particular, Xtext is one of the foundations for development tools for such 1C:Enterprise languages as the embedded programming language and query language. Another foundation of these development tools is the Eclipse Handly project, which we will discuss in more detail (of the listed Eclipse components, it is currently the least known).<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex><\/b>, prosjektet av toppniv\u00e5et Eclipse Technology, oppstod som et resultat av den initiale bidraget av kode til Eclipse Foundation, utf\u00f8rt av firmaet 1C i 2014. Siden den gang har firmaet 1C fortsatt \u00e5 st\u00f8tte utviklingen av prosjektet: committere Handly er ansatte i selskapet. Prosjektet er lite, men fyller en unik nisje i Eclipse: hovedm\u00e5let er \u00e5 st\u00f8tte utviklingen av handle-baserte modeller.<\/p>\n<p>De grunnleggende arkitekturprinsippene for handle-baserte modeller, som idiomet handle\/body, ble tidligere diskutert med eksempler fra ressursmodellen og Java-modellen. Det ble ogs\u00e5 bemerket at b\u00e5de ressursmodellen og Java-modellen er viktige fundamenter for Eclipse Java Development Tools (JDT). Siden nesten alle *DT-prosjekter i Eclipse har en arkitektur som ligner p\u00e5 JDT, er det ikke en overdrivelse \u00e5 si at handle-baserte modeller ligger til grunn for mange, om ikke alle IDE-er bygget p\u00e5 Eclipse-plattformen. For eksempel har Eclipse C\/C++ Development Tooling (CDT) en handle-basert modell for C\/C++, som spiller samme rolle i CDT-arkitekturen som Java-modellen i JDT.<\/p>\n<p>F\u00f8r Handly ble introdusert, tilb\u00f8d ikke Eclipse spesialiserte biblioteker for oppbygging av spr\u00e5klige handle-baserte modeller. De eksisterende modellene ble f\u00f8rst og fremst laget ved direkte tilpasning av Java-modellen (a.k.a. copy\/paste), <i>i tilfeller der det er tillatt<\/i> Eclipse Public License (EPL). (Det er klart at, for eksempel, for prosjekter i Eclipse selv, er dette vanligvis ikke et juridisk problem, noe som ikke kan sies om produkter med lukket kildekode.) I tillegg til det karakteristiske kaoset denne metoden f\u00f8rer med seg, medf\u00f8rer den velkjente problemer: duplisering av kode, feil som oppst\u00e5r under tilpasning, osv. Hva som er verre, de resulterende modellene forblir 'ting i seg selv' og utnytter ikke det tilgjengelige potensialet for enhetlighet. \u00c5 utdra felles konsept og protokoller for spr\u00e5klige handle-baserte modeller kunne ha f\u00f8rt til opprettelsen av gjenbrukbare komponenter for arbeidet med dem, p\u00e5 samme m\u00e5te som tilfelle med EMF.<\/p>\n<p>Det kan ikke sies at Eclipse ikke forsto disse problemene. Allerede i 2005 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.xing.com\/profile\/Martin_Aeschlimann\">Martin Aeschlimann<\/a><\/noindex>, oppsummerte erfaringene fra utviklingen av prototypen til CDT, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/org\/langsymp\/position_paper_martin_aeschlimann.html\">argumenterte<\/a><\/noindex> behovet for \u00e5 skape en felles infrastruktur for spr\u00e5klige modeller, inkludert handle-baserte modeller. Men, som det ofte skjer, ble det ikke tatt tak i disse ideene p\u00e5 grunn av mer prioriterte oppgaver. I mellomtiden forblir faktoriseringen av koden for DT-prosjekter et av de fortsatt utilstrekkelig utrettede temaene i Eclipse.<\/p>\n<p>I en viss forstand er prosjektet Handly ment \u00e5 l\u00f8se omtrent de samme oppgavene som EMF, men for handle-baserte modeller, og f\u00f8rst og fremst spr\u00e5klige (dvs. representerende elementene i strukturen til et programmeringsspr\u00e5k). Nedenfor listes de viktigste m\u00e5lene som ble satt under utformingen av Handly:<\/p>\n<ul>\n<li>Identifisere de viktigste abstraksjonene innen emneomr\u00e5det.<\/li>\n<li>Redusere innsats og forbedre kvaliteten p\u00e5 implementeringen av spr\u00e5klige handle-baserte modeller gjennom gjenbruk av kode.<\/li>\n<li>Tilby et enhetlig API p\u00e5 meta-niv\u00e5 til de resulterende modellene, som gj\u00f8r det mulig \u00e5 lage generiske IDE-komponenter som arbeider med spr\u00e5klige handle-baserte modeller.<\/li>\n<li>Fleksibilitet og skalerbarhet.<\/li>\n<li>Integrasjon med Xtext (i et eget lag).<\/li>\n<\/ul>\n<p>\nFor \u00e5 identifisere felles konsepter og protokoller ble eksisterende implementeringer av spr\u00e5klige handle-baserte modeller analysert. Hovedgrensesnittene og de grunnleggende implementeringene som tilbys av Handly, er vist i figur 8.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologiplattform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/47f4bf74093245334b8d67b149734dfc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figur 8. Felles grensesnitt og grunnleggende implementeringer av Handly-elementer<\/b><\/p>\n<p>IElement-grensesnittet representerer handle-elementet og er felles for elementene i alle modeller basert p\u00e5 Handly. Den abstrakte klassen Element implementerer en generisk mekanisme for handle\/body (figur 9).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologiplattform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/0651c1f284b7edfa36313d4b51d72f08.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figur 9. IElement og den generiske implementeringen av handle\/body<\/b><\/p>\n<p>I tillegg tilbyr Handly en generisk mekanisme for varsling om endringer i modelelementer (figur 10). Som det kan sees, er det i grove trekk lik mekanismene for varsling som er implementert i ressursmodellen og Java-modellen, og bruker IElementDelta for enhetlig fremstilling av informasjon om endringen av elementet.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologiplattform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/cbdec8cf874308e0fa9dd96d04f62703.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figur 10. Felles grensesnitt og grunnleggende implementeringer av Handly-varsling<\/b><\/p>\n<p>Den delen av Handly som er omtalt ovenfor (figur 9 og 10) kan brukes til \u00e5 representere nesten alle handle-baserte modeller. For \u00e5 lage <i>spr\u00e5klige<\/i> modeller tilbyr prosjektet ekstra funksjonalitet \u2013 spesielt felles grensesnitt og grunnleggende implementeringer for elementene i strukturen av kildekoden, s\u00e5kalt <i>source elements<\/i> (figur 8). Grensesnittet ISourceFile representerer kildefilen, mens ISourceConstruct er et element innenfor kildefilen. De abstrakte klassene SourceFile og SourceConstruct implementerer generiske mekanismer for \u00e5 st\u00f8tte arbeidet med kildefiler og deres elementer, for eksempel arbeid med tekstbuffere, binding til koordinater for elementet i den opprinnelige teksten, samt sammenstilling av modellen med det n\u00e5v\u00e6rende innholdet i bufferets arbeidskopi, osv. Implementeringen av disse mekanismene er vanligvis en ganske kompleks oppgave, og Handly kan betydelig redusere utviklingsinnsatsen for spr\u00e5kmodeller basert p\u00e5 h\u00e5ndtak ved \u00e5 tilby kvalitetsmessige grunnimplementeringer.<\/p>\n<p>I tillegg til de nevnte grunnmekanismene tilbyr Handly infrastruktur for tekstbuffere og \u00absnapshot\u00bb-funksjonalitet, st\u00f8tte for integrasjon med kildekode-redakt\u00f8rer (inkludert en \u00about-of-the-box\u00bb integrasjon med Xtext-redakt\u00f8ren), samt noen vanlige UI-komponenter som fungerer med modeller basert p\u00e5 Handly, slik som outline framework. For \u00e5 illustrere sine muligheter tilbyr prosjektet flere eksempler, inkludert implementeringen av en Java-modell p\u00e5 Handly. (Sammenlignet med den fullstendige implementeringen av Java-modellen i JDT, er denne modellen bevisst noe forenklet for bedre oversiktlighet.)<\/p>\n<p>Som nevnt tidligere, har betydelig oppmerksomhet blitt viet til b\u00e5de den innledende designen av Handly og dens videre utvikling, spesielt med hensyn til skalerbarhet og fleksibilitet. <\/p>\n<p>I prinsippet skalerer modeller basert p\u00e5 h\u00e5ndtak ganske godt \u201cby design\u201d. For eksempel lar idiomen handle\/body begrense mengden hukommelse modellen bruker. Men det er ogs\u00e5 nyanser. Under testing av Handly for skalerbarhet ble det oppdaget et problem med implementeringen av notifikasjonsmekanismen \u2013 n\u00e5r et stort antall elementer ble endret, tok det for lang tid \u00e5 bygge deltas. Det viste seg at det samme problemet ogs\u00e5 var til stede i Java-modellen til JDT, fra hvilken den aktuelle koden en gang ble tilpasset. Vi rettet feilen i Handly og utarbeidet en lignende patch for JDT, som ble mottatt med takknemlighet. Dette er bare ett eksempel p\u00e5 hvordan implementeringen av Handly i eksisterende modellimplementeringer kunne v\u00e6rt potensielt nyttig, da en slik feil kunne blitt l\u00f8st ett sted.<\/p>\n<p>For the integration of Handly into existing model implementations to be technically feasible, the library must possess significant flexibility. The main challenge is to maintain API backward compatibility with the model. This task was solved by <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/NewIn05\">Handly 0.5<\/a><\/noindex> clear separation of model-specific API, defined and fully controlled by the developer, from the unified meta-level API provided by the library. This not only makes the integration of Handly into existing implementations technically feasible, but also grants the developer of the new model significant freedom in designing the API.<\/p>\n<p>Flexibility has other aspects as well. For example, Handly imposes almost no restrictions on the model structure and can be used for both general-purpose language modeling and domain-specific languages. When building the source file structure, Handly does not prescribe any specific form of AST representation and does not require the presence of an AST, thereby ensuring compatibility with virtually any parsing mechanism. Finally, Handly supports full integration with the Eclipse workspace but can also work directly with file systems, thanks to integration with <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/EFS\">Eclipse File System<\/a><\/noindex> (EFS).<\/p>\n<p>The current version <noindex><a rel=\"nofollow\" href=\"https:\/\/projects.eclipse.org\/projects\/technology.handly\/releases\/0.6\">Handly 0.6<\/a><\/noindex> was released in December 2016. Although the project is currently in incubation and the API is not yet finalized, Handly is already used in two major commercial products that dared to act as 'early adopters', and so far, they do not regret it.<\/p>\n<p>As mentioned above, one of these products is 1C:Enterprise Development Tools, where Handly has been used from the outset to model elements of the high-level structure of languages like 1C:Enterprise, such as the embedded programming language and query language. The other product is less known to the general public. It is <noindex><a rel=\"nofollow\" href=\"https:\/\/www.codasip.com\/custom-processor\/\">Codasip Studio<\/a><\/noindex>, an integrated environment for designing application-specific instruction-set processors (ASIPs), used both within the Czech company Codasip and by its clients, among whom are <noindex>AMD<\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.avg.com\/\">STDDEV<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.mobileye.com\/\">Mobileye<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.sigmadesigns.com\/\">Sigma Designs<\/a><\/noindex>. Codasip har brukt Handly i produksjon siden 2015, begynnende med versjon Handly 0.2. Den siste utgivelsen av Codasip Studio bruker versjon 0.5, som ble utgitt i juni 2016. Ond\u0159ej Il\u010d\u00edk, som leder utviklingen av IDE i Codasip, er i kontakt med prosjektet og gir viktig tilbakemelding fra \u00abeksterne adopsjonsbrukere\u00bb. Han har til og med klart \u00e5 finne litt tid til \u00e5 bidra direkte til prosjektutviklingen ved \u00e5 implementere UI-laget (~ 4000 linjer med kode) for et av Handly-eksemplene, en Java-modell. Mer informasjon \u00abfra f\u00f8rsteh\u00e5nd\u00bb om bruk av Handly av adopsjonsbrukere kan f\u00e5s p\u00e5 siden <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/Adopters\">Suksesshistorier<\/a><\/noindex> project.<\/p>\n<p>Vi h\u00e5per at etter utgivelsen av versjon 1.0 med API-stabilitetsgaranti, og prosjektets utgang fra inkubasjonsstatus, vil Handly f\u00e5 flere adopsjonsbrukere. I mellomtiden fortsetter prosjektet med testing og videre forbedring av API-et, og utgir to \u00abstore\u00bb oppdateringer i \u00e5ret \u2013 i juni (samme dato som den samtidige utgivelsen av Eclipse) og desember, og sikrer en forutsigbar tidsplan som adopsjonsbrukere kan stole p\u00e5. Det er ogs\u00e5 verdt \u00e5 nevne at \u00abbug rate\u00bb-indikatoren for prosjektet har forblitt p\u00e5 et stabilt lavt niv\u00e5, og Handly har p\u00e5litelig blitt brukt i produktene til tidlige adoptere siden de f\u00f8rste versjonene. For mer informasjon om Eclipse Handly kan du bruke <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pisv\/gethandly\/wiki\">Kom i gang med oppl\u00e6ringsprogrammet<\/a><\/noindex> og <noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/downloads\/download.php?file=\/handly\/docs\/handly-overview.pdf&amp;r=1\">Arkitektonisk oversikt<\/a><\/noindex>.<br \/>\n<br \/>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/323508\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, Eclipse \u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438. \u041c\u043d\u043e\u0433\u0438\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 Eclipse \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f Eclipse Java development tools (JDT). \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0430\u044f open-source Java IDE \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0441\u043e \u0441\u043b\u043e\u0432\u043e\u043c \u201cEclipse\u201d. \u041e\u0434\u043d\u0430\u043a\u043e Eclipse \u2013 \u044d\u0442\u043e \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (Eclipse Platform), \u0438 \u0446\u0435\u043b\u044b\u0439 \u0440\u044f\u0434 IDE, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 \u0435\u0435 \u043e\u0441\u043d\u043e\u0432\u0435, \u0432 \u0442\u043e\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24268,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32464","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.5 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, Eclipse \u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/no\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"nn_NO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Eclipse \u043a\u0430\u043a \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043b\u044f 1C:Enterprise Development Tools | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, Eclipse \u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/no\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:47:12+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:47:12+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Eclipse som teknologisk plattform for 1C:Enterprise Development Tools | ProHoster","description":"Eclipse trenger antageligvis ikke spesiell introduksjon lenger.","canonical_url":"https:\/\/prohoster.info\/no\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nn_NO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Eclipse \u043a\u0430\u043a \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043b\u044f 1C:Enterprise Development Tools | ProHoster","og:description":"\u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, Eclipse \u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438.","og:url":"https:\/\/prohoster.info\/no\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:47:12+00:00","article:modified_time":"2019-10-31T18:47:12+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32464","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 11:00:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:58:24","updated":"2026-01-21 11:00:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts\/32464","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/comments?post=32464"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts\/32464\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/media\/24268"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/media?parent=32464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/categories?post=32464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/tags?post=32464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}