Kit de componentes de abstração do sistema de sacos.
Libuv, Libsdl, GKT, Qt, ... apenas nenhum deles em um. Principalmente extensões para C para listas, pilhas, filas, com e sem mecanismos de bloqueio. Diagnósticos de memória construídos para identificar/subfluir ou usar (gravar) após gratuitamente; Notificações de eventos do sistema de arquivos em uma API padrão, threads simples, redes baseadas em eventos que funcionam em threads em segundo plano, HTTP, WebSocket, JSON, JSON6, JSOX Parsers, XML Parser exportado; Wrapper Comum SQLITE/ODBC que simplifica a conexão e o uso do banco de dados; Biblioteca numérica de fração simples, biblioteca vetorial, procedimento e sistema de registro de funções que podem registrar funções ou tabelas de interface para o módulo de biblioteca intercomunicação em sistemas travestos complexos; Abstração do sistema de arquivos e interface do sistema de arquivos virtual.
O que não é? Não é por si só um sistema operacional, não possui carregadores de tarefas e a própria alocação de processos; A memória é solicitada ao sistema e gerenciada para o código, a memória pode ser compartilhada entre as procedas.
Um documento publicado no Header Document Information - http://sack.sf.net (https://sourceforge.net/projects/sack/)
O Git geralmente está mais atualizado. O GIT é o principal sistema de controle da fonte de desenvolvimento. O mercurial não é mais usado. (Sourceforge Obsolete)
Monotone teria sido melhor; mas; Bem ... talvez eles estivessem muito fechados.
C Pacotes de fonte única. Fontes compiláveis C/C ++ e um único cabeçalho. Links para Rellavent Docs em cada projeto ...
Exposto através da interop a V8 através do Node.js ...
Ambos os projetos são construídos com a mesma fonte - um cmakelists separado é usado para criar a versão da GUI, usando uma versão do Sack retirada do GitHub; em vez da amalgamação incluída.
O Git não permite salvar ganchos muito bem - mas os submódulos são uma espécie de dor. Isso tem migrado para usar submódulos Git; que para facilidade requer ganchos. A configuração de uma configuração para onde os ganchos são carregados para isso ajudarão.
Os ganchos em .githooks neste repositório tentarão encadear qualquer ganchos existentes copiados a partir de modelos que você configurou.
# git config --global core.hookPath .githooks
# git clone git://github.com/d3x0r/sack
# cd sack
# mkdir build # could be mkdir sack/build instead
# cd build
# cmake ../cmake_all -DCMAKE_BUILD_TYPE=Debug
### alternatively, you can just build the sack core
# cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=output
### and later build binary specifically
# cd ..
# mkdir sack-binary-build
# cd sack-binary-build
# cmake ../binary -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=output -DSACK_SDK_ROOT_PATH=../build/output
O nome cmake_build_type (release/debug/relwithdebinfo/minrel) é usado para gerar diretórios de _solution e _out. Se você usar 'Debug', os diretórios serão 'Debug_solution' etc. Cada projeto é instalado em sua pasta relacionada ao <bilt_type> _out.
ccmake ou cmake-gui podem ser usados para configurar opções para compilação. Ele faz um bom trabalho de adivinhação com base no sistema, mas às vezes há coisas que você gostaria de mudar.
As configurações de configuração do Global has BUILD_EXTRAS , que criarão mais aplicativos em sacos que são mais baixos ou para testar ou profundamente no desenvolvimento.
Configuração do SACK ..._ Solução/Projeto Core tem muitas opções, como o uso de PNG/JPEG/ZLIB, ou versões do sistema. O mesmo com SQLite. Pode permitir que no_odbc desative a dependência das bibliotecas ODBC ... muito mais.
(Linux) UNIXODBC (Opções de CMake usando CCMake no núcleo pode desativar essa dependência);
(OpenSSL?)/Libressl (Libressl 3.2.1 (mais recente) incluído)
Peças da GUI (nomes de pacotes do Ubuntu, podem diferir para outros sistemas)
ffmpeg pode ser usado por alguns do código para gerar players de streaming de vídeo/áudio. O módulo de interface do FFMPEG carrega dinamicamente o ffmpeg.dll, que deve estar disponível para Windows no repositório; ou pode ser construído ...
Consegui construir com WSL 2; (WSL - -Instalação). e Arch Linux Image (https://github.com/yuk7/archwsl); assumindo
Pacman -S faz diffutils mingw-w64-gcc
E talvez Mingw-W64-PKG-Config (AUR) Mingw-W64-Ambiente (AUR) Mingw-W64-Cmake (AUR)
git clone https://github.com/FFmpeg/FFmpeg.git
cd FFmpeg
mkdir build
../configure --arch=x86_64 --target-os=mingw32 --cross-prefix=x86_64-w64-mingw32- --prefix=output --enable-shared --disable-static
Geralmente, esta é uma grande coleção de pequenas coisas. Ele compila para C/C ++. É uma biblioteca, com alguns programas de suporte/utilitário; Esse é o núcleo; Existem vários tipos mais autônomos incluídos. Ele fornece abstrações entre Windows e Posix e até vários sabores de Posix, como Linux, Android, Mac, et al. É SDL (mais ou menos), é BusyBox, mas não na verdade. É GTK (STEA), é STL (pilhas, listas, fila, constainers, genéricos, ...), ele pode confiar em quase nada da biblioteca C.
No começo, havia um programa de terminal serial do DOS. Foi escrito em C. Havia obviamente os tipos básicos de contêineres ausentes, então basicamente toda estrutura era uma nova implementação de algo antigo; Mas era conciso e não tinha coisas extras que não "precisava" no caso de uma classe genérica que pode fornecer coisas que não são utilizadas, exceto em casos específicos. Isso realmente tinha tópicos; Ele tinha várias pilhas de instrução na Vairous States que poderia renunciar a tempo.
Ele evoluiu para um sistema operacional proprietário chamado NIPC (New Inter Process Communications), que não apenas tinha threads, mas poderia carregar arquivos DOS .exe como processos nos threads (não apenas arquivos .com). Essa alocação de memória gerenciada, acesso a exibição, acessos de disco e tempo da CPU de maneira redonda-robina. No começo, não havia sono, mas os tópicos posteriores poderiam se afastar para nem sequer ser acordado. Em um 386-25, obteve a Aound 1500 Cycles por segundo. Mas a maior parte de seu trabalho real foi no manuseio de interrupções, comunicando -se com algum outro sistema.
Depois, houve o Windows 3.1 ... e o NT 3.51 por um curto período de tempo até o NT4 ser lançado. Então agora todo o controle de roscas personalizado era bastante obsoleto, mas esse alocador, isso foi muito bom. E houve muito desenvolvimento de tubos/filas de memória compartilhados/etc e soquetes. Havia soquetes no NIPC também; Escrito como uma pilha UDP/TCP/IP, para uma placa de rede que foi escrita diretamente; É claro que a API foi baseada no evento, porque eu realmente não conhecia nenhum outro tipo de método para lidar com a rede. É claro que havia soquetes Berkley, e eles me disseram que eu deveria implementar essa API, e estava muito complicado ... eu tenho que sentar e esperar pelos dados?
Depois, havia a internet, havia vida como eremita, cantando para quem não seria pego e doendo daquele que mudou as fechaduras, e havia 'Vurt'.
Havia muitas mexendo em pequenas coisas aqui e ali me divertindo com os blasters de som e 3dfx (deslize). Alguns algoritmos de geometria construtiva que funcionam muito bem para sólidos convexos ...
Então, aqui o núcleo realmente se formou como uma coisa própria. Foram os tipos (texto, listas, pilhas, filas, ...), o alocador de memória (que possui uma operação de hold () que permite que esse bloco de memória seja mantido depois que o proprietário o libera.) Que também é envolvido na alocação de montes personalizados da memória compartilhada entre os processos; Isso e usar um pilheiro com backup de arquivo como uma memória persistente que pode ser recarregada e o programa de retomado em seu estado de memória existente. E rede fixa; transformando o que estava pesquisando em eventos. O trabalho em rede evoluiu muito desde os dias no início do uso de um waitformuitpleObjects (), afinal, não são 64 soquetes o suficiente para ninguém? (Não, 2000 clientes que conectam tem problemas com isso com 80% de falha). Nessa época, as camadas de interface gráfica foram iniciadas. Inspirado por Allegro, e levando sua estrutura ImageFile_tag {} inicialmente, implementou rotinas dedicadas de caminho de cor de 32 bits. Allegro teve apoio para todos os tipos de tipos de pixels, que, o mais rápido que eram, ainda foi retardado chamando os ponteiros de função indireta. Por um tempo, eu tive versões de montagem de algumas das rotinas de cópia e linha de bloco, sabores ASM e MMX. Quando a SSE foi lançada, os compiladores estavam fazendo um bom trabalho ao otimizar o C, e os computadores eram mais rápidos, que o que já era muito rápido era muito mais rápido, que a manutenção da Assmeica para várias plataformas/compiladores o obsoleto. Depois de ter imagens para as quais você pode desenhar, é apenas uma questão de fazer com que o sistema as mostre, então uma interface do Windows foi feita, com a intenção de apenas o Linux Framebuffer (que nunca foi muito rápido).
Portanto, dada isso como uma plataforma, a Dekware como aplicativo baseada no saco assumiu a forma e eventualmente se manifestou; Servindo como um acessório de teste para a biblioteca.
Portanto, havia uma única biblioteca de imagens e biblioteca de renderização, então eles foram embalados em um pacote grande. (CMake ainda tem opções Build_monolithic, que provavelmente está bastante quebrado agora). Na época, eu estava tocando muita lama usando o Dekware (até o suporte de dekware para alguém que estava correndo no FreeBSD, com o não-GNU faz; que dor que era ... eu mencionei, naquela época eu estava usando o Make e tinha muitos sabores de makefiles para muitos sistemas?) ... de qualquer maneira, essa é realmente a origem do saco; Antes disso, era apenas "comum" após o padrão que eu havia aprendido no meu trabalho anterior. Um saco é uma bolsa grande. Uma bolsa pode segurar como 5 sacos, mas um saco pode segurar 25 sacos. Uma bolsa é um grupo agregado básico, ou um sub-módulo ... uma peça que por si só poderia ser omitida e não afetar mais nada; e o saco contém muitas sacolas.
Então, houve um novo emprego, construindo um novo software, e eu pude aproveitar o Sack e criar aplicativos muito rapidamente, o que seria executado no Windows ou Linux com o mesmo código e nenhum #ifdef's. Desenvolvi a camada MSGSVR usando filas de mensagens SYSVIPC e fiz um driver de exibição comum para aplicativos; Desde então, perdi isso, suponho que decidi que estava quebrado o suficiente para que precisasse ser morto e refeito. Naquela época, eu já tinha o OpenGL, GL2, GLES, QNX, WebSocket/HTML Canvas exibem drivers; E o sistema de mensagens parecia bom, mas realmente era muito ruim. (Ainda está lá, e algumas coisas ainda o usam; funciona ....) Aqui, neste novo trabalho, eu pude apresentar minha biblioteca a outros; Eu não percebi como 'Sack' poderia significar algo completamente além que eu pretendia. Tornou -se Espcailly Bad quando eu fiz este projeto (kit de layout de interface modular), que é baseado no meu saco; ou vem de ...
Com o tempo, tanto para fins de demonstração quanto para testes e utilidade geral, tornou -se pasta 'Utils' sob saco, que é uma espécie de aplicações realmente pequenas baseadas no saco; e uma pasta de 'jogos' com coisas mais próximas dos aplicativos. Se por nenhum outro motivo senão o código de referência.
Portanto, existe uma biblioteca de matemática vetorial (lembre -se de voltar para geomtry construtiva?), Uma biblioteca de matemática de fração, que armazena números de um número inteiro de número/denominador; Isso é usado para fins de escala na bolsa da GUI. Há um invólucro para temporizadores; Como o Windows setTimer, há addtimer (); Timers e threads (ThreadTo () em vez de pthread_create/createethread/....).
Intershell é um programa destinado à produção rápida de aplicativos de função dedicados em tela cheia (interfaces, exibições e sinalização do quiosque). Ele suporta janelas transparentes, para que você possa colocar o conteúdo estático sobre o conteúdo animado existente, talvez seja reproduzido com algo como VLC (embora exista um pequeno utilitário para reproduzir vídeos apenas usando o FFMPEG como controle de dropin na inter -shell).
As fontes são geralmente separadas, exigindo menos dependências de outras pessoas. Algum dia, isso deve ser vasculhado na árvore de dependência real que pode ser alavancada em um nível mais alto.
if( options/version == 1 ) option set options/version=2... option default otheroption/app/color=12344E em algum lugar encomendado no acima ... 11) Registro de processos, permite registrar valores, funções e tipos para consumo posterior. O PSI Control Registry é baseado nesta árvore de registro. Os nomes da árvore podem ser despejados para navegar posterior (depuração como, onde isso acabou?). Este módulo também é a biblioteca Deadstart que lê interface.conf e lida com o carregamento de módulos adicionais ou configurando aliases para interfaces com base nas opções especificadas. (Isso merece pelo menos um WikiPage inteiro)
12 ... n) Muitos pequenos utilitários escritos com esta biblioteca de abstração que geralmente funcionam em todos os sistemas.
Algumas funcionalidades básicas que são diferentes - criem um processo, manipulam soquetes com eficiência, abstrações do sistema de arquivos (mesmo um exemplo de sistema de arquivos virtual, que mostra como você pode implementar suas próprias interfaces de sistema de arquivos), ping (soquetes RAW), ARP, um driver de consulta Whois que é um pouco obsolete agora, o Windows Service Gon para escrever seus próprios serviços. Mesmo um serviço de exemplo que apenas executa um executável arbitrário. Sistema de tradução de idiomas (nada tão especial ou mágico).
n+1) inter -shell; Este é um manipulador de layout de aplicativos genéricos. Ele lida com plugins de alto nível com controles genéricos que podem ser colocados facilmente, mesmo após a implantação. Os pequenos plug -ins podem ser facilmente carregados através da interface, fornecendo interfaces de evento fáceis para o código do usuário.
n+10) dekware - todos os itens acima; Ele pode carregar inter -shell e estender os botões para fornecer scripts. Terminal, utilitário de processamento de scripts gerais ...
As bibliotecas de imagem e renderização são conectadas através de interfaces. Uma interface é uma estrutura de ponteiros de função solicitados pelo nome. As interfaces podem ser alias, portanto, se o vídeo carregar como 'vídeo.opengl', um alias chamado 'vídeo' puder ser criado para selecionar qual de vários são fornecidos por padrão.
As imagens são de 32 bits; Existem funções para fornecer Dwords ordenados pela plataforma para criar cores a partir de componentes ou obter componentes a partir de cores. Internamente, existem apenas alguns loops apertados otimizados para transferências e operações de cores de 32 bits. Em 2000, procurei por uma cor de '64 bits ', que existe internamente nas placas de vídeo para maior precisão (menos decimais perdidos de precisão) ... mas geralmente o usuário não pode diferenciar todos os níveis de 256 cores, por isso é mais do que suficiente.
O suporte ao Linux através do NAVTive X Now Android pode usar o GLES2 ou o Windows Native Framebuffer (Anativo. (É por isso que a camada de imagem é uma interface flugable, porque as operações de desenho se transformam em chamadas OpenGL). Todos podem usar o proxy que fornece uma interafce de rede à qual um navegador pode se conectar, os comandos de desenho são fofados ao BRWSER para executar ...
Iniciou uma camada Vulkan, que simplificaria algumas coisas. A interface da imagem OpenGL para shaders poderia realmente usar o Vulkan como um back -end ... mas eles são um pouco flexíveis agora ... então talvez implemente camadas mais profundas de API de uma maneira vulkan sejam feitas.
Isso é melhor implementado como uma GUI do nó
Esta é uma criação da biblioteca de controle em retornos de chamada registrados de classes de controles. A biblioteca é construída nas interfaces de imagem e renderizador ... rastreia coisas de nível superior, como controles deslizantes, caixas de listagem, botões e fornece extensões personalizadas com base em cada classe.
O Produto de Construção da Dekware é um cliente/lama de lama. A documentação e o downloads das versões pré -construídos estão disponíveis em d3x0r.org ou www.d3x0r.org.
Addon do nó que expõe o suporte à biblioteca principal ao JavaScript. Fornece WebSockets, HTTP, JSON, JSOX Parsers, interface SQLITE/ODBC.
Pacote npm e repositório Git
Addon do nó que inclui todas as interfaces do sack.vfs, mas também começa a implementar o subsistema interfafce ao GUI.
Pacote NPM e repositório Git.
O repositório Git é um ramo enraizado no mestre do sack.vfs e é apenas adições às interfaces existentes; Embora mude do uso de um sack.cc amaglamação, ele usa o projeto externo do CMake para baixar o repositório do Sack no GitHub.