{"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\/es\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","title":{"rendered":"Eclipse como plataforma tecnol\u00f3gica para las herramientas de desarrollo 1C:Enterprise","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Probablemente, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/\">Eclipse<\/a><\/noindex> ya no necesita una presentaci\u00f3n especial. Muchos conocen Eclipse gracias a las herramientas de desarrollo de Java Eclipse (<noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/jdt\/\">JDT<\/a><\/noindex>). Esta popular IDE de Java de c\u00f3digo abierto es asociada por la mayor\u00eda de los desarrolladores con la palabra \u201cEclipse\u201d. Sin embargo, Eclipse es tambi\u00e9n una plataforma extensible para la integraci\u00f3n de herramientas de desarrollo (Eclipse Platform), y una serie de IDEs que se construyen sobre ella, incluyendo JDT. Eclipse es el Proyecto Eclipse, un proyecto de alto nivel que coordina el desarrollo de la Eclipse Platform y JDT, y el Eclipse SDK, que es el resultado de este desarrollo. Finalmente, Eclipse es una Fundaci\u00f3n de c\u00f3digo abierto con una enorme comunidad de proyectos, muchos de los cuales no est\u00e1n escritos en Java o no tienen relaci\u00f3n con herramientas de desarrollo (por ejemplo, los proyectos <noindex><a rel=\"nofollow\" href=\"https:\/\/iot.eclipse.org\/\">Eclipse IoT<\/a><\/noindex> y <noindex><a rel=\"nofollow\" href=\"https:\/\/science.eclipse.org\/\">Eclipse Science<\/a><\/noindex>). El mundo de Eclipse es muy diverso.<\/p>\n<p>En este art\u00edculo, de car\u00e1cter general, intentaremos examinar algunos fundamentos de la arquitectura de Eclipse como plataforma para construir herramientas de desarrollo integradas y dar una primera impresi\u00f3n sobre los componentes de Eclipse que forman la base de la plataforma tecnol\u00f3gica para el \u201cnuevo Configurador\u201d 1C:Enterprise, <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/release_IDE\/\">1C:Enterprise Development Tools<\/a><\/noindex>. Por supuesto, este an\u00e1lisis ser\u00e1 inevitablemente superficial y bastante limitado, en parte porque no nos dirigimos \u00fanicamente a los desarrolladores de Eclipse como p\u00fablico objetivo. Sin embargo, esperamos que incluso los desarrolladores experimentados de Eclipse puedan encontrar en el art\u00edculo informaci\u00f3n interesante para ellos. Por ejemplo, hablaremos sobre uno de los \u201csecretos de Eclipse\u201d, un proyecto relativamente nuevo y poco conocido hasta ahora, <noindex><a rel=\"nofollow\" href=\"http:\/\/eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex>, que fue fundado y mantenido por la firma 1C.<br \/>\n<img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para las herramientas de desarrollo 1C:Enterprise\" 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>Introducci\u00f3n a la arquitectura de Eclipse<\/h2>\n<p>\nComencemos revisando algunos aspectos generales de la arquitectura de Eclipse utilizando como ejemplo <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/jdt\/overview.php\">Eclipse Java development tools<\/a><\/noindex> (JDT). La elecci\u00f3n de JDT como ejemplo no es casual. Esta fue la primera plataforma de desarrollo integrada que apareci\u00f3 en Eclipse. Los otros proyectos *DT de Eclipse, como Eclipse C\/C++ Development Tooling (CDT), se crearon m\u00e1s tarde y tomaron tanto los principios arquitect\u00f3nicos b\u00e1sicos como fragmentos de c\u00f3digo fuente de JDT. Los fundamentos de la arquitectura establecidos en JDT siguen siendo relevantes hasta hoy para pr\u00e1cticamente cualquier IDE construida sobre la Eclipse Platform, incluyendo las herramientas de desarrollo 1C:Enterprise.<\/p>\n<p>En primer lugar, es importante se\u00f1alar que Eclipse se caracteriza por una clara estratificaci\u00f3n arquitect\u00f3nica, separando la funcionalidad independiente del lenguaje de la funcionalidad destinada a soportar lenguajes de programaci\u00f3n espec\u00edficos, as\u00ed como separando los componentes \"n\u00facleo\" (core) independientes de la interfaz de usuario de los componentes relacionados con el soporte de la interfaz de usuario.<\/p>\n<p>As\u00ed, la plataforma Eclipse define una infraestructura general, independiente del lenguaje, mientras que las herramientas de desarrollo de Java a\u00f1aden a Eclipse un entorno de desarrollo integrado (IDE) para Java totalmente funcional. Tanto la plataforma Eclipse como JDT se componen de varios componentes, cada uno de los cuales se refiere ya sea al \"n\u00facleo\" independiente de la interfaz de usuario o a la capa de interfaz de usuario (Fig. 1).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para las herramientas de desarrollo 1C:Enterprise\" src=\"\/wp-content\/uploads\/2019\/04\/230825124962e721ecca7dfb7dee9a0c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 1. Plataforma Eclipse y JDT<\/b><\/p>\n<p>Enumeremos los componentes principales de la plataforma Eclipse:<\/p>\n<ul>\n<li><b>Runtime<\/b> \u2014 Define la infraestructura de plugins. Eclipse se caracteriza por una arquitectura modular. En esencia, Eclipse es una colecci\u00f3n de \"puntos de extensi\u00f3n\" y \"extensiones\".<\/li>\n<li><b>Workspace<\/b> \u2014 Gestiona uno o varios proyectos. Un proyecto consta de carpetas y archivos que se reflejan directamente en el sistema de archivos.<\/li>\n<li><b>Standard Widget Toolkit (SWT)<\/b> \u2014 Proporciona los elementos b\u00e1sicos de la interfaz de usuario, integrados con el sistema operativo.<\/li>\n<li><b>JFace<\/b> \u2014 Proporciona un conjunto de frameworks de UI construidos sobre SWT.<\/li>\n<li><b>Workbench<\/b> \u2014 Define la paradigma UI de Eclipse: editores, vistas, perspectivas.<\/li>\n<\/ul>\n<p>\nCabe mencionar que la plataforma Eclipse ofrece tambi\u00e9n muchos otros componentes \u00fatiles para construir herramientas de desarrollo integradas, entre los que se pueden se\u00f1alar Debug, Compare, Search y Team. Adem\u00e1s, se debe mencionar JFace Text, la base para construir \"editores inteligentes\" de c\u00f3digo fuente. Lamentablemente, incluso un breve examen de estos componentes, as\u00ed como de los componentes de la capa de UI, no se puede realizar en el marco de este art\u00edculo, por lo que en la restante parte de esta secci\u00f3n nos limitaremos a revisar los principales componentes \"n\u00facleo\" de la plataforma Eclipse y JDT.<\/p>\n<h4>Core Runtime<\/h4>\n<p>\nLa infraestructura de plugins de Eclipse se basa en <noindex><a rel=\"nofollow\" href=\"https:\/\/www.osgi.org\/developer\/specifications\/\">OSGi<\/a><\/noindex> y es proporcionada por el proyecto <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/equinox\/\">Eclipse Equinox<\/a><\/noindex>. Cada plugin de Eclipse es un bundle OSGi. La especificaci\u00f3n OSGi define, entre otras cosas, los mecanismos de versionado y resoluci\u00f3n de dependencias. Adem\u00e1s de estos mecanismos est\u00e1ndar, Equinox introduce el concepto de <i>puntos de extensi\u00f3n<\/i>. Cada plugin puede definir sus propios puntos de extensi\u00f3n, as\u00ed como aportar funcionalidad adicional al sistema (\"extensiones\"), utilizando los puntos de extensi\u00f3n definidos por el mismo o por otros plugins. Una descripci\u00f3n detallada de los mecanismos OSGi y Equinox excede el alcance de este art\u00edculo. Solo resaltamos que la modularizaci\u00f3n en Eclipse es total (cualquier subsistema, incluyendo Runtime, se compone de uno o varios plugins), y pr\u00e1cticamente todo en Eclipse es una extensi\u00f3n. Adem\u00e1s, estos principios fueron establecidos en la arquitectura de Eclipse mucho antes de la implementaci\u00f3n de OSGi (en ese momento se utilizaba una tecnolog\u00eda propia, muy similar a OSGi).<\/p>\n<h4>Espacio de trabajo principal<\/h4>\n<p>\nPr\u00e1cticamente cualquier entorno de desarrollo integrado construido sobre la base de la plataforma Eclipse trabaja con el espacio de trabajo de Eclipse. De hecho, el espacio de trabajo normalmente contiene el c\u00f3digo fuente de la aplicaci\u00f3n que se est\u00e1 desarrollando en el IDE. El espacio de trabajo se refleja directamente en el sistema de archivos y se compone de proyectos que contienen carpetas y archivos. Estos proyectos, carpetas y archivos se denominan <i>recursos<\/i> el espacio de trabajo. La implementaci\u00f3n del espacio de trabajo en Eclipse act\u00faa como un cach\u00e9 en relaci\u00f3n con el sistema de archivos, lo que permite a su vez acelerar notablemente la navegaci\u00f3n del \u00e1rbol de recursos. Adem\u00e1s, el espacio de trabajo ofrece una serie de servicios adicionales, incluyendo <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Resource-deltas\/resource-deltas.html\">un mecanismo de notificaci\u00f3n sobre cambios en los recursos<\/a><\/noindex> y <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Builders\/builders.html\">infraestructura de constructores incrementales<\/a><\/noindex>.<\/p>\n<p>El soporte del espacio de trabajo y sus recursos est\u00e1 a cargo del componente Core Resources (plugin org.eclipse.core.resources). En particular, este componente proporciona acceso program\u00e1tico al espacio de trabajo en forma de <i>modelo de recursos<\/i>. Para trabajar de manera efectiva con este modelo, los clientes necesitan una forma sencilla de representar un enlace a un recurso. En este caso, ser\u00eda recomendable ocultar el objeto que almacena directamente el estado del recurso en el modelo del acceso del cliente. De lo contrario, en caso de, por ejemplo, eliminar un archivo, el cliente podr\u00eda seguir manteniendo el objeto que ya no existe en el modelo, lo que generar\u00eda problemas. Eclipse resuelve esta tarea utilizando lo que se llama un <i>handle<\/i> de recurso. El handle act\u00faa como una clave (solo conoce la ruta al recurso en el espacio de trabajo) y controla completamente el acceso al objeto interno del modelo, que almacena directamente la informaci\u00f3n sobre el estado del recurso. Este dise\u00f1o es una variaci\u00f3n del patr\u00f3n <noindex><a rel=\"nofollow\" href=\"http:\/\/wiki.c2.com\/?HandleBodyPattern\">Handle\/Body<\/a><\/noindex>.<\/p>\n<p>La figura 2 ilustra la idiom\u00e1tica Handle\/Body en relaci\u00f3n con el modelo de recursos. La interfaz IResource representa el handle del recurso y act\u00faa como una API, a diferencia de la clase Resource, que implementa esta interfaz, as\u00ed como de la clase ResourceInfo, que representa el body, que no es una API. Es importante destacar que el handle solo conoce la ruta al recurso en relaci\u00f3n con la ra\u00edz del espacio de trabajo y no contiene una referencia a la informaci\u00f3n del recurso. Los objetos de informaci\u00f3n del recurso forman lo que se conoce como el \"\u00e1rbol de elementos\" (element tree). Esta estructura de datos est\u00e1 completamente materializada en memoria. Para encontrar una instancia de informaci\u00f3n del recurso que corresponda a un handle determinado, se recorre el \u00e1rbol de elementos de acuerdo con la ruta almacenada en ese handle.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para las herramientas de desarrollo 1C:Enterprise\" src=\"\/wp-content\/uploads\/2019\/04\/9d17cd95be3730ab6b5b9e6e3ed71ace.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figura 2. IResource y ResourceInfo<\/b><\/p>\n<p>Como veremos m\u00e1s adelante, el dise\u00f1o b\u00e1sico del modelo de recursos (que se puede llamar basado en handle) se utiliza en Eclipse y en otros modelos. Por ahora, enumeremos algunas propiedades distintivas de este dise\u00f1o:<\/p>\n<ul>\n<li>El handle es un objeto-valor (value object). Los objetos-valor son objetos inmutables (immutable) cuya igualdad no se basa en la identidad. Tales objetos pueden utilizarse de forma segura como clave en contenedores hasheados. Varios instancias de handle pueden hacer referencia al mismo recurso. Para compararlos, se debe utilizar el m\u00e9todo equals(Object).<\/li>\n<li>El handle define el comportamiento del recurso, pero no contiene informaci\u00f3n sobre el estado del recurso (los \u00fanicos datos que almacena son la \"clave\", que es la ruta al recurso).<\/li>\n<li>El handle puede hacer referencia a un recurso que no existe (ya sea un recurso que a\u00fan no se ha creado o un recurso que ya ha sido eliminado). La existencia del recurso se puede verificar mediante el m\u00e9todo IResource.exists().<\/li>\n<li>Algunas operaciones pueden implementarse \u00fanicamente a partir de la informaci\u00f3n almacenada en el propio handle (las llamadas operaciones solo de handle). Ejemplos de esto son IResource.getParent(), getFullPath(), etc. El recurso no necesariamente debe existir para que se ejecute con \u00e9xito tal operaci\u00f3n. Las operaciones que requieren que el recurso exista para ejecutarse con \u00e9xito lanzan una excepci\u00f3n (CoreException) si el recurso no existe.<\/li>\n<\/ul>\n<p>\nEclipse proporciona un mecanismo eficaz de notificaci\u00f3n sobre cambios en los recursos del espacio de trabajo (fig. 3). Los recursos pueden cambiar tanto como resultado de acciones realizadas en la propia Eclipse IDE, como de la ejecuci\u00f3n de una sincronizaci\u00f3n con el sistema de archivos. En ambos casos, los clientes suscritos a las notificaciones reciben informaci\u00f3n detallada sobre los cambios en forma de \u00abdeltas de recursos\u00bb (resource delta). El delta describe los cambios entre dos estados del (sub)\u00e1rbol de recursos del espacio de trabajo y es en s\u00ed mismo un \u00e1rbol, donde cada nodo describe un cambio en un recurso y contiene una lista de deltas de nivel siguiente que describen los cambios en los recursos hijos.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para las herramientas de desarrollo 1C:Enterprise\" 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>El mecanismo de notificaci\u00f3n basado en deltas de recursos tiene las siguientes caracter\u00edsticas:<\/p>\n<ul>\n<li>Un solo cambio y m\u00faltiples cambios se describen utilizando la misma estructura, ya que el delta se construye seg\u00fan el principio de composici\u00f3n recursiva. Los clientes suscriptores pueden procesar las notificaciones sobre cambios de recursos mediante un descenso recursivo a trav\u00e9s del \u00e1rbol de deltas.<\/li>\n<li>El delta contiene informaci\u00f3n completa sobre el cambio de un recurso, incluyendo su movimiento y\/o el cambio de los \u00abmarcadores\u00bb asociados (como los errores de compilaci\u00f3n que se presentan en forma de marcadores).<\/li>\n<li>Dado que las referencias a un recurso se realizan a trav\u00e9s de un handle, el delta puede referirse naturalmente a un recurso remoto.<\/li>\n<\/ul>\n<p>\nComo veremos pronto, los principales componentes del dise\u00f1o del mecanismo de notificaci\u00f3n sobre cambios en el modelo de recursos son relevantes tambi\u00e9n para otros modelos basados en handles.<\/p>\n<h4>JDT Core<\/h4>\n<p>\nEl modelo de recursos del espacio de trabajo de Eclipse es un modelo fundamental independiente del lenguaje. El componente JDT Core (plugin org.eclipse.jdt.core) proporciona una API para navegar y analizar la estructura del espacio de trabajo desde la perspectiva de Java, la llamada \u00abmodelo de Java\u00bb (<i>modelo Java<\/i>). Esta API est\u00e1 definida en t\u00e9rminos de elementos Java, a diferencia de la API subyacente del modelo de recursos, que est\u00e1 definida en t\u00e9rminos de carpetas y archivos. Las principales interfaces del \u00e1rbol de elementos Java se muestran en la fig. 4.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para las herramientas de desarrollo 1C:Enterprise\" src=\"\/wp-content\/uploads\/2019\/04\/67bfd31e93eaa66aa94b30281693a318.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 4. Elementos del modelo de Java<\/b><\/p>\n<p>El modelo Java utiliza la misma idiom\u00e1tica handle\/body que el modelo de recursos (fig. 5). IJavaElement es el handle, y JavaElementInfo desempe\u00f1a el papel de body. La interfaz IJavaElement define un protocolo com\u00fan para todos los elementos Java. Algunos de sus m\u00e9todos son solo de handle: getElementName(), getParent(), etc. El objeto JavaElementInfo almacena el estado del elemento correspondiente: su estructura y atributos.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para las herramientas de desarrollo 1C:Enterprise\" src=\"\/wp-content\/uploads\/2019\/04\/5b473cccfc8f258d563033ce334cb94f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 5. IJavaElement y JavaElementInfo<\/b><\/p>\n<p>El modelo Java tiene algunas diferencias en la implementaci\u00f3n del dise\u00f1o b\u00e1sico handle\/body en comparaci\u00f3n con el modelo de recursos. Como se mencion\u00f3 anteriormente, en el modelo de recursos, el \u00e1rbol de elementos, cuyos nodos son objetos de informaci\u00f3n de recursos, se almacena completamente en memoria. Sin embargo, en el modelo Java puede haber un n\u00famero significativamente mayor de elementos que en el \u00e1rbol de recursos, ya que representa, entre otros, la estructura interna de los archivos .java y .class: tipos, campos y m\u00e9todos.<\/p>\n<p>Para evitar la materializaci\u00f3n completa de todo el \u00e1rbol de elementos en memoria, la implementaci\u00f3n del modelo Java utiliza una cach\u00e9 LRU de tama\u00f1o limitado para la informaci\u00f3n del elemento, donde la clave es el handle IJavaElement. Los objetos de informaci\u00f3n del elemento se crean bajo demanda a medida que se navega por el \u00e1rbol de elementos. En este proceso, los elementos menos utilizados se eliminan de la cach\u00e9, y el consumo de memoria del modelo permanece limitado al tama\u00f1o establecido de la cach\u00e9. Esta es otra ventaja del dise\u00f1o basado en handles, que oculta completamente tales detalles de implementaci\u00f3n del c\u00f3digo del cliente.<\/p>\n<p>El mecanismo de notificaci\u00f3n de cambios en los elementos Java es, en t\u00e9rminos generales, an\u00e1logo al mecanismo de seguimiento de cambios en los recursos del espacio de trabajo mencionado anteriormente. Un cliente que desee rastrear cambios en el modelo Java se suscribe a las notificaciones, que se presentan en forma de un objeto ElementChangedEvent, que contiene IJavaElementDelta (fig. 6).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para las herramientas de desarrollo 1C:Enterprise\" src=\"\/wp-content\/uploads\/2019\/04\/0402ec362078eaf50f47756e7f24de01.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 6. ElementChangedEvent y IJavaElementDelta<\/b><\/p>\n<p>El modelo Java no contiene informaci\u00f3n sobre el cuerpo de los m\u00e9todos o la resoluci\u00f3n de nombres, por lo tanto, para un an\u00e1lisis detallado del c\u00f3digo escrito en Java, JDT Core proporciona un modelo adicional (no basado en handles): <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/articles\/Article-JavaCodeManipulation_AST\/index.html\">\u00e1rbol de sintaxis abstracto<\/a><\/noindex> (\u00e1rbol de sintaxis abstracta, AST). El AST representa el resultado del an\u00e1lisis sint\u00e1ctico del texto fuente. Los nodos del AST corresponden a los elementos de la estructura del m\u00f3dulo fuente (declaraciones, operadores, expresiones, etc.) y contienen informaci\u00f3n sobre las coordenadas del elemento correspondiente en el texto fuente, as\u00ed como (opcionalmente) informaci\u00f3n sobre la resoluci\u00f3n de nombres en forma de enlaces a lo que se llaman <i>enlaces<\/i>. Los enlaces son objetos que representan entidades nombradas, como tipos, m\u00e9todos y variables, que son conocidos por el compilador. A diferencia de los nodos del AST, que forman un \u00e1rbol, los enlaces mantienen referencias cruzadas y, en general, forman un grafo. La clase abstracta ASTNode es la clase base com\u00fan para todos los nodos del AST. Las subclases de ASTNode corresponden a construcciones sint\u00e1cticas espec\u00edficas del lenguaje Java.<\/p>\n<p>Dado que los \u00e1rboles sint\u00e1cticos pueden consumir una cantidad significativa de memoria, JDT almacena en cach\u00e9 solo un AST, para el editor activo. A diferencia del modelo de Java, el AST generalmente se considera un modelo 'intermedio', 'temporal', del que los clientes no deber\u00edan mantener referencias fuera del contexto de la operaci\u00f3n que llev\u00f3 a la creaci\u00f3n del AST.<\/p>\n<p>Los tres modelos enumerados (modelo de Java, AST, enlaces) conjuntamente son la base para construir 'herramientas de desarrollo inteligentes' en JDT, entre las cuales se encuentra un potente editor de Java con diversos 'asistentes', varias acciones para procesar el c\u00f3digo fuente (entre las que se incluyen la organizaci\u00f3n de la lista de importaci\u00f3n de nombres y el formateo seg\u00fan el estilo configurado), herramientas de b\u00fasqueda y refactorizaci\u00f3n. En este contexto, el modelo de Java juega un papel especial, ya que es el que se utiliza como base para la representaci\u00f3n visual de la estructura de la aplicaci\u00f3n en desarrollo (por ejemplo, en Package Explorer, Outline, Search, Call Hierarchy y Type Hierarchy).<\/p>\n<h2>Componentes de Eclipse utilizados en 1C:Enterprise Developments Tools<\/h2>\n<p>\nEn la Fig. 7 se muestran los componentes de Eclipse que forman la base de la plataforma tecnol\u00f3gica para 1C:Enterprise Development Tools.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para las herramientas de desarrollo 1C:Enterprise\" src=\"\/wp-content\/uploads\/2019\/04\/248cceea47ee507b9ad22d6964738ee7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 7. Eclipse como plataforma para 1C:Enterprise Development Tools<\/b><\/p>\n<p><b>Plataforma Eclipse<\/b> proporciona la infraestructura b\u00e1sica. Hemos revisado algunos aspectos de esta infraestructura en la secci\u00f3n anterior.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/modeling\/emf\/\">Marco de Modelado de Eclipse<\/a><\/noindex><\/b> (<b>EMF<\/b>) proporciona herramientas generales para la modelaci\u00f3n de datos estructurados. EMF est\u00e1 integrado con la plataforma Eclipse, pero tambi\u00e9n puede usarse por separado en aplicaciones Java est\u00e1ndar. A menudo, los desarrolladores novatos de Eclipse ya est\u00e1n familiarizados con EMF, aunque a\u00fan no comprenden completamente las sutilezas de la plataforma Eclipse. Una de las razones de su merecida popularidad es su dise\u00f1o universal, que incluye, entre otras cosas, una API unificada de nivel meta que permite trabajar de manera gen\u00e9rica con cualquier modelo de EMF. Las implementaciones b\u00e1sicas de EMF para objetos de modelo y el subsistema de generaci\u00f3n de c\u00f3digo de modelo a partir de la meta-modelo aumentan significativamente la velocidad de desarrollo y reducen la cantidad de errores. Adem\u00e1s, EMF contiene mecanismos de serializaci\u00f3n de modelos, seguimiento de cambios en el modelo, y mucho m\u00e1s. <\/p>\n<p>Como cualquier herramienta verdaderamente universal, EMF es adecuada para abordar una amplia gama de tareas relacionadas con la modelaci\u00f3n, pero algunas clases de modelos (como los modelos basados en handles mencionados anteriormente) pueden requerir herramientas de modelaci\u00f3n m\u00e1s especializadas. Hablar de EMF es una tarea ingrata, especialmente dentro del marco limitado de un solo art\u00edculo, ya que es el tema de un libro por s\u00ed solo, y bastante extenso. Solo cabe se\u00f1alar que un sistema de generalizaciones de calidad que se encuentra en la base de EMF ha permitido el surgimiento de toda una variedad de proyectos dedicados a la modelaci\u00f3n, que forman parte del proyecto de alto nivel. <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/modeling\/\">Eclipse Modeling<\/a><\/noindex> junto con el propio EMF. Uno de esos proyectos es Eclipse Xtext.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/Xtext\/\">Eclipse Xtext<\/a><\/noindex><\/b> proporciona infraestructura para la 'modelaci\u00f3n de texto'. Xtext utiliza <noindex><a rel=\"nofollow\" href=\"http:\/\/www.antlr.org\/\">ANTLR<\/a><\/noindex> para el an\u00e1lisis sint\u00e1ctico del texto fuente y EMF para representar el ASG resultante (grafo sem\u00e1ntico abstracto, que, en esencia, es una combinaci\u00f3n de AST y bindings), tambi\u00e9n llamado \u00abmodelo sem\u00e1ntico\u00bb. La gram\u00e1tica del lenguaje modelado con Xtext se describe en su propio lenguaje Xtext. Esto permite no solo generar la descripci\u00f3n de la gram\u00e1tica para ANTLR, sino tambi\u00e9n obtener un mecanismo de serializaci\u00f3n del AST (es decir, Xtext proporciona tanto parser como unparser), sugerencias contextuales y una serie de otros componentes del lenguaje. Por otro lado, el lenguaje de descripci\u00f3n de gram\u00e1tica utilizado en Xtext es menos flexible en comparaci\u00f3n, digamos, con el lenguaje de descripci\u00f3n de gram\u00e1tica en ANTLR. Por lo tanto, a veces es necesario \u00abajustar\u00bb el lenguaje implementado a Xtext, lo que generalmente no es un problema si se trata de un lenguaje desarrollado desde cero, pero puede ser inaceptable para lenguajes con una sintaxis ya establecida. A pesar de esto, Xtext es actualmente la herramienta m\u00e1s madura, funcionalmente completa y vers\u00e1til en Eclipse para la construcci\u00f3n de lenguajes de programaci\u00f3n y herramientas de desarrollo para ellos. En particular, es una herramienta ideal para la r\u00e1pida creaci\u00f3n de prototipos. <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\">lenguajes espec\u00edficos de dominio<\/a><\/noindex> (domain-specific language, DSL). Adem\u00e1s del mencionado \u00abn\u00facleo del lenguaje\u00bb basado en ANTLR y EMF, Xtext ofrece numerosos componentes \u00fatiles de nivel superior, incluyendo mecanismos de indexaci\u00f3n, construcci\u00f3n incremental, \u00abeditor inteligente\u00bb y mucho, mucho m\u00e1s, pero deja de lado los modelos de lenguaje basados en handles. Al igual que EMF, Xtext es un tema que merece un libro aparte, y es poco probable que podamos incluso esbozar todas sus capacidades ahora.<\/p>\n<p>Las herramientas de desarrollo de 1C:Enterprise utilizan activamente tanto EMF por s\u00ed mismo como una serie de otros proyectos de Eclipse Modeling. En particular, Xtext es una de las bases de las herramientas de desarrollo para lenguajes como el lenguaje de programaci\u00f3n integrado y el lenguaje de consultas de 1C:Enterprise. Otro fundamento de estas herramientas de desarrollo es el proyecto Eclipse Handly, del que nos detendremos m\u00e1s en detalle (de los componentes mencionados de Eclipse, es hasta ahora el menos conocido).<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex><\/b>, el subproyecto del proyecto de nivel superior Eclipse Technology, surgi\u00f3 a partir de una contribuci\u00f3n inicial de c\u00f3digo a la Fundaci\u00f3n Eclipse, realizada por la empresa 1C en 2014. Desde entonces, la empresa 1C ha continuado apoyando el desarrollo del proyecto: los committers de Handly son empleados de la empresa. El proyecto es peque\u00f1o, pero ocupa un nicho bastante \u00fanico en Eclipse: su objetivo principal es apoyar el desarrollo de modelos basados en handles.<\/p>\n<p>Los principios arquitect\u00f3nicos fundamentales de los modelos basados en handles, como la idiom\u00e1tica handle\/body, se discutieron anteriormente con el ejemplo del modelo de recursos y el modelo Java. All\u00ed tambi\u00e9n se se\u00f1al\u00f3 que tanto el modelo de recursos como el modelo Java son bases importantes para las herramientas de desarrollo Java de Eclipse (JDT). Y dado que pr\u00e1cticamente todos los proyectos *DT de Eclipse tienen una arquitectura similar a la de JDT, no ser\u00e1 una gran exageraci\u00f3n decir que los modelos basados en handles son la base de muchos, si no de todos, los IDE construidos sobre la Plataforma Eclipse. Por ejemplo, en las herramientas de desarrollo C\/C++ de Eclipse (CDT) hay un modelo basado en handles para C\/C++, que desempe\u00f1a en la arquitectura de CDT el mismo papel que el modelo Java en JDT.<\/p>\n<p>Antes de la aparici\u00f3n de Handly, Eclipse no ofrec\u00eda bibliotecas especializadas para construir modelos de lenguaje basados en handles. Los modelos existentes se creaban principalmente mediante la adaptaci\u00f3n directa del c\u00f3digo del modelo Java (tambi\u00e9n conocido como copiar\/pegar), <i>en aquellos casos en que esto es posible.<\/i> Eclipse Public License (EPL). (Es obvio que, por ejemplo, para los proyectos de Eclipse en s\u00ed, esto generalmente no es un problema desde el punto de vista legal, lo cual no se puede decir de los productos con c\u00f3digo cerrado). Aparte de la falta de sistematicidad caracter\u00edstica, esa metodolog\u00eda lleva a problemas bien conocidos: duplicaci\u00f3n de c\u00f3digo, errores introducidos durante la adaptaci\u00f3n, etc. Y lo que es peor, los modelos resultantes quedan como 'cosas en s\u00ed mismas' y no aprovechan el potencial existente para la unificaci\u00f3n. Sin embargo, la identificaci\u00f3n de conceptos comunes y protocolos para modelos de lenguaje basados en handles podr\u00eda haber llevado a la creaci\u00f3n de componentes reutilizables para trabajar con ellos, de manera similar a lo que ocurri\u00f3 con EMF.<\/p>\n<p>No se puede decir que en Eclipse no se comprendieran estos problemas. Ya en 2005 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.xing.com\/profile\/Martin_Aeschlimann\">Martin Aeschlimann<\/a><\/noindex>, resumiendo la experiencia del desarrollo del prototipo de CDT, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/org\/langsymp\/position_paper_martin_aeschlimann.html\">argument\u00f3<\/a><\/noindex> la necesidad de crear una infraestructura com\u00fan para modelos de lenguajes, incluidas las modelos basadas en handle. Sin embargo, como a menudo sucede, debido a tareas m\u00e1s prioritarias, estas ideas nunca se materializaron. Mientras tanto, la factorizaci\u00f3n del c\u00f3digo de los *proyectos DT sigue siendo uno de los temas poco desarrollados en Eclipse.<\/p>\n<p>En cierto sentido, el proyecto Handly est\u00e1 dise\u00f1ado para abordar aproximadamente las mismas tareas que EMF, pero para modelos basados en handle, y principalmente lenguajes (es decir, que representan elementos de la estructura de alg\u00fan lenguaje de programaci\u00f3n). A continuaci\u00f3n se enumeran los principales objetivos establecidos durante el dise\u00f1o de Handly:<\/p>\n<ul>\n<li>Identificaci\u00f3n de las principales abstracciones del dominio.<\/li>\n<li>Reducci\u00f3n de esfuerzos y mejora de la calidad de la implementaci\u00f3n de modelos de lenguajes basados en handle mediante la reutilizaci\u00f3n de c\u00f3digo.<\/li>\n<li>Proporcionar una API unificada en el meta-nivel a los modelos resultantes, facilitando la creaci\u00f3n de componentes IDE comunes que trabajen con modelos de lenguajes basados en handle.<\/li>\n<li>Flexibilidad y escalabilidad.<\/li>\n<li>Integraci\u00f3n con Xtext (en una capa separada).<\/li>\n<\/ul>\n<p>\nPara identificar conceptos y protocolos comunes, se analizaron implementaciones existentes de modelos de lenguajes basados en handle. Las principales interfaces y implementaciones b\u00e1sicas provistas por Handly se muestran en la fig. 8.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para las herramientas de desarrollo 1C:Enterprise\" src=\"\/wp-content\/uploads\/2019\/04\/47f4bf74093245334b8d67b149734dfc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 8. Interfaces comunes e implementaci\u00f3n b\u00e1sica de elementos Handly<\/b><\/p>\n<p>La interfaz IElement representa el handle de un elemento y es com\u00fan a los elementos de todos los modelos basados en Handly. La clase abstracta Element implementa un mecanismo gen\u00e9rico handle\/body (fig. 9).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para las herramientas de desarrollo 1C:Enterprise\" src=\"\/wp-content\/uploads\/2019\/04\/0651c1f284b7edfa36313d4b51d72f08.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 9. IElement y la implementaci\u00f3n gen\u00e9rica handle\/body<\/b><\/p>\n<p>Adem\u00e1s, Handly proporciona un mecanismo gen\u00e9rico de notificaci\u00f3n sobre cambios en los elementos del modelo (fig. 10). Como se puede ver, en t\u00e9rminos generales es similar a los mecanismos de notificaci\u00f3n implementados en el modelo de recursos y el modelo de Java, y utiliza IElementDelta para representar de manera unificada la informaci\u00f3n sobre el cambio de un elemento.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse como plataforma tecnol\u00f3gica para las herramientas de desarrollo 1C:Enterprise\" src=\"\/wp-content\/uploads\/2019\/04\/cbdec8cf874308e0fa9dd96d04f62703.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 10. Interfaces comunes e implementaci\u00f3n b\u00e1sica del mecanismo de notificaci\u00f3n de Handly<\/b><\/p>\n<p>La parte de Handly discutida anteriormente (figs. 9 y 10) puede ser utilizada para representar pr\u00e1cticamente cualquier modelo basado en handle. Para la creaci\u00f3n <i>de lenguajes<\/i> modelos, el proyecto ofrece funcionalidad adicional, en particular, interfaces comunes e implementaciones b\u00e1sicas para elementos de la estructura del texto fuente, denominados <i>elementos fuente<\/i> (fig. 8). La interfaz ISourceFile representa el archivo fuente, y ISourceConstruct es un elemento dentro del archivo fuente. Las clases abstractas SourceFile y SourceConstruct implementan mecanismos gen\u00e9ricos para apoyar el trabajo con archivos fuente y sus elementos, como el manejo de b\u00faferes de texto, la asignaci\u00f3n a las coordenadas de un elemento en el texto fuente, la reconciliaci\u00f3n del modelo con el contenido actual del b\u00fafer de la copia de trabajo, etc. La implementaci\u00f3n de estos mecanismos suele ser una tarea bastante compleja, y Handly puede reducir significativamente el esfuerzo en el desarrollo de modelos basados en handle al proporcionar implementaciones b\u00e1sicas de alta calidad.<\/p>\n<p>Adem\u00e1s de los mecanismos principales mencionados anteriormente, Handly proporciona infraestructura para b\u00faferes de texto y \u00abinstant\u00e1neas\u00bb (snapshots), soporte para la integraci\u00f3n con editores de c\u00f3digo fuente (incluida la integraci\u00f3n \u00ablista para usar\u00bb con el editor Xtext), as\u00ed como algunos componentes de UI comunes que funcionan con modelos basados en Handly, como el marco de esquema. Para ilustrar sus capacidades, el proyecto proporciona varios ejemplos, incluida la implementaci\u00f3n de un modelo Java en Handly. (En comparaci\u00f3n con la implementaci\u00f3n completa del modelo Java en JDT, este modelo se ha simplificado intencionadamente para mayor claridad.)<\/p>\n<p>Como se mencion\u00f3 anteriormente, se ha prestado y contin\u00faa prest\u00e1ndose seriosa atenci\u00f3n a la escalabilidad y flexibilidad durante el dise\u00f1o inicial de Handly y su posterior desarrollo. <\/p>\n<p>En principio, los modelos basados en handle escalan bastante bien \u00abpor dise\u00f1o\u00bb. Por ejemplo, la idiom\u00e1tica handle\/body permite limitar la cantidad de memoria que consume el modelo. Pero hay ciertos matices. En las pruebas de escalabilidad de Handly, se descubri\u00f3 un problema en la implementaci\u00f3n del mecanismo de notificaci\u00f3n: al modificar un gran n\u00famero de elementos, la construcci\u00f3n de las diferencias tardaba demasiado tiempo. Se descubri\u00f3 que el mismo problema estaba presente en el modelo Java de JDT, del cual se adapt\u00f3 el c\u00f3digo correspondiente en su momento. Corregimos el error en Handly y prepar\u00e9 un parche similar para JDT, que fue aceptado con gratitud. Este es solo un ejemplo de c\u00f3mo la implementaci\u00f3n de Handly en implementaciones existentes de modelos podr\u00eda ser potencialmente \u00fatil, ya que en este caso se podr\u00eda corregir dicho error en un solo lugar.<\/p>\n<p>Para hacer posible la integraci\u00f3n de Handly en implementaciones existentes de modelos, la biblioteca debe tener una gran flexibilidad. El principal desaf\u00edo es mantener la compatibilidad hacia atr\u00e1s en la API del modelo. Este problema se ha resuelto en <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/NewIn05\">Handly 0.5<\/a><\/noindex> mediante una clara separaci\u00f3n de la API espec\u00edfica del modelo, que es definida y completamente controlada por el desarrollador, de la API unificada de nivel meta proporcionada por la biblioteca. Esto no solo hace posible desde el punto de vista t\u00e9cnico la integraci\u00f3n de Handly en implementaciones existentes, sino que tambi\u00e9n otorga al desarrollador de un nuevo modelo una considerable libertad en el dise\u00f1o de la API.<\/p>\n<p>La flexibilidad tambi\u00e9n tiene otros aspectos. Por ejemplo, Handly impone casi ninguna limitaci\u00f3n en la estructura del modelo y puede utilizarse tanto para modelar lenguajes de prop\u00f3sito general como lenguajes orientados a dominios espec\u00edficos. Al construir la estructura del archivo fuente, Handly no prescribe ninguna forma espec\u00edfica de representaci\u00f3n de AST y, en general, ni siquiera requiere la existencia misma de un AST, lo que garantiza as\u00ed la compatibilidad con pr\u00e1cticamente cualquier mecanismo de an\u00e1lisis sint\u00e1ctico. Finalmente, Handly soporta una integraci\u00f3n completa con el espacio de trabajo de Eclipse, pero tambi\u00e9n puede trabajar directamente con sistemas de archivos, gracias a la integraci\u00f3n con <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/EFS\">Eclipse File System<\/a><\/noindex> (EFS).<\/p>\n<p>La versi\u00f3n actual <noindex><a rel=\"nofollow\" href=\"https:\/\/projects.eclipse.org\/projects\/technology.handly\/releases\/0.6\">Handly 0.6<\/a><\/noindex> se lanz\u00f3 en diciembre de 2016. A pesar de que actualmente el proyecto se encuentra en estado de incubaci\u00f3n y la API a\u00fan no est\u00e1 finalizada, Handly ya se utiliza en dos importantes productos comerciales que se arriesgaron a ser \"early adopters\", y, hay que decir, hasta ahora no se han arrepentido.<\/p>\n<p>Como se mencion\u00f3 anteriormente, uno de estos productos es 1C:Enterprise Development Tools, donde Handly se utiliza desde el principio para modelar elementos de la estructura de alto nivel de lenguajes 1C:Enterprise, como su lenguaje de programaci\u00f3n integrado y lenguaje de consultas. El otro producto es menos conocido por el p\u00fablico en general. Es <noindex><a rel=\"nofollow\" href=\"https:\/\/www.codasip.com\/custom-processor\/\">Codasip Studio<\/a><\/noindex>, un entorno integrado de dise\u00f1o de procesadores orientados a problemas (application-specific instruction-set processor, ASIP), utilizado tanto dentro de la propia empresa checa Codasip como por sus clientes, entre los cuales se encuentran <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>. Codasip utiliza Handly en producci\u00f3n desde 2015, comenzando con la versi\u00f3n Handly 0.2. La \u00faltima versi\u00f3n de Codasip Studio utiliza la versi\u00f3n 0.5, lanzada en junio de 2016. Ond\u0159ej Il\u010d\u00edk, quien lidera el desarrollo del IDE en Codasip, est\u00e1 en contacto con el proyecto, proporcionando retroalimentaci\u00f3n crucial de los 'adoptantes externos'. Incluso ha logrado encontrar algo de tiempo libre para participar directamente en el desarrollo del proyecto, implementando una capa de UI (~ 4000 l\u00edneas de c\u00f3digo) para uno de los ejemplos de Handly, un modelo Java. M\u00e1s informaci\u00f3n de primera mano sobre el uso de Handly por parte de los adoptantes se puede obtener en la p\u00e1gina <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/Adopters\">Historias de \u00c9xito<\/a><\/noindex> del proyecto.<\/p>\n<p>Esperamos que tras el lanzamiento de la versi\u00f3n 1.0 con garant\u00eda de estabilidad de la API y la salida del proyecto del estado de incubaci\u00f3n, Handly tenga nuevos adoptantes. Mientras tanto, el proyecto sigue en pruebas y perfeccionando la API, lanzando dos 'grandes' versiones al a\u00f1o - en junio (en la misma fecha que el lanzamiento simult\u00e1neo de Eclipse) y en diciembre, asegurando un calendario predecible en el que los adoptantes pueden confiar. Adem\u00e1s, el \u00edndice de 'tasa de errores' del proyecto se mantiene en un nivel consistentemente bajo y Handly ha funcionado de manera fiable en los productos de los adoptantes tempranos desde las primeras versiones. Para un conocimiento m\u00e1s profundo de Eclipse Handly, se puede utilizar <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pisv\/gethandly\/wiki\">Tutorial de Introducci\u00f3n<\/a><\/noindex> y <noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/downloads\/download.php?file=\/handly\/docs\/handly-overview.pdf&amp;r=1\">Visi\u00f3n General Arquitect\u00f3nica<\/a><\/noindex>.<br \/>\n<br \/>Fuente: <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.2 - 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\/es\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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":"Probablemente, Eclipse ya no necesita presentaci\u00f3n.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/32464","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=32464"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/32464\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/24268"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=32464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=32464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=32464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}