Pegjs: Procurando por um novo mantenedor

Criado em 7 mai. 2017  ·  20Comentários  ·  Fonte: pegjs/pegjs

Quando comecei o PEG.js há cerca de 7 anos, nunca pensei que seria um projeto tão bem-sucedido e que meu envolvimento com ele duraria tanto. Na maioria das vezes eu estava feliz trabalhando nisso, mas no último ano minha motivação começou a diminuir. Descobri que precisava me convencer a sentar e resolver os problemas ou escrever o código. Aos poucos, percebi que o PEG.js não é mais algo com que desejo gastar meu tempo. Como resultado, estou procurando um novo mantenedor do PEG.js.

Quem procuro?

Estou procurando alguém que tenha um profundo entendimento de como os geradores de análise e analisador funcionam, forte motivação, experiência com desenvolvimento de código aberto e uma ideia clara para onde conduzir o desenvolvimento do PEG.js (que pode ou não corresponder ao roteiro atual ). Nenhum desses é um requisito estrito, mas é improvável que entregarei o PEG.js a alguém com uma deficiência significativa nessas áreas.

Interessado?

Se você estiver interessado em assumir o PEG.js, adicione um comentário a este problema e inclua qualquer coisa que você acha que vai me convencer de que você é a pessoa certa :-) Vou revisar os comentários e anunciar o novo mantenedor durante o fim de semana de maio 13–14. Se nenhum mantenedor adequado aparecer até lá, o PEG.js ficará oficialmente sem manutenção.

Ativos transferidos

A transferência da manutenção envolve a transferência dos seguintes ativos:

O novo mantenedor precisará cuidar da hospedagem e da execução do site PEG.js , que atualmente está sendo executado em meu VPS pessoal. Espero que o novo mantenedor configure a hospedagem sob seu controle e reconfigure os registros DNS para o domínio pegjs.org para apontar para lá logo após a transferência do mantenedor. O novo mantenedor não terá acesso ao meu VPS pessoal nem vou continuar hospedando o site PEG.js lá indefinidamente.


Se você tiver dúvidas ou observações sobre qualquer coisa que escrevi acima, sinta-se à vontade para adicionar comentários a esta questão.

Comentários muito úteis

@dmajda muito obrigado pelo PEG.js. É muito útil. Espero que este projeto continue vivo.

Todos 20 comentários

Só quero dizer que comecei a usar o PEG.js nos últimos meses e adoro isso. A gramática é fácil de aprender e o número de conceitos é bastante baixo. A documentação é um pouco leve, mas encontrei tudo que preciso. Além disso, eu não teria começado meu dialeto JavaScript sem o exemplo javascript.pegjs. Isso reduziu consideravelmente a carga de trabalho.

No estado atual, quais são seus benefícios? Para mim, é muito fácil fazer um protótipo. A desvantagem é que pode ser lento para grandes quantidades de dados, mas não me importo com isso agora. Quais são seus concorrentes? Você quer que continue crescendo ou gostaria que alguém criasse a versão 2.0? Se atualmente está estável, por que não deixar por isso mesmo, talvez com um pouco mais de documentação.

Para o roteiro, o que a modernização do código oferece? Mais rápido? mais fácil de manter? Ou apenas "atualizado"? Posso entender o uso do Gulp em vez do Make para torná-lo mais fácil de manter. As limpezas parecem caras, quase 1.5, chamando a atual 1.0. Acho que "melhorar o desempenho significativamente" é uma meta muito grande para 1.0. Eu sinto que a corrente é 1.0. É muito estável, boas mensagens de erro, todos os recursos funcionam, etc. 1.0 do software não precisa ser "o único". Isso é mais 2.0, 3.0, etc.

Não sei se poderia ajudar na manutenção, mas gostaria de ver o site, grupo do Google, etc. ao vivo.

@mikeaustin Obrigado pelo seu comentário. Deixe-me responder rapidamente às suas perguntas (o que provavelmente será útil também para outras pessoas que estão examinando esse problema).

No estado atual, quais são seus benefícios? Para mim, é muito fácil fazer um protótipo.

A prototipagem tem sido o caso de uso dominante, junto com a análise de pequenas linguagens / DSLs que são muito complexas para regexps e várias ferramentas interativas. Originalmente, criei o PEG.js porque os PEGs ofereciam uma boa sintaxe gramatical e não havia um gerador de analisador JavaScript que o usava e também era capaz de produzir boas mensagens de erro.

A desvantagem é que pode ser lento para grandes quantidades de dados, mas não me importo com isso agora.

Muitas pessoas o fazem, é por isso que o trabalho de desempenho está no roteiro.

Quais são seus concorrentes?

Jison , Nearley

Você quer que continue crescendo ou gostaria que alguém criasse a versão 2.0? Se atualmente está estável, por que não deixar por isso mesmo, talvez com um pouco mais de documentação.

Isso depende do novo mantenedor. Mas eu não gostaria que o PEG.js estagnasse para sempre com o conjunto de recursos atual. Tem mais potencial do que isso.

Existem muitos recursos úteis que podem ser adicionados com relativa facilidade, sem quaisquer alterações no núcleo (# 30, # 38, # 107, # 45 e # 285). Então, existem alguns problemas / casos de uso de longa data que precisam ser repensados ​​nos conceitos básicos (# 11, # 217) ou alterar a API (# 327, # 430). Acho que vale a pena dar uma olhada em tudo isso.

Para o roteiro, o que a modernização do código oferece? Mais rápido? mais fácil de manter? Ou apenas "atualizado"?

Mais fácil de manter e estar atualizado (o que é parcialmente uma decisão de RP - é ruim quando seu projeto parece velho tecnologicamente, mesmo se houver apenas uma diferença marginal de produtividade entre a tecnologia antiga e a nova).

Eu sinto que a corrente é 1.0. É muito estável, boas mensagens de erro, todos os recursos funcionam, etc. 1.0 do software não precisa ser "o único". Isso é mais 2.0, 3.0, etc.

Pode ser :-) Minha definição de 1.0 sempre foi "quando estou satisfeito com isso", o que de alguma forma nunca veio - em parte porque em vez de trabalhar em coisas que mais me incomodavam, acabei trabalhando em coisas que mais incomodavam os usuários e coisas que eram necessário usar PEG.js no mundo real. Minha natureza perfeccionista também não ajudou.

Cabe ao novo mantenedor definir 1.0.

https://github.com/futagoza/epeg.js 😊 (Deve-se notar que, embora a maioria dos recursos listados não estejam implementados atualmente, mas em um ponto ou outro, estiveram em alguma bifurcação ou projeto não relacionado, a maioria dos que nunca foram colocados no GitHub)

Estou bem com tudo, mas o único problema que tenho é a manutenção dos testes 😞

@dmajda muito obrigado pelo PEG.js. É muito útil. Espero que este projeto continue vivo.

@futagoza Só para esclarecer, seu comentário significa que você estaria interessado em manter o PEG.js? Ou que você acha que o futuro está em outro lugar? :-)

Estou bem com tudo, mas o único problema que tenho é a manutenção dos testes

Qual problema exatamente?

@dmajda Sim, estou interessado em mantê-lo 😄

Estou bem com tudo, mas o único problema que tenho é a manutenção dos testes

Qual problema exatamente?

O que quero dizer é que normalmente codifico e depuro conforme prossigo, mas quando tento fazer testes como você fez aqui, começo a ter problemas para mantê-los, então geralmente faço testes que me permitem ver o resultado final ou apenas saio as especificações e testes de benchmark para outros, embora em retrospectiva isso aumente o tempo de desenvolvimento para alguns projetos 😆

@dmajda Atualmente, estou usando PEG.js como parte do meu projeto de MSc. Não é apenas útil, mas interessante e legal de se trabalhar. Eu realmente espero que você considere alguém como um herdeiro digno do PEG.js.

@futagoza Na descrição do problema, escrevi:

Estou procurando alguém que tenha um profundo entendimento de como os geradores de análise e analisador funcionam, forte motivação, experiência com desenvolvimento de código aberto e uma ideia clara para onde conduzir o desenvolvimento do PEG.js (que pode ou não corresponder ao roteiro atual).

Em seu comentário, você forneceu apenas um link para ePEG.js, o que por si só não é suficiente para ver se você se encaixa na descrição acima (exceto que a lista TODO de ePEG.js é uma indicação de que você provavelmente tem uma ideia para onde liderar o desenvolvimento do PEG.js).

Achei que você gostaria de deixar seu trabalho e presença na web falar por você, então olhei para seu site e cliquei nos links do Twitter e LinkedIn, mas ambos estavam mortos - o que não dá a melhor impressão, como você provavelmente pode Imagine. Depois disso, desisti. Quanto ao ePEG.js, em seu estágio atual é difícil tratá-lo como muito mais do que uma lista de desejos.

Então, deixe-me fazer algumas perguntas concretas:

  • Quais são os seus antecedentes? Em particular, qual é o seu nível de conhecimento sobre analisadores e geradores de analisadores? Onde você obteve esse conhecimento?

  • Qual é a sua motivação para trabalhar no PEG.js? Em particular, você usa PEG.js (ou ePEG.js) em seus projetos pessoais ou de trabalho? Manter o PEG.js faria parte do seu trabalho diário ou você o faria no seu tempo livre?

  • Qual é o seu nível de experiência com projetos de código aberto? Em particular, você manteve ou manteve algum projeto de código aberto comparável ao PEG.js (principalmente no número de usuários)?

  • Quais são, na sua opinião, as 5 principais coisas que o PEG.js está faltando ou não está fazendo certo? Além disso, você poderia descrever para onde gostaria de levar o projeto? Onde você gostaria de ver em um ano?

Obrigado por responder a essas perguntas. Eles me ajudarão a decidir se você seria o futuro mantenedor correto do PEG.js.

então olhei para o seu site e cliquei nos links do Twitter e LinkedIn, mas ambos estavam mortos

Esse site é uma cópia / colagem do meu antigo site que fiz em 2010 quando usei meu antigo apelido Vitron Prince, então os links em sua maioria não são mais válidos ou levam a sites / perfis que não mantenho mais, enquanto o site nunca foi concluído corretamente. A única presença on-line que realmente tenho hoje em dia é o GitHub e o PlayStation 😆, principalmente pelo fato de ser cuidador em tempo integral.


Quais são os seus antecedentes? Em particular, qual é o seu nível de conhecimento sobre analisadores e geradores de analisadores? Onde você obteve esse conhecimento?

Para resumir, aprendi sozinho nos últimos 5 anos, aprendendo sobre string e tokenização de buffer, várias maneiras de gerar AST de maneira rápida, mas precisa, enquanto realizava memoização e, principalmente, estudava vários métodos para transpilar de forma otimizada outras linguagens de computador para JavaScript e C ++, identificando passes que poderiam ser compactados em um único passe para acelerar a compilação ao usar diferentes visitantes AST para passes diferentes para o melhor desempenho.

Quanto aos geradores de analisador, tudo que sei foi aprendido estudando o gerador de analisador para PEG.js, bem como com o conhecimento de que comparar números é mais rápido do que comparar strings, então preferi String#charCodeAt a String#charAt menos que a velocidade não seja um fator. Eu ainda tenho problemas para entender as partes relacionadas à geração de um analisador usando options.optimize = "size" , mas devido ao meu foco em speed with accuracy , eu nunca realmente ganhei a motivação para estudar esta parte da geração do analisador.

Também a notar: embora tenha aprendido bastante, tenho dificuldade em lembrar a terminologia 😊


Qual é a sua motivação para trabalhar no PEG.js? Em particular, você usa PEG.js (ou ePEG.js) em seus projetos pessoais ou de trabalho? Manter o PEG.js faria parte do seu trabalho diário ou você o faria no seu tempo livre?

Minha motivação para trabalhar em PEG.js é desenvolver CXLang , bem como fazer analisadores personalizados para vários arquivos de recursos baseados em texto que irei usar em meus jogos, então eu diria que estou usando para projetos pessoais e de trabalho. manter PEG.js, assim como ePEG.js, seria principalmente no meu tempo livre.

O que estou mais focado em desenvolver agora é (na ordem do que precisa ser funcional):

  • PEG.js ou https://github.com/futagoza/epeg.js
  • https://github.com/cx-lang/cx-lang
  • Roxby, um motor de jogo C ++ e SDK baseado em Node.js para construir mundos 3D perfeitos, mas personalizáveis
  • Xross M, uma plataforma cruzada e sistema de mod agnóstico de jogo
  • Xross C, um aplicativo complementar independente de jogos
  • Um clone do minecraft, com foco em salvamentos em plataforma cruzada, multijogador e multiplataforma
  • Um jogo MMORPG, ambientado em um mundo totalmente interativo e enorme, incorporando mundos de bolso
  • Uma série de jogos para um jogador baseados nos mesmos mundos de bolso apresentados no meu MMORPG

Deve-se notar que eu uso PEG.js no CXLang, Roxby e Xross, o que atualmente torna o PEG.js uma parte muito importante do meu desenvolvimento de jogos, pois me permite criar vários ativos em texto simples, e então usar PEG.js e compiladores personalizados, transformando-os em código nativo usado por qualquer um dos jogos, outros programas / ferramentas ou código de biblioteca.


Qual é o seu nível de experiência com projetos de código aberto? Em particular, você manteve ou manteve algum projeto de código aberto comparável ao PEG.js (principalmente no número de usuários)?

Não, como sou cuidador desde 2013, passei meu tempo livre em videogames, dramas coreanos ou trabalhando em vários projetos C ++ / Node.js (principalmente os mencionados acima), alguns dos quais coloco no GitHub se eu quero compartilhar o código, outro que mantenho no meu laptop, pois contém código para os projetos pessoais que estou desenvolvendo para criar produtos comerciais no futuro.

Embora o CXLang já seja de código aberto (mais ou menos, já que várias partes dele ainda não chegaram ao GitHub devido ao desenvolvimento contínuo com pequenos testes aqui e ali), eu só planejo abrir o código-fonte Roxby e Xross quando tiver desenvolvido protótipos de trabalho para meus jogos).


Quais são, na sua opinião, as 5 principais coisas que o PEG.js está faltando ou não está fazendo certo? Além disso, você poderia descrever para onde gostaria de levar o projeto? Onde você gostaria de ver em um ano?

  • Uma razão para não fazer ePEG.js ou alternativas 😛
  • O gerador de bytecode atual só é útil com o gerador de JavaScript atual

    • Não deve ser parte das passagens do compilador, mas um auxiliar opcional para geradores

    • Deve produzir bytecode e AST para ajudar a gerar analisadores em qualquer linguagem (plug-in específico)

    • Com base nas opções, gere bytecode opcional para orientar os geradores de analisador

  • Ações e literais de string dentro da sintaxe da gramática PEG.js restringem geradores de analisador e tipos de fonte:

    • Um atributo ( <strong i="27">@returns</strong> ... ou [returns = ...] ) que define o tipo de retorno para ações usadas por regras

    • Sintaxe para seleção e extração de sequência = menos ações e menos dependência de linguagem específica

    • Suporte de buffer por meio de literais numéricos, para desenvolver analisadores para arquivos que não sejam o código-fonte de texto simples

  • Sintaxe que permite um desenvolvimento mais rápido de analisadores:

    • Modelos para escrever menos gramática PEG.js

    • Atributos (predefinidos e personalizados) para gerenciar facilmente a saída de passes internos ou plug-ins

    • Importar regras de outras gramáticas, permitindo ao desenvolvedor rastrear regras facilmente por nome de arquivo

  • O sistema de plug-ins atual torna mais difícil mudar a API e otimizar PEG.js para uso em editores
  • O gerador do analisador é muito complicado e não é amigável a plug-ins. Deve ser dividido em arquivos diferentes.

Atualmente, a primeira coisa que você lê sobre PEG.js (no site ou no repositório GitHub) é:

PEG.js é um gerador de analisador simples para JavaScript que produz analisadores rápidos com excelente relatório de erros. Você pode usá-lo para processar dados complexos ou linguagens de computador e construir transformadores, intérpretes, compiladores e outras ferramentas facilmente.

Eu acredito que resolver os motivos acima não apenas apoiaria o que este parágrafo promete, mas também daria ao desenvolvedor mais liberdade no desenvolvimento de analisadores.

Para ser honesto, dada minha programação atual, não consigo ver onde estaria em um ano, mas meu roteiro para PEG.js seria algo assim:

  • __PEG.js v1__ - Contém a maior parte do que seu marco 0.11 descreve, mas com suporte a vários arquivos
  • __PEG.js v1.x__ - Versão mantida (LTS atual)
  • __PEG.js v2.x__ - Implementar a maioria dos recursos acima, com base de código escrita em ECMAScript 2015
  • __PEG.js v3.x__ - versão LTS
  • __PEG.js v4.x__ - base de código ECMAScript 2017, suporte de buffer, nova interface de plug-in
  • __PEG.js v5.x__ - versão LTS
  • __PEG.js v6.x__ - base de código ECMAScript 20xx, estruturas de dados complexas , novo gerador de analisador JavaScript
  • __PEG.js v7.x__ - versão LTS
  • __PEG.js v8.x__ - base de código ECMAScript 20xx, mais ajudantes e passes opcionais, suporte focado no Editor
  • __PEG.js v9.x__ - versão LTS final, ECMAScript 20xx + base de código

A razão para este roteiro é ajudar a dividir minhas tarefas e problemas do usuário mais facilmente, ao mesmo tempo que me dá espaço para aprender mais sobre o gerador de analisador, bem como planejar uma interface de plug-in melhor, me preparando para __PEG.js v4.x__ e __PEG .js v6.x__

Também para observar @dmajda , se eu assumir como mantenedor, eventualmente também estarei procurando por mais mantenedores, contribuidores e moderadores para me ajudar a gerenciar diferentes aspectos para que eu possa me concentrar no desenvolvimento do projeto, já que esse é o meu principal foco, deixando aspectos como a conta do o Grupo do Google para os moderadores, obtendo ajuda de colaboradores para organizar e me ajudar a manter benchmarks e testes , enquanto os mantenedores podem me ajudar a gerenciar lançamentos LTS.

Estou usando o peg para escrever um analisador de markdown, obrigado 😀

Eu sou um desenvolvedor front-end e posso melhorar o site , você pode me convidar para ingressar nesta organização? obrigada!

@futagoza Em

Pelo que você escreveu, posso ver que está bem motivado e que sua qualificação é sólida. Suas ideias sobre o PEG.js também se alinham bem com o que considero os maiores problemas do PEG.js, conforme percebido por seus usuários. Eu gostaria especialmente que você gostaria de envolver mais contribuidores - esta é uma área onde eu acho que falhei um pouco como mantenedor.

Uma coisa que me preocupa é que você gostaria de ver muitos recursos introduzidos, o que pode levar ao deslocamento de recursos. Muitos usuários do PEG.js valorizam sua simplicidade.

Em qualquer caso, dado tudo o que foi dito acima e visto que ninguém mais está interessado em assumir o PEG.js, não vejo razão para não passar a manutenção do PEG.js para você.

Declaro você um novo mantenedor do PEG.js.

Parabéns!

Anunciarei a mudança no Twitter e no Grupo do Google em um minuto. Então, enviarei a você um e-mail com detalhes sobre a transferência de ativos do projeto. Assim que a transferência for concluída, desistirei completamente do projeto.

Espero que cuide bem do PEG.js e que o futuro dele em suas mãos seja brilhante :-)

Eu sou um desenvolvedor front-end e posso melhorar o site , você pode me convidar para ingressar nesta organização? obrigada!

@ericjjj Obrigado pela oferta, agora cabe a

@futagoza 😂 Parabéns, sou um desenvolvedor front-end e posso melhorar o site , vocês podem me convidar para ingressar nesta organização? obrigada!

@dmajda Obrigado 😄, e farei o meu melhor.

Eu também estava preocupado com o deslocamento de recursos, é por isso que adicionei a programação LTS ao roteiro acima, mas como mencionei acima, isso ainda não está definido em pedra.

@ericjjj Obrigado pela oferta m8 👍

Vou repassar o que mais precisa ser feito, mas o site já está na minha lista de coisas a serem atualizadas.

Assim que o processo de transferência for concluído e eu tiver feito pequenas atualizações no site para refletir a mudança do mantenedor, planejo abrir um novo problema no repositório do site , onde examinarei o que pretendo alterar, adicionar ou remover.

Quando eu criar o problema, com certeza mencionarei você, para que saiba quando entrar e me mostrar suas ideias e compartilhar suas ideias. Depois de decidir aonde ir com o site, vou convidá-lo se ainda estiver disposto a me ajudar 😆

@futagoza ok, muito obrigado 😀

Eu contribuiria se fosse adicionado à organização

Eu poderia montar algo para um tutorial passo a passo maior. Uma linguagem muito básica, como JavaScript reduzido ao seu núcleo, teria me ajudado a aprender como usar o PEG.js. Também saber como / a melhor maneira de atravessar a AST foi algo que eu tive que encontrar em outro lugar.

Os exemplos vão desde uma pequena calculadora até um analisador JavaScript completo. Acho que seria bom ter algo no meio e um tutorial para acompanhar.

Artigos de exemplos que escrevi:
https://structura.quora.com/Extension-Methods-in-JavaScript

Portanto, @futagoza é o novo mantenedor do PEG.js.
Mas por que a questão ainda está aberta então?

BTW, obrigado por um projeto tão bom, pessoal!
Um dos meus primeiros programas foi o analisador de linguagem Pascal escrito em C ++ - era tão difícil fazer funcionar: D
JavaScript + PEG.js tornam essa tarefa MUITO mais fácil

E atualmente estou usando este projeto para criar um analisador bem complicado para linguagem bash-like (qmake pro-file), e já enfrentei a falta de funcionalidade. Por exemplo, ausência da capacidade de dividir um grande arquivo de gramática em vários pequenos.
O que posso fazer para ajudar na implementação dessas coisas?

Mas por que a questão ainda está aberta então?

Eu apenas esqueci de fechá-lo. Fazendo isso agora.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

brettz9 picture brettz9  ·  8Comentários

emmenko picture emmenko  ·  15Comentários

futagoza picture futagoza  ·  6Comentários

marek-baranowski picture marek-baranowski  ·  6Comentários

futagoza picture futagoza  ·  13Comentários