StructTypes encourage piracy

Aberta
#87 5 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
5/5
Tempo estimado
Mais de uma semana
Facilidade para iniciantes
25/100
Tipo de issue
Funcionalidade
Clareza
Razoavelmente clara
Status de atividade
Estagnada
Stack de tecnologia
julia

Direção de pesquisa

Revise os métodos de StructTypes.StructType e os métodos de JSON3 mencionados na issue e, em seguida, compare-os com o design proposto de AbstractEncoder. Determine se mapeamentos de structs específicos do encoder poderiam evitar type piracy sem quebrar os usuários existentes; considera-se concluído quando um design acordado para uma futura breaking release tiver sido produzido.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

Suppose I have a package, in which I need to serialize some data that contain a LongDNA{4}, but do not want to expose the private (non-documented) memory layout of LongDNA. In that case, I'd need to overwrite StructTypes.StructType(::Type{LongDNA{4}}) - or, alternatively, overwrite some JSON3 methods.

Both are type piracy, which can have rather bad consequences. For example, it's unknown to me if the user installs another package which also need to serialize LongDNA, but may choose to do it differently. In that case, my code may randomly malfunction.

I don't see a non-breaking way of getting around it, but perhaps it's worth considering for a potential breaking release in the future:

  • This package defines a struct AbstractEncoder end
  • Struct mapping is done by StructTypes.StructType(::AbstractEncoder, ::Type{MyType})
  • Default struct mapping can use ::AbstractEncoder directly.
  • Users can then subtype AbstractEncoder, and create struct mapping using their own subtype.
Linguagem predominante
Julia
Estrelas
86
Forks
22
Merge médio
1d 3h
PRs com merge (30d)
4

Preparar o ambiente

Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de JuliaData/StructTypes.jl

Todas as issues de JuliaData/StructTypes.jl

Issues semelhantes

Mais issues de Julia

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.