Add Option<&'static [u8]> method for header names
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 45/100
Direção de pesquisa
Comece localizando a representação do nome do cabeçalho e seu método as_bytes existente; em seguida, inspecione como os nomes de cabeçalho padrão são identificados. Adicione o método proposto para que nomes ASCII padrão possam expor bytes estáticos, enquanto outros nomes retornem None, e adicione testes cobrindo ambos os casos. Nenhum arquivo ou caminho de teste específico é mencionado na issue.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Description
This enhancement focuses on improving the usability of the http crate when integrating Rust HTTP libraries with other VM engines, such as V8 (specifically for, but not limited to Deno). The goal is to provide embedding users with a specific method that allows extracting a static 7-bit string from a well-known ASCII header name. By treating header strings as interned strings in scripting engines [1] [2], we can effectively reduce garbage collection pressure, leading to enhanced performance and efficiency.
To achieve this, we propose introducing an Option<&'static [u8]> method for header names. This approach offers a more efficient means of passing header names across embedding boundaries. When working with static ASCII header names, this method allows direct access to the header name bytes across embedding boundaries, without the need for additional memory allocation or garbage collection overhead.
This may also be useful for Python embedders [2], as (I believe) the CPython engine allows creation of strings from const 1-byte buffers.
Alternatives
While we do have an as_bytes method on a header name, this does not tell us the provenance of those bytes, and whether the header is a StandardHeader. We cannot use these as "externally interned" strings in an embedding context because they may be allocated.
The hash function of the header could be used allow us to map between standard headers and interned strings in the embedded engine, but this requires an additional string comparison operation.
References
[1] V8's NewExternalOneByte method:
[2] Python's PyUnicode_FromKindAndData method (which I believe will avoid copies where necessary):
https://docs.python.org/3/c-api/unicode.html#c.PyUnicode_FromKindAndData
- Linguagem predominante
- Rust
- Estrelas
- 1.4k
- Forks
- 387
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
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
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de hyperium/http
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
-
`Authority::from_static` does not perform adequate validationTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 52/100
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 45/100
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 62/100
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 58/100
Todas as issues de hyperium/http
Issues semelhantes
-
Windows docs: pin a tested ConPTY version for Kitty graphics; 1.25.260930003 corrupts large uploadsAberta
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 88/100
raphamorim/rio#2021 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
hydro-project/infinity#187 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 77/100
near/near-sdk-rs#1676 ·
Mantenedores costumam responder em até 2 dias
-
auto:producer auto:security
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 66/100
fritzprix/libr-agent#2595 ·
Mantenedores costumam responder em até 1 dia
-
area:fs type:fix
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
Tripstack-Corp/spyc#1002 ·
Mantenedores costumam responder em até 1 dia