{"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\/pt\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","title":{"rendered":"Eclipse como plataforma tecnol\u00f3gica para 1C:Enterprise Development Tools","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Provavelmente, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/\">Eclipse<\/a><\/noindex> j\u00e1 n\u00e3o precisa de apresenta\u00e7\u00f5es especiais. Muitos conhecem o Eclipse gra\u00e7as \u00e0s ferramentas de desenvolvimento Java do Eclipse (<noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/jdt\/\">JDT<\/a><\/noindex>). \u00c9 esta popular IDE Java de c\u00f3digo aberto que a maioria dos desenvolvedores associa \u00e0 palavra \u201cEclipse\u201d. No entanto, o Eclipse tamb\u00e9m \u00e9 uma plataforma extens\u00edvel para integra\u00e7\u00e3o de ferramentas de desenvolvimento (Eclipse Platform) e uma s\u00e9rie de IDEs constru\u00eddas sobre sua base, incluindo o JDT. O Eclipse abrange o Eclipse Project, um projeto de alto n\u00edvel que coordena o desenvolvimento do Eclipse Platform e do JDT, e o Eclipse SDK \u2013 o resultado desta pesquisa. Finalmente, o Eclipse \u00e9 uma Funda\u00e7\u00e3o open-source com uma enorme comunidade de projetos, muitos dos quais n\u00e3o s\u00e3o escritos em Java ou n\u00e3o est\u00e3o relacionados a ferramentas de desenvolvimento (por exemplo, projetos <noindex><a rel=\"nofollow\" href=\"https:\/\/iot.eclipse.org\/\">Eclipse IoT<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/science.eclipse.org\/\">Eclipse Science<\/a><\/noindex>). O mundo do Eclipse \u00e9 muito diversificado.<\/p>\n<p>Neste artigo, que tem um car\u00e1ter de vis\u00e3o geral, tentaremos abordar algumas das bases da arquitetura do Eclipse como plataforma para a constru\u00e7\u00e3o de ferramentas de desenvolvimento integradas e dar uma vis\u00e3o inicial sobre os componentes do Eclipse que formam a base da plataforma tecnol\u00f3gica para o \u2018novo Configurador\u2019 1C: Enterprise, <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/release_IDE\/\">Ferramentas de Desenvolvimento 1C<\/a><\/noindex>. Claro, tal an\u00e1lise ser\u00e1 inevitavelmente superficial e bastante limitada, tamb\u00e9m porque estamos mirando n\u00e3o apenas os desenvolvedores do Eclipse como p\u00fablico-alvo. No entanto, esperamos que at\u00e9 mesmo desenvolvedores experientes do Eclipse possam encontrar informa\u00e7\u00f5es interessantes no artigo. Por exemplo, falaremos sobre um dos 'segredos do Eclipse', um projeto relativamente novo e pouco conhecido at\u00e9 agora, <noindex><a rel=\"nofollow\" href=\"http:\/\/eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex>, que foi fundado e mantido pela empresa 1C.<br \/>\n<img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para 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>Introdu\u00e7\u00e3o \u00e0 arquitetura do Eclipse<\/h2>\n<p>\nVamos come\u00e7ar por examinar alguns aspectos gerais da arquitetura do Eclipse usando como exemplo <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/jdt\/overview.php\">Eclipse Java development tools<\/a><\/noindex> (JDT). A escolha do JDT como exemplo n\u00e3o \u00e9 acidental. Esta foi a primeira plataforma de desenvolvimento integrada a surgir no Eclipse. Os outros projetos *DT do Eclipse, como o Eclipse C\/C++ Development Tooling (CDT), foram criados posteriormente e tomaram emprestados tanto os princ\u00edpios arquiteturais fundamentais quanto fragmentos espec\u00edficos do c\u00f3digo-fonte do JDT. As bases da arquitetura estabelecidas no JDT permanecem relevantes at\u00e9 hoje para praticamente qualquer IDE constru\u00edda sobre a Eclipse Platform, incluindo o 1C:Enterprise Development Tools.<\/p>\n<p>Em primeiro lugar, \u00e9 importante notar que o Eclipse apresenta uma arquitetura bem definida, com a separa\u00e7\u00e3o da funcionalidade independente de linguagem da funcionalidade destinada ao suporte de linguagens de programa\u00e7\u00e3o espec\u00edficas e a separa\u00e7\u00e3o dos componentes \"core\" independentes da UI dos componentes relacionados ao suporte da interface do usu\u00e1rio.<\/p>\n<p>Assim, a Eclipse Platform define uma infraestrutura geral e independente de linguagem, enquanto as ferramentas de desenvolvimento Java adicionam ao Eclipse uma IDE Java totalmente funcional. Tanto a Eclipse Platform quanto o JDT consistem em v\u00e1rios componentes, cada um dos quais pertence ao \"n\u00facleo\" independente de UI ou \u00e0 camada de UI (Fig. 1).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/230825124962e721ecca7dfb7dee9a0c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 1. Eclipse Platform e JDT<\/b><\/p>\n<p>Vamos listar os principais componentes da Eclipse Platform:<\/p>\n<ul>\n<li><b>Runtime<\/b> \u2014 Define a infraestrutura de plugins. O Eclipse \u00e9 caracterizado por uma arquitetura modular. Basicamente, o Eclipse \u00e9 uma cole\u00e7\u00e3o de \"pontos de extens\u00e3o\" e \"extens\u00f5es\".<\/li>\n<li><b>Workspace<\/b> \u2014 Gerencia um ou v\u00e1rios projetos. Um projeto consiste em pastas e arquivos que s\u00e3o mapeados diretamente para o sistema de arquivos.<\/li>\n<li><b>Standard Widget Toolkit (SWT)<\/b> \u2014 Fornece os elementos b\u00e1sicos da interface do usu\u00e1rio, integrados ao sistema operacional.<\/li>\n<li><b>JFace<\/b> \u2014 Fornece uma s\u00e9rie de frameworks UI constru\u00eddos sobre o SWT.<\/li>\n<li><b>Workbench<\/b> \u2014 Define a paradigma de UI do Eclipse: editores, vis\u00f5es, perspectivas.<\/li>\n<\/ul>\n<p>\n\u00c9 necess\u00e1rio mencionar que a Eclipse Platform tamb\u00e9m fornece muitos outros componentes \u00fateis para a constru\u00e7\u00e3o de ferramentas de desenvolvimento integradas, entre os quais se destacam Debug, Compare, Search e Team. Vale a pena mencionar o JFace Text - a base para a constru\u00e7\u00e3o de \"editores inteligentes\" de c\u00f3digo fonte. Infelizmente, mesmo uma vis\u00e3o r\u00e1pida desses componentes, assim como dos componentes da camada de UI, n\u00e3o \u00e9 poss\u00edvel dentro do escopo deste artigo, portanto, na parte restante desta se\u00e7\u00e3o, limitaremos nossa discuss\u00e3o aos principais componentes \"core\" da Eclipse Platform e do JDT.<\/p>\n<h4>Core Runtime<\/h4>\n<p>\nA infraestrutura de plugins do Eclipse \u00e9 baseada em <noindex><a rel=\"nofollow\" href=\"https:\/\/www.osgi.org\/developer\/specifications\/\">OSGi<\/a><\/noindex> e \u00e9 fornecida pelo projeto <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/equinox\/\">Eclipse Equinox<\/a><\/noindex>. Cada plugin do Eclipse \u00e9 um bundle OSGi. A especifica\u00e7\u00e3o OSGi define, entre outras coisas, mecanismos de versionamento e resolu\u00e7\u00e3o de depend\u00eancias. Al\u00e9m desses mecanismos padr\u00e3o, o Equinox introduz o conceito de <i>ponto de extens\u00e3o<\/i>. Cada plugin pode definir seus pr\u00f3prios pontos de extens\u00e3o, al\u00e9m de trazer funcionalidade adicional ao sistema (\"extens\u00f5es\"), utilizando pontos de extens\u00e3o definidos por esse ou outros plugins. Uma descri\u00e7\u00e3o mais detalhada dos mecanismos OSGi e Equinox vai al\u00e9m do escopo deste artigo. Vale ressaltar que a modulariza\u00e7\u00e3o no Eclipse \u00e9 total (qualquer subsistema, incluindo o Runtime, consiste em um ou mais plugins), e praticamente tudo no Eclipse \u00e9 uma extens\u00e3o. Al\u00e9m disso, esses princ\u00edpios foram incorporados \u00e0 arquitetura do Eclipse muito antes da implementa\u00e7\u00e3o do OSGi (naquela \u00e9poca, uma tecnologia pr\u00f3pria, em grande parte an\u00e1loga ao OSGi, era utilizada).<\/p>\n<h4>Espa\u00e7o de Trabalho Principal<\/h4>\n<p>\nPraticamente qualquer ambiente de desenvolvimento integrado baseado na Eclipse Platform opera com o espa\u00e7o de trabalho do Eclipse. \u00c9 neste espa\u00e7o de trabalho que o c\u00f3digo-fonte do aplicativo desenvolvido na IDE geralmente reside. O espa\u00e7o de trabalho se reflete diretamente no sistema de arquivos e consiste em projetos, que cont\u00eam pastas e arquivos. Esses projetos, pastas e arquivos s\u00e3o chamados de <i>recursos<\/i> O espa\u00e7o de trabalho. A implementa\u00e7\u00e3o do espa\u00e7o de trabalho no Eclipse funciona como um cache em rela\u00e7\u00e3o ao sistema de arquivos, o que permite acelerar significativamente a travessia da \u00e1rvore de recursos. Al\u00e9m disso, o espa\u00e7o de trabalho fornece uma s\u00e9rie de servi\u00e7os adicionais, incluindo <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Resource-deltas\/resource-deltas.html\">um mecanismo de notifica\u00e7\u00e3o de altera\u00e7\u00e3o de recursos<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Builders\/builders.html\">a infraestrutura de compiladores incrementais<\/a><\/noindex>.<\/p>\n<p>A manuten\u00e7\u00e3o do espa\u00e7o de trabalho e seus recursos \u00e9 responsabilidade do componente Core Resources (plugin org.eclipse.core.resources). Em particular, esse componente fornece acesso program\u00e1tico ao espa\u00e7o de trabalho na forma de <i>um modelo de recursos<\/i>. Para um trabalho eficiente com esse modelo, os clientes precisam de uma maneira simples de representar uma refer\u00eancia a um recurso. Ao mesmo tempo, seria desej\u00e1vel esconder o objeto que armazena diretamente o estado do recurso no modelo do acesso do cliente. Caso contr\u00e1rio, em caso de, por exemplo, exclus\u00e3o de um arquivo, o cliente poderia continuar segurando um objeto que j\u00e1 n\u00e3o existe no modelo, causando problemas subsequentes. O Eclipse resolve essa quest\u00e3o usando o chamado <i>handle<\/i> do recurso. O handle atua como uma chave (ele conhece apenas o caminho para o recurso no espa\u00e7o de trabalho) e controla completamente o acesso ao objeto interno do modelo que armazena diretamente as informa\u00e7\u00f5es sobre o estado do recurso. Esse design \u00e9 uma varia\u00e7\u00e3o do padr\u00e3o <noindex><a rel=\"nofollow\" href=\"http:\/\/wiki.c2.com\/?HandleBodyPattern\">Handle\/Body<\/a><\/noindex>.<\/p>\n<p>A Figura 2 ilustra a express\u00e3o Handle\/Body em rela\u00e7\u00e3o ao modelo de recursos. A interface IResource representa o handle do recurso e \u00e9 uma API, ao contr\u00e1rio da classe Resource, que implementa essa interface, e da classe ResourceInfo, que representa o body e n\u00e3o \u00e9 uma API. \u00c9 importante ressaltar que o handle apenas conhece o caminho para o recurso em rela\u00e7\u00e3o \u00e0 raiz do workspace e n\u00e3o cont\u00e9m refer\u00eancia \u00e0 resource info. Os objetos de resource info formam a chamada \"\u00e1rvore de elementos\" (element tree). Essa estrutura de dados \u00e9 completamente materializada na mem\u00f3ria. Para encontrar uma inst\u00e2ncia de resource info correspondente a um determinado handle, a \u00e1rvore de elementos \u00e9 percorrida de acordo com o caminho armazenado nesse handle.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/9d17cd95be3730ab6b5b9e6e3ed71ace.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figura 2. IResource e ResourceInfo<\/b><\/p>\n<p>Como veremos a seguir, o design b\u00e1sico do modelo de recursos (que pode ser chamado de baseado em handle) \u00e9 utilizado no Eclipse e em outros modelos. Por enquanto, vamos listar algumas propriedades distintas desse design:<\/p>\n<ul>\n<li>O handle \u00e9 um objeto-valor (value object). Objetos-valor s\u00e3o objetos imut\u00e1veis (immutable), cuja igualdade n\u00e3o se baseia na identidade. Esses objetos podem ser usados com seguran\u00e7a como chave em cont\u00eaineres hash. V\u00e1rios inst\u00e2ncias de handle podem referenciar o mesmo recurso. Para compar\u00e1-los, deve-se usar o m\u00e9todo equals(Object).<\/li>\n<li>O handle define o comportamento do recurso, mas n\u00e3o cont\u00e9m informa\u00e7\u00f5es sobre o estado do recurso (os \u00fanicos dados que ele armazena s\u00e3o a \"chave\", o caminho para o recurso).<\/li>\n<li>O handle pode referenciar um recurso inexistente (ou seja, um recurso que ainda n\u00e3o foi criado ou um recurso que j\u00e1 foi deletado). A exist\u00eancia do recurso pode ser verificada usando o m\u00e9todo IResource.exists().<\/li>\n<li>Algumas opera\u00e7\u00f5es podem ser implementadas com base exclusivamente nas informa\u00e7\u00f5es armazenadas no pr\u00f3prio handle (as chamadas opera\u00e7\u00f5es somente de handle). Exemplos incluem IResource.getParent(), getFullPath(), etc. O recurso n\u00e3o precisa existir para que essa opera\u00e7\u00e3o seja realizada com sucesso. Opera\u00e7\u00f5es que exigem que o recurso exista para serem executadas com sucesso lan\u00e7am uma exce\u00e7\u00e3o (CoreException) se o recurso n\u00e3o existir.<\/li>\n<\/ul>\n<p>\nEclipse oferece um mecanismo eficiente de notifica\u00e7\u00e3o sobre altera\u00e7\u00f5es nos recursos do workspace (fig. 3). Os recursos podem ser alterados tanto devido a a\u00e7\u00f5es realizadas na pr\u00f3pria IDE Eclipse quanto em decorr\u00eancia da sincroniza\u00e7\u00e3o com o sistema de arquivos. Em ambos os casos, os clientes que se inscreveram para as notifica\u00e7\u00f5es recebem informa\u00e7\u00f5es detalhadas sobre as altera\u00e7\u00f5es na forma de \"deltas de recurso\" (resource delta). Um delta descreve as mudan\u00e7as entre dois estados de uma (sub)\u00e1rvore de recursos do workspace e \u00e9, ele mesmo, uma \u00e1rvore, onde cada n\u00f3 descreve a altera\u00e7\u00e3o de um recurso e cont\u00e9m uma lista de deltas de n\u00edvel inferior que descrevem as altera\u00e7\u00f5es dos recursos filhos.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/8af412412ee97d205137ab70c8444a50.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 3. IResourceChangeEvent e IResourceDelta<\/b><\/p>\n<p>O mecanismo de notifica\u00e7\u00e3o baseado em deltas de recurso possui as seguintes caracter\u00edsticas:<\/p>\n<ul>\n<li>Uma \u00fanica altera\u00e7\u00e3o e m\u00faltiplas altera\u00e7\u00f5es s\u00e3o descritas com a mesma estrutura, uma vez que o delta \u00e9 constru\u00eddo com base na composi\u00e7\u00e3o recursiva. Os clientes assinantes podem processar notifica\u00e7\u00f5es de altera\u00e7\u00e3o de recursos atrav\u00e9s de uma descida recursiva pela \u00e1rvore de deltas.<\/li>\n<li>O delta cont\u00e9m informa\u00e7\u00f5es completas sobre a altera\u00e7\u00e3o do recurso, incluindo seu deslocamento e\/ou altera\u00e7\u00e3o dos \"marcadores\" associados (por exemplo, erros de compila\u00e7\u00e3o se apresentam na forma de marcadores).<\/li>\n<li>Como as refer\u00eancias ao recurso s\u00e3o feitas atrav\u00e9s de um handle, o delta pode naturalmente referenciar um recurso remoto.<\/li>\n<\/ul>\n<p>\nComo veremos em breve, os principais componentes do design do mecanismo de notifica\u00e7\u00e3o de altera\u00e7\u00e3o do modelo de recursos s\u00e3o relevantes tamb\u00e9m para outros modelos baseados em handle.<\/p>\n<h4>JDT Core<\/h4>\n<p>\nO modelo de recursos do Eclipse workspace \u00e9 um modelo fundamental independente de linguagem. O componente JDT Core (plugin org.eclipse.jdt.core) fornece uma API para navega\u00e7\u00e3o e an\u00e1lise da estrutura do workspace do ponto de vista do Java, a chamada \"modelo Java\" (<i>modelo Java<\/i>). Esta API \u00e9 definida em termos de elementos Java, ao contr\u00e1rio da API subjacente do modelo de recursos, que \u00e9 definida em termos de pastas e arquivos. As principais interfaces da \u00e1rvore de elementos Java est\u00e3o ilustradas na fig. 4.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/67bfd31e93eaa66aa94b30281693a318.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 4. Elementos do modelo Java<\/b><\/p>\n<p>O modelo Java utiliza a mesma idiom\u00e1tica handle\/body que o modelo de recursos (fig. 5). IJavaElement \u00e9 o handle, enquanto JavaElementInfo desempenha o papel de body. A interface IJavaElement define o protocolo comum a todos os elementos Java. Alguns de seus m\u00e9todos s\u00e3o apenas handle: getElementName(), getParent(), etc. O objeto JavaElementInfo armazena o estado do respectivo elemento: sua estrutura e atributos.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/5b473cccfc8f258d563033ce334cb94f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 5. IJavaElement e JavaElementInfo<\/b><\/p>\n<p>O modelo Java apresenta algumas diferen\u00e7as na implementa\u00e7\u00e3o do design b\u00e1sico handle\/body em compara\u00e7\u00e3o com o modelo de recursos. Como mencionado anteriormente, no modelo de recursos, a \u00e1rvore de elementos, cujos n\u00f3s s\u00e3o objetos de informa\u00e7\u00f5es de recursos, \u00e9 totalmente mantida na mem\u00f3ria. Mas no modelo Java, pode haver um n\u00famero significativamente maior de elementos do que na \u00e1rvore de recursos, uma vez que ele tamb\u00e9m representa a estrutura interna dos arquivos .java e .class: tipos, campos e m\u00e9todos.<\/p>\n<p>Para evitar a materializa\u00e7\u00e3o completa de toda a \u00e1rvore de elementos na mem\u00f3ria, a implementa\u00e7\u00e3o do modelo Java utiliza um cache de informa\u00e7\u00f5es de elementos LRU de tamanho limitado, onde a chave \u00e9 o handle IJavaElement. Objetos de informa\u00e7\u00f5es de elementos s\u00e3o criados sob demanda conforme a navega\u00e7\u00e3o pela \u00e1rvore de elementos ocorre. Os elementos menos frequentemente usados s\u00e3o expulsos do cache, e o consumo de mem\u00f3ria pelo modelo permanece limitado ao tamanho definido do cache. Esta \u00e9 mais uma vantagem do design baseado em handle, que oculta totalmente esses detalhes de implementa\u00e7\u00e3o do c\u00f3digo do cliente.<\/p>\n<p>O mecanismo de notifica\u00e7\u00e3o de altera\u00e7\u00f5es nos elementos Java \u00e9, em linhas gerais, an\u00e1logo ao mecanismo de rastreamento de altera\u00e7\u00f5es de recursos do workspace mencionado acima. Um cliente que deseja monitorar altera\u00e7\u00f5es no modelo Java inscreve-se nas notifica\u00e7\u00f5es, que s\u00e3o apresentadas como um objeto ElementChangedEvent, contendo IJavaElementDelta (fig. 6).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/0402ec362078eaf50f47756e7f24de01.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 6. ElementChangedEvent e IJavaElementDelta<\/b><\/p>\n<p>O modelo Java n\u00e3o cont\u00e9m informa\u00e7\u00f5es sobre o corpo dos m\u00e9todos ou sobre a resolu\u00e7\u00e3o de nomes, portanto, para uma an\u00e1lise detalhada do c\u00f3digo escrito em Java, o JDT Core fornece um modelo adicional (n\u00e3o baseado em handle): <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/articles\/Article-JavaCodeManipulation_AST\/index.html\">\u00e1rvore sint\u00e1tica abstrata<\/a><\/noindex> (\u00e1rvore de sintaxe abstrata, AST). AST representa o resultado da an\u00e1lise sint\u00e1tica do texto-fonte. Os n\u00f3s da AST correspondem aos elementos da estrutura do m\u00f3dulo-fonte (declara\u00e7\u00f5es, operadores, express\u00f5es, etc.) e cont\u00eam informa\u00e7\u00f5es sobre as coordenadas do respectivo elemento no texto-fonte, al\u00e9m de (opcionalmente) informa\u00e7\u00f5es sobre a resolu\u00e7\u00e3o de nomes na forma de refer\u00eancias aos chamados <i>binds<\/i>. Os binds s\u00e3o objetos que representam entidades nomeadas, como tipos, m\u00e9todos e vari\u00e1veis conhecidos pelo compilador. Ao contr\u00e1rio dos n\u00f3s da AST, que formam uma \u00e1rvore, os binds suportam refer\u00eancias cruzadas e, em geral, formam um grafo. A classe abstrata ASTNode \u00e9 a classe base comum para todos os n\u00f3s da AST. Os subclasses de ASTNode correspondem a constru\u00e7\u00f5es sint\u00e1ticas espec\u00edficas da linguagem Java.<\/p>\n<p>Como as \u00e1rvores sint\u00e1ticas podem consumir uma quantidade significativa de mem\u00f3ria, o JDT armazena em cache apenas um AST para o editor ativo. Ao contr\u00e1rio do modelo Java, a AST geralmente \u00e9 vista como um modelo \"intermedi\u00e1rio\", \"tempor\u00e1rio\", cujos elementos n\u00e3o devem ser referenciados fora do contexto da opera\u00e7\u00e3o que levou \u00e0 cria\u00e7\u00e3o da AST.<\/p>\n<p>Os tr\u00eas modelos listados (modelo Java, AST, binds) juntos formam a base para a constru\u00e7\u00e3o de \"ferramentas de desenvolvimento inteligentes\" no JDT, incluindo um poderoso editor Java com diversos \"assistentes\", v\u00e1rias a\u00e7\u00f5es para processamento de c\u00f3digo-fonte (incluindo organiza\u00e7\u00e3o da lista de importa\u00e7\u00e3o de nomes e formata\u00e7\u00e3o de acordo com o estilo configurado), ferramentas de busca e refatora\u00e7\u00e3o. O modelo Java desempenha um papel especial, pois \u00e9 utilizado como base para a representa\u00e7\u00e3o visual da estrutura do aplicativo em desenvolvimento (por exemplo, no Package Explorer, Outline, Search, Call Hierarchy e Type Hierarchy).<\/p>\n<h2>Componentes do Eclipse utilizados em Ferramentas de Desenvolvimento 1C:Enterprise<\/h2>\n<p>\nNa Fig. 7, os componentes do Eclipse que formam a funda\u00e7\u00e3o da plataforma tecnol\u00f3gica para Ferramentas de Desenvolvimento 1C:Enterprise s\u00e3o mostrados.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/248cceea47ee507b9ad22d6964738ee7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 7. Eclipse como plataforma para Ferramentas de Desenvolvimento 1C:Enterprise<\/b><\/p>\n<p><b>Plataforma Eclipse<\/b> fornece a infraestrutura b\u00e1sica. Discutimos alguns aspectos dessa infraestrutura na se\u00e7\u00e3o anterior.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/modeling\/emf\/\">Eclipse Modeling Framework<\/a><\/noindex><\/b> (<b>EMF<\/b>) fornece ferramentas gerais para modelagem de dados estruturados. O EMF est\u00e1 integrado \u00e0 plataforma Eclipse, mas pode ser usado separadamente em aplica\u00e7\u00f5es Java comuns. Muitas vezes, desenvolvedores iniciantes do Eclipse j\u00e1 est\u00e3o bem familiarizados com o EMF, embora ainda n\u00e3o compreendam completamente as sutilezas da plataforma Eclipse. Uma das raz\u00f5es para essa merecida popularidade \u00e9 o design universal, que inclui, entre outras coisas, uma API unificada de n\u00edvel meta, permitindo trabalhar de forma generalizada com qualquer modelo EMF. As implementa\u00e7\u00f5es b\u00e1sicas do EMF para objetos de modelo e o subsistema de gera\u00e7\u00e3o de c\u00f3digo de modelo a partir da meta-modelagem aumentam significativamente a velocidade de desenvolvimento e reduzem a quantidade de erros. O EMF tamb\u00e9m cont\u00e9m mecanismos de serializa\u00e7\u00e3o de modelos, monitoramento de altera\u00e7\u00f5es no modelo, entre muitas outras funcionalidades. <\/p>\n<p>Como qualquer ferramenta realmente universal, o EMF \u00e9 adequado para resolver uma ampla gama de tarefas relacionadas \u00e0 modelagem, mas algumas classes de modelos (por exemplo, os modelos baseados em handle discutidos acima) podem precisar de ferramentas de modelagem mais especializadas. Falar sobre o EMF \u00e9 uma tarefa ingrata, especialmente nos limites de um \u00fanico artigo, pois este \u00e9 um tema para um livro inteiramente separado e bastante extenso. Devemos apenas mencionar que um sistema de generaliza\u00e7\u00f5es de alta qualidade, que serve de base para o EMF, possibilitou o surgimento de uma ampla gama de projetos dedicados \u00e0 modelagem, que fazem parte do projeto de alto n\u00edvel. <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/modeling\/\">Modelagem do Eclipse<\/a><\/noindex> juntamente com o pr\u00f3prio EMF. Um desses projetos \u00e9 o Eclipse Xtext.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/Xtext\/\">Eclipse Xtext<\/a><\/noindex><\/b> fornece infraestrutura de \"modelagem textual\". O Xtext utiliza <noindex><a rel=\"nofollow\" href=\"http:\/\/www.antlr.org\/\">ANTLR<\/a><\/noindex> para a an\u00e1lise sint\u00e1tica do texto fonte e EMF para representar o ASG resultante (grafo sem\u00e2ntico abstrato, que, essencialmente, \u00e9 uma combina\u00e7\u00e3o de AST e bindings), tamb\u00e9m chamado de \"modelo sem\u00e2ntico\". A gram\u00e1tica da linguagem modelada com Xtext \u00e9 descrita em sua pr\u00f3pria linguagem Xtext. Isso permite n\u00e3o apenas gerar uma descri\u00e7\u00e3o da gram\u00e1tica para ANTLR, mas tamb\u00e9m obter um mecanismo de serializa\u00e7\u00e3o do AST (ou seja, o Xtext fornece tanto o parser quanto o unparser), sugest\u00f5es contextuais e uma s\u00e9rie de outros componentes lingu\u00edsticos. Por outro lado, a linguagem de descri\u00e7\u00e3o da gram\u00e1tica usada no Xtext \u00e9 menos flex\u00edvel em compara\u00e7\u00e3o, digamos, com a linguagem de descri\u00e7\u00e3o da gram\u00e1tica no ANTLR. Portanto, \u00e0s vezes \u00e9 necess\u00e1rio \"adaptar\" a linguagem implementada para o Xtext, o que geralmente n\u00e3o \u00e9 um problema se se trata de uma linguagem desenvolvida do zero, mas pode ser inaceit\u00e1vel para linguagens com uma sintaxe j\u00e1 estabelecida. Apesar disso, o Xtext \u00e9 atualmente a ferramenta mais madura, funcionalmente completa e vers\u00e1til no Eclipse para construir linguagens de programa\u00e7\u00e3o e ferramentas de desenvolvimento para elas. Em particular, \u00e9 a ferramenta ideal para prototipagem r\u00e1pida. <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\">linguagens orientadas a dom\u00ednios<\/a><\/noindex> (linguagem espec\u00edfica de dom\u00ednio, DSL). Al\u00e9m do \"n\u00facleo lingu\u00edstico\" mencionado acima, baseado em ANTLR e EMF, o Xtext fornece muitos componentes \u00fateis de n\u00edvel mais alto, incluindo mecanismos de indexa\u00e7\u00e3o, constru\u00e7\u00e3o incremental, \"editor inteligente\" e muito, muito mais, mas deixa de lado modelos baseados em handle. Assim como o EMF, o Xtext \u00e9 um tema que mereceria um livro \u00e0 parte, e \u00e9 improv\u00e1vel que consigamos sequer abordar rapidamente todas as suas capacidades agora.<\/p>\n<p>1\u0421:Enterprise Development Tools utiliza ativamente tanto o EMF em si, quanto uma s\u00e9rie de outros projetos da Eclipse Modeling. Em particular, o Xtext \u00e9 uma das bases das ferramentas de desenvolvimento para linguagens como 1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435, como a linguagem de programa\u00e7\u00e3o embutida e a linguagem de consultas. Outra base dessas ferramentas de desenvolvimento \u00e9 o projeto Eclipse Handly, sobre o qual falaremos com mais detalhes (dos componentes listados do Eclipse, este \u00e9 o menos conhecido at\u00e9 agora).<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex><\/b>, um subprojeto do projeto de alto n\u00edvel Eclipse Technology, surgiu a partir da contribui\u00e7\u00e3o inicial de c\u00f3digo para a Eclipse Foundation, feita pela empresa 1C em 2014. Desde ent\u00e3o, a empresa 1C continua a apoiar o desenvolvimento do projeto: os committers do Handly s\u00e3o funcion\u00e1rios da empresa. O projeto \u00e9 pequeno, mas ocupa uma nicho bastante \u00fanico no Eclipse: seu principal objetivo \u00e9 apoiar o desenvolvimento de modelos baseados em handle.<\/p>\n<p>Os principais princ\u00edpios arquitet\u00f4nicos dos modelos baseados em handle, como a idiom\u00e1tica handle\/body, foram discutidos anteriormente usando o exemplo do modelo de recursos e do modelo Java. Tamb\u00e9m foi observado que tanto o modelo de recursos quanto o modelo Java s\u00e3o bases importantes para as ferramentas de desenvolvimento Java do Eclipse (JDT). E como praticamente todos os projetos *DT do Eclipse t\u00eam uma arquitetura semelhante \u00e0 do JDT, n\u00e3o seria uma grande exagera\u00e7\u00e3o afirmar que os modelos baseados em handle est\u00e3o na base de muitos, se n\u00e3o todos, os IDEs constru\u00eddos sobre a Eclipse Platform. Por exemplo, no Eclipse C\/C++ Development Tooling (CDT), h\u00e1 um modelo baseado em handle para C\/C++, que desempenha na arquitetura do CDT o mesmo papel que o modelo Java no JDT.<\/p>\n<p>Antes da chegada do Handly, o Eclipse n\u00e3o oferecia bibliotecas especializadas para a constru\u00e7\u00e3o de modelos de linguagem baseados em handle. Os modelos existentes agora foram criados principalmente por meio da adapta\u00e7\u00e3o direta do c\u00f3digo do modelo Java (ou seja, copiar\/colar), <i>nos casos em que isso \u00e9 permitido<\/i> pela Eclipse Public License (EPL). (\u00c9 claro que, por exemplo, para os projetos da pr\u00f3pria Eclipse isso normalmente n\u00e3o representa um problema do ponto de vista jur\u00eddico, o que n\u00e3o pode ser dito sobre produtos de c\u00f3digo fechado.) Al\u00e9m da falta de sistematicidade, essa abordagem leva a problemas bem conhecidos: duplica\u00e7\u00e3o de c\u00f3digo, erros introduzidos durante a adapta\u00e7\u00e3o, etc. O que \u00e9 ainda pior, os modelos resultantes permanecem como 'coisas em si' e n\u00e3o utilizam o potencial existente para unifica\u00e7\u00e3o. E a identifica\u00e7\u00e3o de conceitos e protocolos comuns para modelos de linguagem baseados em handle poderia levar \u00e0 cria\u00e7\u00e3o de componentes reutiliz\u00e1veis para trabalhar com eles, assim como ocorreu no caso do EMF.<\/p>\n<p>N\u00e3o se pode dizer que no Eclipse n\u00e3o houvesse uma compreens\u00e3o desses problemas. J\u00e1 em 2005 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.xing.com\/profile\/Martin_Aeschlimann\">Martin Aeschlimann<\/a><\/noindex>, resumindo a experi\u00eancia de desenvolvimento do prot\u00f3tipo do CDT, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/org\/langsymp\/position_paper_martin_aeschlimann.html\">argumentou<\/a><\/noindex> a necessidade de criar uma infraestrutura comum para modelos de linguagem, incluindo modelos baseados em identificadores. Mas, como muitas vezes acontece, devido a tarefas mais priorit\u00e1rias, essas ideias n\u00e3o foram implementadas na \u00e9poca. Entretanto, a fatora\u00e7\u00e3o de c\u00f3digo *DT-projetos ainda permanece um dos temas pouco explorados no Eclipse.<\/p>\n<p>De certa forma, o projeto Handly se prop\u00f5e a resolver tarefas semelhantes \u00e0s do EMF, mas para modelos baseados em identificadores, e, em primeiro lugar, modelos lingu\u00edsticos (ou seja, representando elementos da estrutura de alguma linguagem de programa\u00e7\u00e3o). Abaixo est\u00e3o listados os principais objetivos que foram estabelecidos durante o projeto do Handly:<\/p>\n<ul>\n<li>Identificar as principais abstra\u00e7\u00f5es da \u00e1rea de dom\u00ednio.<\/li>\n<li>Reduzir esfor\u00e7os e aumentar a qualidade da implementa\u00e7\u00e3o de modelos lingu\u00edsticos baseados em identificadores atrav\u00e9s da reutiliza\u00e7\u00e3o de c\u00f3digo.<\/li>\n<li>Fornecer uma API unificada em n\u00edvel meta para os modelos resultantes, permitindo a cria\u00e7\u00e3o de componentes IDE comuns que trabalham com modelos lingu\u00edsticos baseados em identificadores.<\/li>\n<li>Flexibilidade e escalabilidade.<\/li>\n<li>Integra\u00e7\u00e3o com o Xtext (em uma camada separada).<\/li>\n<\/ul>\n<p>\nPara identificar conceitos e protocolos comuns, foram analisadas implementa\u00e7\u00f5es existentes de modelos lingu\u00edsticos baseados em identificadores. As principais interfaces e implementa\u00e7\u00f5es b\u00e1sicas fornecidas pelo Handly s\u00e3o mostradas na Fig. 8.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/47f4bf74093245334b8d67b149734dfc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 8. Interfaces comuns e implementa\u00e7\u00f5es b\u00e1sicas dos elementos Handly<\/b><\/p>\n<p>A interface IElement representa o identificador de um elemento e \u00e9 comum a elementos de todos os modelos baseados no Handly. A classe abstrata Element implementa um mecanismo gen\u00e9rico de identificador\/corpo (Fig. 9).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/0651c1f284b7edfa36313d4b51d72f08.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 9. IElement e implementa\u00e7\u00e3o gen\u00e9rica de identificador\/corpo<\/b><\/p>\n<p>Al\u00e9m disso, o Handly fornece um mecanismo gen\u00e9rico de notifica\u00e7\u00e3o sobre altera\u00e7\u00f5es de elementos do modelo (Fig. 10). Como pode ser visto, em linhas gerais, \u00e9 an\u00e1logo aos mecanismos de notifica\u00e7\u00e3o implementados no modelo de recursos e no modelo Java, e utiliza IElementDelta para uma representa\u00e7\u00e3o unificada das informa\u00e7\u00f5es sobre a altera\u00e7\u00e3o de um elemento.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/cbdec8cf874308e0fa9dd96d04f62703.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 10. Interfaces comuns e implementa\u00e7\u00f5es b\u00e1sicas do mecanismo de notifica\u00e7\u00e3o do Handly<\/b><\/p>\n<p>A parte do Handly discutida acima (Fig. 9 e 10) pode ser usada para representar praticamente qualquer modelo baseado em identificadores. Para a cria\u00e7\u00e3o <i>modelos lingu\u00edsticos<\/i> o projeto oferece funcionalidade adicional \u2013 em particular, interfaces comuns e implementa\u00e7\u00f5es b\u00e1sicas para elementos da estrutura do texto fonte, os chamados <i>source elements<\/i> (fig. 8). A Interface ISourceFile representa o arquivo de origem, enquanto ISourceConstruct \u00e9 um elemento dentro do arquivo de origem. As classes abstratas SourceFile e SourceConstruct implementam mecanismos gen\u00e9ricos para suportar o trabalho com arquivos de origem e seus elementos, como a manipula\u00e7\u00e3o de buffers de texto, liga\u00e7\u00e3o \u00e0s coordenadas do elemento no texto original, reconciliando o modelo com o conte\u00fado atual do buffer de c\u00f3pia de trabalho, etc. A implementa\u00e7\u00e3o desses mecanismos \u00e9 geralmente uma tarefa bastante complexa, e o Handly pode reduzir significativamente os esfor\u00e7os de desenvolvimento de modelos baseados em handle, fornecendo implementa\u00e7\u00f5es b\u00e1sicas de qualidade.<\/p>\n<p>Al\u00e9m dos mecanismos principais mencionados acima, o Handly oferece uma infraestrutura de buffers de texto e \"snapshots\", suporte \u00e0 integra\u00e7\u00e3o com editores de c\u00f3digo-fonte (incluindo integra\u00e7\u00e3o pronta para uso com o editor Xtext), al\u00e9m de alguns componentes de UI gerais que funcionam com modelos baseados no Handly, como o framework de outline. Para ilustrar suas capacidades, o projeto fornece v\u00e1rios exemplos, incluindo a implementa\u00e7\u00e3o de um modelo Java no Handly. (Em compara\u00e7\u00e3o com a implementa\u00e7\u00e3o completa do modelo Java no JDT, este modelo \u00e9 intencionalmente simplificado para maior clareza.)<\/p>\n<p>Como mencionado anteriormente, aten\u00e7\u00e3o consider\u00e1vel foi dada ao escalonamento e flexibilidade durante o design inicial do Handly e continua a ser uma prioridade no seu desenvolvimento. <\/p>\n<p>Em princ\u00edpio, modelos baseados em handle escalam bem \"por design\". Por exemplo, a idiom handle\/body permite limitar a quantidade de mem\u00f3ria consumida pelo modelo. No entanto, existem nuances. Durante os testes de escalabilidade do Handly, foi identificada uma quest\u00e3o na implementa\u00e7\u00e3o do mecanismo de notifica\u00e7\u00e3o \u2013 ao alterar um grande n\u00famero de elementos, a constru\u00e7\u00e3o de deltas tomou muito tempo. Descobriu-se que o mesmo problema tamb\u00e9m estava presente no modelo Java do JDT, do qual o c\u00f3digo correspondente foi anteriormente adaptado. Corrigimos o erro no Handly e prepar\u00e1mos um patch semelhante para o JDT, que foi aceito com agradecimento. Este \u00e9 apenas um dos exemplos em que a implementa\u00e7\u00e3o do Handly em implementa\u00e7\u00f5es existentes de modelos poderia ser potencialmente \u00fatil, pois, nesse caso, tal erro poderia ser corrigido em um \u00fanico lugar.<\/p>\n<p>Para tornar a implementa\u00e7\u00e3o do Handly em modelos existentes tecnicamente vi\u00e1vel, a biblioteca precisa ter uma flexibilidade significativa. O principal desafio \u00e9 manter a compatibilidade retroativa da API do modelo. Essa tarefa foi resolvida em <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/NewIn05\">Handly 0.5<\/a><\/noindex> por meio da clara separa\u00e7\u00e3o da API espec\u00edfica do modelo, definida e totalmente controlada pelo desenvolvedor, da API unificada de meta-n\u00edvel fornecida pela biblioteca. Isso n\u00e3o apenas torna tecnicamente poss\u00edvel a implementa\u00e7\u00e3o do Handly em implementa\u00e7\u00f5es existentes, mas tamb\u00e9m oferece ao desenvolvedor do novo modelo uma liberdade significativa ao projetar a API.<\/p>\n<p>A flexibilidade tem outros aspectos. Por exemplo, o Handly praticamente n\u00e3o imp\u00f5e restri\u00e7\u00f5es \u00e0 estrutura do modelo e pode ser utilizado tanto para modelar linguagens de prop\u00f3sito geral quanto linguagens orientadas a dom\u00ednio. Ao construir a estrutura do arquivo de origem, o Handly n\u00e3o imp\u00f5e uma forma espec\u00edfica de representa\u00e7\u00e3o da AST e, de fato, n\u00e3o requer a presen\u00e7a da AST, garantindo assim compatibilidade com praticamente qualquer mecanismo de an\u00e1lise sint\u00e1tica. Por fim, o Handly suporta integra\u00e7\u00e3o completa com o eclipse workspace, mas tamb\u00e9m pode operar diretamente com sistemas de arquivos, devido \u00e0 sua integra\u00e7\u00e3o com <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/EFS\">Eclipse File System<\/a><\/noindex> (EFS).<\/p>\n<p>A vers\u00e3o atual <noindex><a rel=\"nofollow\" href=\"https:\/\/projects.eclipse.org\/projects\/technology.handly\/releases\/0.6\">Handly 0.6<\/a><\/noindex> foi lan\u00e7ada em dezembro de 2016. Embora o projeto esteja atualmente em estado de incuba\u00e7\u00e3o e a API ainda n\u00e3o esteja oficialmente finalizada, o Handly j\u00e1 est\u00e1 sendo utilizado em dois grandes produtos comerciais que se aventuraram a ser 'early adopters', e, devo dizer, at\u00e9 agora n\u00e3o se arrependem disso.<\/p>\n<p>Como mencionado anteriormente, um desses produtos \u00e9 o 1C:Enterprise Development Tools, onde o Handly \u00e9 utilizado desde o in\u00edcio para modelar elementos de uma estrutura de alto n\u00edvel de linguagens como o 1C:Enterprise, incluindo a linguagem de programa\u00e7\u00e3o embutida e a linguagem de consulta. O outro produto \u00e9 menos conhecido pelo grande p\u00fablico. \u00c9 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.codasip.com\/custom-processor\/\">Codasip Studio<\/a><\/noindex>, um ambiente integrado de design para processadores orientados a problemas (application-specific instruction-set processor, ASIP), utilizado tanto dentro da pr\u00f3pria empresa checa Codasip quanto por seus clientes, entre eles <noindex>AMD<\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.avg.com\/\">AVG<\/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>. A Codasip utiliza o Handly em produ\u00e7\u00e3o desde 2015, come\u00e7ando com a vers\u00e3o Handly 0.2. A \u00faltima vers\u00e3o do Codasip Studio utiliza a vers\u00e3o 0.5, lan\u00e7ada em junho de 2016. Ond\u0159ej Il\u010d\u00edk, que lidera o desenvolvimento do IDE na Codasip, mant\u00e9m contato com o projeto, fornecendo feedback extremamente importante do ponto de vista de um 'adotante externo'. Ele at\u00e9 conseguiu encontrar um pouco de tempo livre para participar diretamente do desenvolvimento do projeto, implementando uma camada de UI (~ 4000 linhas de c\u00f3digo) para um dos exemplos do Handly, modelo Java. Mais informa\u00e7\u00f5es 'de primeira m\u00e3o' sobre o uso do Handly por adotantes podem ser encontradas na p\u00e1gina <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/Adopters\">Hist\u00f3rias de Sucesso<\/a><\/noindex> do projeto.<\/p>\n<p>Esperamos que, ap\u00f3s o lan\u00e7amento da vers\u00e3o 1.0 com garantia de estabilidade da API e a sa\u00edda do projeto do estado de incuba\u00e7\u00e3o, o Handly conte com novos adotantes. Enquanto isso, o projeto continua a ser testado e a API est\u00e1 sendo aperfei\u00e7oada, com dois 'grandes' lan\u00e7amentos a cada ano \u2013 em junho (na mesma data do lan\u00e7amento simult\u00e2neo do Eclipse) e em dezembro, garantindo um cronograma previs\u00edvel no qual os adotantes podem confiar. Vale mencionar tamb\u00e9m que a taxa de falhas do projeto permanece est\u00e1vel e baixa, e o Handly tem funcionado de forma confi\u00e1vel nos produtos dos primeiros adotantes desde suas vers\u00f5es iniciais. Para mais informa\u00e7\u00f5es sobre o Eclipse Handly, voc\u00ea pode usar <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pisv\/gethandly\/wiki\">Tutorial de Introdu\u00e7\u00e3o<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/downloads\/download.php?file=\/handly\/docs\/handly-overview.pdf&amp;r=1\">Vis\u00e3o Geral Arquitet\u00f4nica<\/a><\/noindex>.<br \/>\n<br \/>Fonte: <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.3 - 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\/pt\/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.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\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\/pt\/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 como plataforma tecnol\u00f3gica para 1C:Enterprise Development Tools | ProHoster","description":"Provavelmente, o Eclipse j\u00e1 n\u00e3o precisa de uma apresenta\u00e7\u00e3o especial.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/32464","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=32464"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/32464\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/24268"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=32464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=32464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=32464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}