Category Archives: Linguagens de Programação

Implementando malloc() e free() — dividindo blocos grandes

When implementing malloc(), it is important to consider the size of the allocated blocks. For example, reusing blocks too big for smaller requests cause memory waste. How to solve that? Let’s see on this post of our series on malloc() and free().

Implementando malloc() e free() — reduzindo ainda mais o heap

Este post faz parte de uma série sobre como implementar as funções malloc() e free(). No artigo anterior, aprendemos como reutilizar blocos de memória. Foi um grande avanço, mas há muito mais a melhorar. Um exemplo é a redução do tamanho do heap. Quando liberamos o último bloco de memória, movemos o topo do heap […]

Implementando malloc() e free() — reutilizando blocos de memória

Este post faz parte de uma série sobre como implementar as funções malloc() e free(). No artigo anterior, alteramos nossas funções para liberar alguns blocos de memória. Contudo, isto apenas ocorria se os blocos liberados fossem desalocados do mais novo ao mais antigo. Isto não faria muita diferença. Raramente a memória alocada dinamicamente se comporta […]

Implementando malloc() e free() — adicionando metadados aos blocos de memória

Este post faz parte de uma série sobre como implementar as funções malloc() e free(). Anteriormente, fizemos uma implementação são simplória que praticamente não libera memória nenhuma: um ponteiro aponta para o último bloco alocado, o que permite que abfree() o desaloque, mas somente ele. Uma opção melhor é fazer o último bloco apontar para […]

Implementando malloc() e free() — primeiros passos

Já imaginou como as funções malloc() e free() são implementadas? Tive a oportunidade de aprender um pouco sobre isso, é fascinante! Neste post, apresento os conceitos (e implementações) mais básicos.

Substituindo métodos de set-up por utilitários de teste

(Este é um post que publiquei no antigo blog da SEA Tecnologia. Como ainda é relevante, resolvi republicá-lo.) Uma das muitas aprendizagens que adquiri na antiga SEA Tecnologia é a criação de utilitários de teste. Utilitários de teste são uma maneira de reaproveitar código em testes unitários. Usualmente, isso é feito utilizando os métodos setUp […]

Importando Módulos ES6 em CommonJS

Aqui na Liferay, alguns dias atrás, necessitávamos utilizar o pacote p-map. Só tinha um problema: esta aplicação em específico utilizava módulos no padrão CommonJS, e p-map utiliza módulos ES6. Até algumas das melhores referências que encontrei (por exemplo, este post) deixavam claro que não seria possível importar módulos ES6 a partir de CommonJS. A boa […]

Dois problemas num Jenkinsfile

Já usei vários servidores Jenkins aqui na Liferay, sempre como desenvolvedor. Na Liferay Cloud, porém, configurar e rodar Jenkins é uma tarefa rotineira. Resolvi então reforçar meu conhecimento seguindo os passos de Guided Tour to Jenkins. Foi quando aconteceu uma coisa curiosa. O processo de build no Jenkins é definidos por arquivos Jenkinsfile. Um Jenkinsfile […]

Protected: Por que eu provavelmente não usaria Haskell em um projeto profissional

There is no excerpt because this is a protected post.

Não me Interprete Mal: Improvisando Testes para um Interpretador

Estou amando ler o livro Crafting Interpreters. Nele, Bob Nystrom nos ensina como escrever um interpretador implementando uma pequena linguagem de programação chamada Lox. Há muito tempo não me divertia tanto programando! Além de bem escrito, o livro é engraçado e ensina bem mais coisas do que eu esperava. Mas estou tendo um problema. Os […]