nSenses Core Engine

Após algum tempo de estudo e desenvolvimento decidi anunciar a o núcleo da nSenses Engine, chamado de nSenses Core. Vamos falar um pouco das características já desenvolvidas e testadas que estão presentes na versão atual da biblioteca.

  • Algorithms

Contém implementações de diferentes tipos de algoritmos para gerar números aleatórios e hash de strings e dados.

  • Collections

As coleções fornecidas com a biblioteca server tanto como uma substituições como uma adições aos contêineres comuns na STL. Infelizmente, algumas das coisas cruciais no desenvolvimento de jogos o gerenciamento de memoria são tratados de forma diferente na STL. Além disso, as implementações da STL entre plataformas e compiladores diferem uma das outras, tornando difícil às vezes usar contêineres da STL como membros de classes ao fazer a interface com o código de terceiros.

  • Configuration

Contém as classes para gerenciar vários tipos de configurações e oferece uma maneira fácil de declarar e definir variáveis configuráveis usando apenas uma linha de código. Essas variáveis podem ser usadas, apena com tipos de dados comuns,  oferecem suporte para restringir seus valores em um determinado intervalo e para iterar através de todas as variáveis registradas. Além disso, cada variável pode ser acessada por nome e armazena uma descrição, tornando-os muito uteis para os consoles e sistemas de scripts.

  • Diagnostics

A maioria das classes fornecidas pelo diagnóstico servem ao usuário como uma forma de detecção de erros, que vão desde manipuladores de exceção a uma implementação de assert personalizada. Todas as funcionalidades são específicas para cada plataforma e utilizam recursos específicos do sistema operacional e do hardware.

  • Storage

Oferece um sistema de arquivos completo com suporte para diferentes dispositivos de arquivos, operações assíncronas e muito mais. O sistema de arquivo é responsável pela abertura e fechamento de arquivos, montagem de dispositivos de arquivos e outras operações relacionadas a arquivos.

  • Logging

O sistema de registro personalizado dá suporte a qualquer número de variáveis de registro, diferentes níveis de verbosidade e é altamente extensível pois utiliza uma abordagem baseada em políticas para sua implementação de logger. Um conjunto de macros de acompanhamento auxilia o sistema de registro simplificando as chamadas de log.

  • Memory

O sistema de memória é baseado em arenas de memórias e utiliza uma abordagem baseada em políticas para a implementação destas arenas. Essas arenas podem ser personalizadas combinando alocadores com diferentes utilitários de depuração, como rastreador de memória. Isso dá ao usuário controle completo sobre como e quando a memória é alocada. Um conjunto de macros personalizadas ajuda na alocação de memória para as chamadas arenas de memória.

Portanto, o sistema de memória aloca memória somente usando uma arena de memória que pode ser configurada pelo usuário. A arena de memória básica consiste nas seguintes partes:

  • Um alocador responsável pela alocação de memória.
  • Uma política de verificação de limites.
  • Uma política de marcação de memória.
  • Uma política de monitoramento de memória.
  • Uma política de multitarefa.
  • Preprocessor

Os pre-processadores são úteis para a geração de códigos complexos em tempo de compilação. Eles podem lidar facilmente com determinadas partes de código que necessitem de uma complexidade. Além disso, ele fornece facilidades que aliviam a carga de escrever macros mais complicadas por causa de coisas não incluídas no padrão C e C++, como contar número de argumentos passados em templates.

  • Profiling

Oferece uma facilidade de genérica de criação de perfis para ser usada como instrumentação de código fonte. As facilidades fornecidas vão além de capturar apenas estatísticas de desempenho. Usando diferentes políticas de criação de perfis, as classes fornecidas podem ser usadas para medir desempenho, alocações de memória, estatística de usuário e muito mais. Além disso, os dados capturados podem ser transformados de qualquer forma adequada, para que possa ser usado por diferentes visualizadores sem ter que capturar os dados em si vária vezes.

  • Strings

As funções fornecidas neste módulo servem como base comum para outras classes e fornecem invólucros em torno das funcionalidades do C e C++ padrão e específicas da plataforma, com por exemplo: a pesquisa sensível a maiúsculas e minúsculas . Além disso, as classes fornecidas oferecem novas formas de lidar com situações difíceis frequentemente encontradas em programação de jogos, como identificação de recursos por meio de uma sequência de caracteres hash, análise e separação de texto entre outros.

  • Threading

Fornece abstrações para threads e funcionalidades específicas do compilador e sistema operacional. As classes desta biblioteca fornecem uma abstração consistente de baixo nível para as funcionalidades necessárias na programação multitarefa que não são padronizadas em C++, como threads, fibers, sincronizações primitivas, variáveis atômicas, armazenamento local de thread entre outras coisas específicas do compilador ou sistema operacional.

Os recursos acima descritos são os principais recursos que a nSenses Core possui em sua implementação. Toda a biblioteca é desenvolvida em C++ e atualmente a biblioteca é suportada apenas pela plataforma windows, mais pode ser facilmente portada para novas plataformas.

Espero que tenha gostado e continue acompanhando o blog.