Pegjs: Buscando un nuevo mantenedor

Creado en 7 may. 2017  ·  20Comentarios  ·  Fuente: pegjs/pegjs

Cuando comencé PEG.js hace unos 7 años, nunca pensé que sería un proyecto tan exitoso y que mi participación en él duraría tanto. La mayor parte del tiempo estaba feliz trabajando en ello, pero en el último año mi motivación comenzó a menguar. Descubrí que tenía que convencerme a mí mismo de sentarme y trabajar en los problemas o escribir el código. Gradualmente me di cuenta de que PEG.js ya no es algo en lo que quiera dedicar mi tiempo. Como resultado, estoy buscando un nuevo mantenedor de PEG.js.

¿A quién busco?

Estoy buscando a alguien que tenga un conocimiento profundo de cómo funcionan el análisis sintáctico y los generadores de analizadores sintácticos, una gran motivación, experiencia en el desarrollo de código abierto y una idea clara de dónde llevar el desarrollo de PEG.js (que puede coincidir o no con la hoja de ruta actual ). Ninguno de estos es un requisito estricto, pero es poco probable que entregue PEG.js a alguien que carezca significativamente de estas áreas.

¿Interesado?

Si está interesado en hacerse cargo de PEG.js, agregue un comentario a este problema e incluya cualquier cosa que crea que me convencerá de que es la persona adecuada :-) Revisaré los comentarios y anunciaré el nuevo mantenedor durante el fin de semana de mayo 13-14. Si no aparece un mantenedor adecuado para entonces, PEG.js dejará de ser oficialmente mantenido.

Activos transferidos

La transferencia del mantenimiento implica la transferencia de los siguientes activos:

El nuevo mantenedor deberá encargarse de alojar y ejecutar el sitio web PEG.js , que actualmente se está ejecutando en mi VPS personal. Espero que el nuevo mantenedor configure el alojamiento bajo su control y reconfigure los registros DNS para el dominio pegjs.org para apuntar allí poco después de transferir el mantenimiento. El nuevo mantenedor no tendrá acceso a mi VPS personal ni continuaré alojando el sitio web de PEG.js allí indefinidamente.


Si tiene alguna pregunta o nota sobre algo de lo que escribí anteriormente, no dude en agregar comentarios a este problema.

Comentario más útil

@dmajda muchas gracias por PEG.js. Es muy útil. Espero que este proyecto siga vivo.

Todos 20 comentarios

Solo quiero decir que comencé a usar PEG.js en los últimos meses y me encanta. La gramática es fácil de aprender y el número de conceptos es bastante bajo. La documentación es un poco liviana, pero encontré todo lo que necesitaba. Además, no habría comenzado con mi dialecto de JavaScript sin el ejemplo de javascript.pegjs. Eso redujo considerablemente la carga de trabajo.

En su estado actual, ¿cuáles son sus beneficios? Para mí es muy fácil hacer prototipos. Los inconvenientes son que puede ser lento para grandes cantidades de datos, pero eso no me importa en este momento. ¿Cuáles son sus competidores? ¿Quieres que siga creciendo o te gustaría que alguien creara la versión 2.0? Si actualmente es estable, ¿por qué no dejarlo así, quizás con un poco más de documentación?

Para la hoja de ruta, ¿qué le brinda la modernización del código? ¿Más rápido? más fácil de mantener? ¿O simplemente "actualizado"? Puedo entender el uso de Gulp en lugar de Make para que sea más fácil de mantener. Las limpiezas suenan caras, casi un 1.5, llamando al 1.0 actual. Siento que "mejorar el rendimiento significativamente" es una meta demasiado grande para 1.0. Siento que la corriente es 1.0. Es muy estable, buenos mensajes de error, todas las funciones funcionan, etc. 1.0 del software no tiene que ser "el indicado". Eso es más 2.0, 3.0, etc.

No sé si podría ayudar con el mantenimiento, pero me gustaría ver el sitio, el grupo de Google, etc. en vivo.

@mikeaustin Gracias por tu comentario. Permítame responder rápidamente a sus preguntas (que probablemente también serán útiles para quienes estén analizando este tema).

En su estado actual, ¿cuáles son sus beneficios? Para mí es muy fácil hacer prototipos.

La creación de prototipos ha sido el caso de uso dominante, junto con el análisis de pequeños lenguajes / DSL que son demasiado complejos para las expresiones regulares y varias herramientas interactivas. Originalmente, creé PEG.js porque los PEG ofrecían una buena sintaxis gramatical y no había un generador de analizador de JavaScript que lo usara y también podía producir buenos mensajes de error.

Los inconvenientes son que puede ser lento para grandes cantidades de datos, pero eso no me importa en este momento.

Mucha gente lo hace, por eso el trabajo de desempeño está en la hoja de ruta.

¿Cuáles son sus competidores?

Jison , Nearley

¿Quieres que siga creciendo o te gustaría que alguien creara la versión 2.0? Si actualmente es estable, ¿por qué no dejarlo así, quizás con un poco más de documentación?

Eso depende del nuevo mantenedor. Pero no me gustaría que PEG.js se estancara con el conjunto de funciones actual para siempre. Tiene más potencial que eso.

Hay muchas funciones útiles que se pueden agregar con relativa facilidad sin ningún cambio en el núcleo (# 30, # 38, # 107, # 45 y # 285). Luego hay algunos problemas / casos de uso de larga data que necesitarían repensar los conceptos centrales (# 11, # 217) o cambiar la API (# 327, # 430). Creo que vale la pena analizar todos estos.

Para la hoja de ruta, ¿qué le brinda la modernización del código? ¿Más rápido? más fácil de mantener? ¿O simplemente "actualizado"?

Más fácil de mantener y estar actualizado (lo que ciertamente es en parte una decisión de relaciones públicas; es malo cuando su proyecto parece viejo tecnológicamente, incluso si solo hay una diferencia marginal de productividad entre la tecnología antigua y la nueva).

Siento que la corriente es 1.0. Es muy estable, buenos mensajes de error, todas las funciones funcionan, etc. 1.0 del software no tiene que ser "el indicado". Eso es más 2.0, 3.0, etc.

Podría ser :-) Mi definición de 1.0 siempre fue “cuando estoy satisfecho con él”, que de alguna manera nunca llegó, en parte porque en lugar de trabajar en lo que más me molesta, terminé trabajando en cosas que más molestaban a los usuarios y cosas que estaban necesario para utilizar PEG.js en el mundo real. Mi naturaleza perfeccionista tampoco ayudó.

Depende del nuevo mantenedor definir 1.0.

https://github.com/futagoza/epeg.js 😊 (Cabe señalar que aunque la mayoría de las funciones enumeradas no están implementadas actualmente, pero en un momento u otro, han estado en alguna bifurcación o proyecto no relacionado, la mayoría de que nunca se pusieron en GitHub)

Estoy bien con todo, pero el único problema que tengo es mantener las pruebas 😞

@dmajda muchas gracias por PEG.js. Es muy útil. Espero que este proyecto siga vivo.

@futagoza Solo para aclarar, ¿su comentario significa que estaría interesado en mantener PEG.js? ¿O que crees que el futuro está en otra parte? :-)

Estoy bien con todo, pero el único problema que tengo es mantener las pruebas.

¿Qué problema exactamente?

@dmajda Sí, me interesaría mantenerlo 😄

Estoy bien con todo, pero el único problema que tengo es mantener las pruebas.

¿Qué problema exactamente?

Lo que quiero decir es que generalmente codifico y depuro a medida que avanzo, pero cuando intento hacer pruebas como las que tiene aquí, empiezo a tener problemas para mantenerlas, por lo que generalmente hago pruebas que me permiten ver el resultado final, o simplemente me voy las especificaciones y las pruebas comparativas para otros, aunque en retrospectiva, esto aumenta el tiempo de desarrollo para algunos proyectos 😆

@dmajda Actualmente estoy usando PEG.js como parte de mi proyecto de maestría. No solo es útil, sino interesante y genial trabajar con él. Realmente espero que consideres a alguien como el digno heredero de PEG.js.

@futagoza En la descripción del problema, escribí:

Estoy buscando a alguien que tenga un conocimiento profundo de cómo funcionan el análisis sintáctico y los generadores de analizadores sintácticos, una gran motivación, experiencia en el desarrollo de código abierto y una idea clara de dónde llevar el desarrollo de PEG.js (que puede coincidir o no con la hoja de ruta actual).

En su comentario, proporcionó solo un enlace a ePEG.js, que por sí solo no es suficiente para ver si se ajusta a la descripción anterior (excepto que la lista TODO de ePEG.js es una indicación de que probablemente tenga una idea de dónde liderar el desarrollo de PEG.js).

Supuse que quizás quieras dejar que tu trabajo y tu presencia en la web hablen por ti mismo, así que miré tu sitio web e hice clic en los enlaces de Twitter y LinkedIn, pero ambos estaban muertos, lo que no da la mejor impresión, como probablemente puedas. imagina. Después de eso, me di por vencido. En cuanto a ePEG.js, en su etapa actual es difícil tratarlo como mucho más que una lista de deseos.

Entonces, déjame hacerte algunas preguntas concretas:

  • ¿Cuál es tu experiencia? En particular, ¿cuál es su nivel de conocimiento sobre analizadores sintácticos y generadores de analizadores sintácticos? ¿De dónde obtuviste ese conocimiento?

  • ¿Cuál es su motivación para trabajar en PEG.js? En particular, ¿utiliza PEG.js (o ePEG.js) en sus proyectos personales o laborales? ¿Mantener PEG.js sería parte de su trabajo diario o lo haría en su tiempo libre?

  • ¿Cuál es su nivel de experiencia con proyectos de código abierto? En particular, ¿mantuvo o mantiene algún proyecto de código abierto comparable con PEG.js (principalmente en el número de usuarios)?

  • En su opinión, ¿cuáles son las 5 cosas principales que PEG.js no está haciendo actualmente o no está haciendo bien? Además, ¿podría describir dónde le gustaría llevar el proyecto? ¿Dónde te gustaría verlo en un año?

Gracias por responder estas preguntas. Ellos me ayudarán a decidir si usted será el futuro mantenedor adecuado de PEG.js.

así que miré su sitio web e hice clic en los enlaces de Twitter y LinkedIn, pero ambos estaban muertos

Ese sitio es una copia / pegado de mi antiguo sitio web que hice en 2010 cuando usé mi antiguo alias Vitron Prince, por lo que la mayoría de los enlaces ya no son válidos, o conducen a sitios / perfiles que ya no mantengo, mientras el sitio nunca se terminó correctamente. La única presencia online que realmente tengo hoy en día son GitHub y PlayStation 😆, principalmente por el hecho de que soy un cuidador a tiempo completo.


¿Cuál es tu experiencia? En particular, ¿cuál es su nivel de conocimiento sobre analizadores sintácticos y generadores de analizadores sintácticos? ¿De dónde obtuviste ese conocimiento?

Para resumir, aprendí por mi cuenta durante los últimos 5 años, aprendiendo sobre la tokenización de cadenas y búfer, varias formas de generar AST de una manera rápida pero precisa mientras realizaba algunas memorias y principalmente estudiaba varios métodos para transpilar de manera óptima otros lenguajes de computadora a JavaScript y C ++, que identifican pasadas que podrían comprimirse en una sola pasada para acelerar la compilación mientras se utilizan diferentes visitantes de AST para diferentes pasadas para obtener el mejor rendimiento.

En cuanto a los generadores de analizadores sintácticos, todo lo que sé lo aprendí al estudiar el generador de analizadores sintácticos para PEG.js y al saber que comparar números es más rápido que comparar cadenas, por lo que he preferido String#charCodeAt sobre String#charAt menos que la velocidad no sea un factor. Todavía tengo problemas para entender las partes relacionadas con la generación de un analizador usando options.optimize = "size" , pero debido a mi enfoque en speed with accuracy , nunca me motivé para estudiar esta parte de la generación del analizador.

También para tener en cuenta: aunque aprendí bastante, tengo problemas para recordar la terminología 😊


¿Cuál es su motivación para trabajar en PEG.js? En particular, ¿utiliza PEG.js (o ePEG.js) en sus proyectos personales o laborales? ¿Mantener PEG.js sería parte de su trabajo diario o lo haría en su tiempo libre?

Mi motivación para trabajar en PEG.js es desarrollar CXLang , además de hacer analizadores personalizados para varios archivos de recursos basados ​​en texto que

En lo que me estoy enfocando principalmente en desarrollar en este momento es (en orden de lo que debe ser funcional):

  • PEG.js o https://github.com/futagoza/epeg.js
  • https://github.com/cx-lang/cx-lang
  • Roxby, un motor de juego C ++ y SDK basado en Node.js para construir mundos 3D perfectos pero personalizables
  • Xross M, un sistema de modificación multiplataforma y agnóstico del juego
  • Xross C, una aplicación complementaria independiente del juego
  • Un clon de Minecraft, con enfoque en guardados multiplataforma para múltiples jugadores y multiplataforma
  • Un juego MMORPG, ambientado en un mundo enorme e interactivo a la perfección, que incorpora mundos de bolsillo
  • Una serie de juegos para un jugador basados ​​en los mismos mundos de bolsillo que aparecen en mi MMORPG

Cabe señalar que uso PEG.js en CXLang, Roxby y Xross, lo que actualmente hace que PEG.js sea una parte muy importante del desarrollo de mi juego, ya que me permite crear varios activos en texto sin formato y luego usar PEG.js y compiladores personalizados, transfórmalos en código nativo utilizado por cualquiera de los juegos, otros programas / herramientas o código de biblioteca.


¿Cuál es su nivel de experiencia con proyectos de código abierto? En particular, ¿mantuvo o mantiene algún proyecto de código abierto comparable con PEG.js (principalmente en el número de usuarios)?

No, como soy cuidador desde 2013, he pasado mi tiempo libre en videojuegos, dramas coreanos o trabajando en varios proyectos de C ++ / Node.js (principalmente los mencionados anteriormente), algunos de los cuales coloco en GitHub si Quiero compartir el código, otros que guardo en mi computadora portátil ya que contienen código para los proyectos personales que estoy desarrollando para crear productos comerciales en el futuro.

Aunque CXLang ya es de código abierto (más o menos, ya que varias partes de él aún no han llegado a GitHub debido al desarrollo continuo con pequeñas pruebas aquí y allá), solo planeo abrir Roxby y Xross de código abierto cuando haya desarrollado prototipos de trabajo para mis juegos).


En su opinión, ¿cuáles son las 5 cosas principales que PEG.js no está haciendo actualmente o no está haciendo bien? Además, ¿podría describir dónde le gustaría llevar el proyecto? ¿Dónde te gustaría verlo en un año?

  • Una razón para no hacer ePEG.js o alternativas 😛
  • El generador de código de bytes actual solo es útil con el generador de JavaScript actual

    • No debe ser parte de los pases del compilador, sino un ayudante opcional para los generadores.

    • Debe producir código de bytes y AST para ayudar a generar analizadores en cualquier idioma (plugin específico)

    • Según las opciones, genere un código de bytes opcional para guiar a los generadores de analizadores sintácticos

  • Las acciones y los literales de cadena dentro de la sintaxis gramatical de PEG.js restringen los generadores de analizadores sintácticos y los tipos de fuentes:

    • Un atributo ( <strong i="27">@returns</strong> ... o [returns = ...] ) que establece el tipo de retorno para las acciones utilizadas por las reglas

    • Sintaxis para la selección y extracción de secuencias = menos acciones y menos dependencia de un lenguaje específico

    • Soporte de búfer a través de literales numéricos, para desarrollar analizadores para archivos que no sean código fuente de texto sin formato

  • Sintaxis que permite un desarrollo más rápido de analizadores:

    • Plantillas para escribir menos gramática PEG.js

    • Atributos (predefinidos y personalizados) para administrar fácilmente la salida de pases internos o complementos

    • Importar reglas de otras gramáticas, lo que permite al desarrollador rastrear fácilmente las reglas por nombre de archivo

  • El sistema de complementos actual hace que sea más difícil cambiar la API y optimizar PEG.js para su uso en editores
  • El generador de analizador es demasiado complicado y no es compatible con complementos. Debe dividirse en diferentes archivos.

Actualmente, lo primero que lee sobre PEG.js (en el sitio web o en el repositorio de GitHub) es:

PEG.js es un generador de analizador simple para JavaScript que produce analizadores rápidos con excelentes informes de errores. Puede usarlo para procesar datos complejos o lenguajes de computadora y construir transformadores, intérpretes, compiladores y otras herramientas fácilmente.

Creo que resolver las razones anteriores no solo respaldaría lo que promete este párrafo, sino que también le daría al desarrollador más libertad para desarrollar analizadores sintácticos.

Para ser honesto, dado mi horario actual, no puedo ver dónde estaría en un año, pero mi hoja de ruta para PEG.js sería algo como esto:

  • __PEG.js v1__: ​​contiene la mayor parte de lo que describe su hito 0.11, pero con soporte para múltiples archivos
  • __PEG.js v1.x__ - Versión mantenida (LTS actual)
  • __PEG.js v2.x__: implemente la mayoría de las características anteriores, con código base escrito en ECMAScript 2015
  • __PEG.js v3.x__ - Lanzamiento de LTS
  • __PEG.js v4.x__ - Código base ECMAScript 2017, compatibilidad con búfer, nueva interfaz de complemento
  • __PEG.js v5.x__ - Lanzamiento de LTS
  • __PEG.js v6.x__ - Código base ECMAScript 20xx, estructuras de datos complejas , nuevo generador de analizador de JavaScript
  • __PEG.js v7.x__ - Lanzamiento de LTS
  • __PEG.js v8.x__ - Código base ECMAScript 20xx, más ayudantes y pases opcionales, soporte centrado en el editor
  • __PEG.js v9.x__ - Versión final de LTS, ECMAScript 20xx + código base

El motivo de esta hoja de ruta es ayudar a dividir mis tareas y los problemas del usuario más fácilmente, al mismo tiempo que me da espacio para aprender más sobre el generador de analizadores sintácticos y planificar una mejor interfaz de complementos, preparándome para __PEG.js v4.x__ y __PEG .js v6.x__

También para tener en cuenta @dmajda , si me hago cargo como mantenedor, eventualmente también estaría buscando más mantenedores, contribuyentes y moderadores que me ayuden a administrar diferentes aspectos para que pueda enfocarme en el desarrollo del proyecto, ya que ese es mi principal enfoque, dejando aspectos como la cuenta de Twitter y el Grupo de Google a los moderadores, obteniendo ayuda de los colaboradores para organizar y ayudarme a mantener los puntos de referencia y las pruebas , mientras que los mantenedores pueden ayudarme a administrar las versiones de LTS.

Estoy usando peg para escribir un analizador de rebajas, gracias 😀

Soy un desarrollador front-end y puedo mejorar el sitio web , ¿pueden invitarme a unirme a esta organización? ¡gracias!

@futagoza Primero, permítame disculparme por mi lenta respuesta; fue difícil para mí encontrar un período continuo de tiempo para leer lo que escribió, pensar en ello y redactar una respuesta durante la última semana.

Por lo que escribió, puedo ver que está bien motivado y que su calificación es sólida. Sus ideas sobre PEG.js también se alinean bien con lo que creo que son los mayores problemas de PEG.js, según lo perciben sus usuarios. Me gusta especialmente que le gustaría involucrar a más colaboradores; esta es un área en la que creo que fallé un poco como mantenedor.

Una cosa que me preocupa un poco es que le gustaría que se introdujeran muchas funciones, lo que puede provocar que las funciones se pierdan. Muchos usuarios de PEG.js valoran su simplicidad.

En cualquier caso, dado todo lo anterior y dado que nadie más está interesado en hacerse cargo de PEG.js, no veo una razón para no pasarle el mantenimiento de PEG.js.

Por la presente le declaro un nuevo mantenedor de PEG.js.

¡Felicidades!

Anunciaré el cambio en Twitter y en el Grupo de Google en un minuto. Luego, le enviaré un correo electrónico con detalles sobre la transferencia de los activos del proyecto. Una vez que se realiza la transferencia, me retiraré del proyecto por completo.

Espero que cuides bien de PEG.js y que el futuro en tus manos sea brillante :-)

Soy un desarrollador front-end y puedo mejorar el sitio web , ¿pueden invitarme a unirme a esta organización? ¡gracias!

@ericjjj Gracias por la oferta, esto depende de @futagoza ahora.

@futagoza 😂 Felicitaciones, soy un desarrollador front-end y puedo mejorar el sitio web , ¿pueden invitarme a unirme a esta organización? ¡gracias!

@dmajda Gracias 😄, y haré lo mejor que pueda.

También estaba preocupado por el avance de las funciones, por eso agregué el programa LTS a la hoja de ruta anterior, pero como mencioné anteriormente, esto aún no está escrito en piedra.

@ericjjj Gracias por la oferta m8 👍

Voy a repasar lo que más se necesita hacer, pero el sitio web ya está en mi lista de cosas para actualizar.

Una vez que finaliza el proceso de transferencia, y he realizado pequeñas actualizaciones en el sitio web para reflejar el cambio del mantenedor, planeo abrir un nuevo número en el repositorio del sitio web , donde repasaré lo que planeo cambiar, agregar o eliminar.

Cuando cree el problema, me aseguraré de mencionarlo para que sepa cuándo intervenir y mostrarme sus ideas y compartir sus pensamientos. Una vez que haya decidido a dónde ir con el sitio web, te invitaré si aún estás dispuesto a ayudarme 😆

@futagoza ok, muchas gracias 😀

Contribuiría si me añadieran a la organización

Podría armar algo para un tutorial paso a paso más grande. Un lenguaje muy básico, como JavaScript reducido a su núcleo, me habría ayudado a aprender a usar PEG.js. También saber cómo / la mejor manera de atravesar el AST era algo que tenía que encontrar en otra parte.

Los ejemplos van desde una pequeña calculadora hasta un analizador de JavaScript completo. Creo que sería bueno tener algo intermedio y un tutorial que lo acompañe.

Ejemplos de artículos que he escrito:
https://structura.quora.com/Extension-Methods-in-JavaScript

Entonces, @futagoza es el nuevo mantenedor de PEG.js.
Pero, ¿por qué el tema sigue abierto entonces?

Por cierto, ¡gracias por un proyecto tan bueno, chicos!
Uno de mis primeros programas fue el analizador de lenguaje Pascal escrito en C ++; fue muy difícil hacerlo funcionar: D
JavaScript + PEG.js hacen que esta tarea sea MUCHO más fácil

Y actualmente estoy usando este proyecto para crear un analizador bastante complicado para un lenguaje similar a bash (qmake pro-file), y ya enfrenté la falta de funcionalidad. Por ejemplo, falta de capacidad para dividir un archivo gramatical grande en varios pequeños.
¿Qué puedo hacer para ayudar con la implementación de tales cosas?

Pero, ¿por qué el tema sigue abierto entonces?

Solo me olvidé de cerrarlo. Haciendo eso ahora.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

emmenko picture emmenko  ·  15Comentarios

mreinstein picture mreinstein  ·  12Comentarios

mattkanwisher picture mattkanwisher  ·  5Comentarios

Coffee2CodeNL picture Coffee2CodeNL  ·  13Comentarios

StoneCypher picture StoneCypher  ·  8Comentarios