Kit de composant d'abstraction du système de sac.
Libuv, Libsdl, GKT, QT, ... seulement aucun de ceux-ci en un. Principalement des extensions vers C pour les listes, les piles, les files d'attente, avec et sans mécanismes de verrouillage. Diagnosticsotiques de mémoire intégrés pour identifier sur / sous-flux ou utiliser (écrire) après gratuitement; Notifications d'événements du système de fichiers Dans une API standard, threads simples, réseautage basé sur des événements qui fonctionne sur les threads d'arrière-plan, HTTP, WebSocket, JSON, JSON6, Analyrs JSOX, analyseur XML exporté; SQLITE / ODBC Common Wrapper qui simplifie la connexion et l'utilisation de la base de données; Bibliothèque numérique de fraction simple, bibliothèque vectorielle, procédure et système d'enregistrement des fonctions qui peuvent enregistrer à la fois des fonctions ou des tables d'interface pour l'intercommunication du module de bibliothèque dans des systèmes complexes enfichables; Abstraction du système de fichiers et interface du système de fichiers virtuel.
Qu'est-ce que c'est? Ce n'est pas lui-même un système d'exploitation, il manque de chargeurs de travail et d'allocation de processus lui-même; La mémoire est demandée au système et gérée pour le code, la mémoire peut être partagée entre les procédures.
Un document publié à partir d'informations sur le document d'en-tête - http://sack.sf.net (https://sourceforge.net/projects/sack/)
Git est souvent plus à jour. Git est le principal système de contrôle de source de développement. Le mercurial n'est plus utilisé. (Sourceforge obsolète)
Le monotone aurait été le meilleur; mais; Eh bien ... peut-être qu'ils étaient trop fermés.
C Packages à source unique. Sources compilables C / C ++ et un seul en-tête. Liens vers des documents relatifs dans chaque projet ...
Exposé via Interop à V8 via Node.js ...
Les deux projets se construisent avec la même source - un CMAkelists séparé est utilisé pour construire la version GUI, en utilisant une version de Sack tirée de GitHub; plutôt que la fusion incluse.
Git ne permet pas très bien d'économiser des crochets - mais les sous-modules sont une sorte de douleur. Cela a migré pour utiliser les sous-modules Git; qui, pour la facilité, nécessite des crochets. La configuration d'une configuration pour où les crochets sont chargés pour cela vous aidera.
Les crochets.
# 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
Le nom CMake_Build_Type (libération / debug / relwithdebinfo / minrel) est utilisé pour générer des répertoires _solution et _out. Si vous utilisez «debug», les répertoires seront «debug_solution», etc. Chaque projet s'installe dans son dossier <fuild_type> _out associé.
ccmake ou cmake-gui peuvent être utilisés pour configurer des options de compilation. Il fait un travail équitable en fonction du système, mais parfois il y a des choses que vous aimeriez changer.
Les paramètres de configuration pour Global ont l'option BUILD_EXTRAS qui créera plus d'applications dans le sac qui sont moins prises en charge ou pour les tests ou profondément en développement.
Configuration de Sack ..._ Solution / Core Project a de nombreuses options comme utiliser les versions PNG / JPEG / ZLIB, etc., ou les versions système. Idem avec sqlite. Peut permettre à NO_ODBC de désactiver la dépendance des bibliothèques ODBC ... bien d'autres.
(Linux) UNIXODBC (options CMake utilisant CCMake dans Core peut désactiver cette dépendance);
(OpenSSL?) / Libressl (a-t-il Libressl 3.2.1 (dernier) inclus)
Les pièces GUI (noms de packages Ubuntu peuvent différer pour d'autres systèmes)
ffmpeg peut être utilisé par une partie du code pour générer des lecteurs de streaming vidéo / audio. Le module d'interface FFMPEG charge dynamiquement FFMPEG.DLL, qui devrait être disponible pour Windows dans le référentiel; ou peut être construit ...
Je l'ai fait construire avec WSL 2; (WSL --install). et Arch Linux Image (https://github.com/yuk7/archwsl); En supposant que les outils de construction sont installés
Pacman -s fabrique des diffutiles Mingw-W64-GCC
Et peut-être que Mingw-W64-Pkg-Config (AUR) MingW-W64-Environment (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
Il s'agit généralement d'une grande collection de petites choses. Il compile pour C / C ++. Il s'agit d'une bibliothèque, avec certains programmes de support / utilitaire; C'est le noyau; Il y a plusieurs types de demandes plus autonomes incluses. Il fournit des abstractions entre Windows et Posix et même diverses saveurs de POSIX, comme Linux, Android, Mac, et al. C'est SDL (en quelque sorte), c'est occupé, mais pas vraiment. C'est gtk (sorta), c'est STL (piles, listes, file d'attente, constaineurs, génériques, ...), il peut même compter sur presque aucune de la bibliothèque C.
Au début, il y avait un programme de terminal série DOS. Il a été écrit en C. Il manquait bien sûr les types de conteneurs de base, donc essentiellement chaque structure était une nouvelle implémentation de quelque chose d'ancien; Mais c'était concis et n'avait pas de choses supplémentaires dont il n'avait pas «besoin» dans le cas d'une classe générique qui peut fournir des choses qui ne sont pas utilisées, sauf dans des cas spécifiques. Cela avait en fait des fils; Il y avait plusieurs piles d'instructions dans les États de Vairous que cela pouvait abandonner le temps.
Il a évolué en un système d'exploitation propriétaire appelé NIPC (New Inter Process Communications), qui non seulement avait des threads, mais pouvait charger des fichiers DOS .EXE comme processus dans les threads (pas seulement les fichiers .com). Cette allocation de mémoire gérée, l'accès à l'affichage, les accées de disque et le temps de processeur de manière à la ronde. Au début, il n'y avait pas de sommeil, mais les fils ultérieurs pouvaient se retirer du calendrier pour ne pas être réveillés. Sur un 386-25, il a obtenu un cycle 1500 par seconde. Mais la majeure partie de son véritable travail était dans la manipulation d'interruption, communiquant avec un autre système.
Ensuite, il y a eu Windows 3.1 ... et NT 3.51 pendant une courte période jusqu'à la sortie de NT4. Alors maintenant, tout le contrôle de thread personnalisé était assez obsolète, mais cet allocateur, c'était plutôt bien. Et il y avait beaucoup de développement de tuyaux / files d'attente de mémoire partagés / etc. et de prises. Il y avait aussi des prises dans le NIPC; Écrit en tant que pile UDP / TCP / IP, sur une carte réseau qui a été directement écrite à; L'API pour cela était bien sûr basée sur des événements, car je ne connaissais vraiment aucune autre méthode pour traiter le réseau. Il y avait bien sûr Berkley Sockets, et ils m'ont dit que je devais mettre en œuvre cette API, et c'était tellement compliqué ... Je dois m'asseoir et attendre les données?
Ensuite, il y avait Internet, il y avait la vie comme ermite, entourant pour celui qui ne serait pas pris et douloureux de celui qui a changé les serrures, et il y avait «Vurt».
Il y avait beaucoup de bricolage sur les petites choses ici et là m'amusant avec des blasters sonores et 3DFX (glide). Certains algorithmes de géométrie constructifs qui fonctionnent assez bien pour les solides convexes ...
Alors ici, le noyau s'est vraiment formé comme une chose qui lui est propre. Ce sont les types (texte, listes, piles, files d'attente, ...), l'allocateur de mémoire (qui a une opération Hold () qui permet à ce bloc de mémoire d'être maintenu après que le propriétaire l'a limé.) Qui est également enveloppé dans l'allocation dans des tas personnalisés de mémoire partagée entre les processus; Cela et pour utiliser un tas soutenu par un fichier comme une mémoire persistante qui peut être rechargée et le programme reprend dans son état de mémoire existant. Et mise en réseau fixe; transformant ce qui était en cours de sondage en événement basé. Le réseautage a beaucoup évolué par rapport aux jours au début de l'utilisation d'un WaitFormutuitPleObjects (), après tout, 64 prises ne sont-elles pas suffisantes pour quelqu'un? (Non, 2000 clients Connecting ont des problèmes avec celui avec 80% de défaillance). À cette époque, les couches d'interface graphique ont commencé. Inspiré par Allegro, et en prenant initialement leur structure ImageFile_tag {}, implémentée des routines de chemin de couleur 32 bits dédiées. Allegro avait un soutien à toutes sortes de types de pixels, qui, aussi vite qu'il était, était toujours ralenti en appelant à travers des pointeurs de fonction indirects. J'ai eu des versions d'assemblage pendant une période de certaines des routines de copie de blocs et de lignes à la fois ASM et MMX. Au moment où SSE est sorti, les compilateurs faisaient un très bon travail d'optimisation du C, et les ordinateurs étaient tout simplement plus rapides, que ce qui était déjà très rapide était beaucoup plus rapide, que la maintenance de diverses plates-formes / compilateurs l'obsolent. Une fois que vous avez des images sur lesquelles vous pouvez dessiner, il s'agit simplement de faire en sorte que le système les affiche, donc une interface Windows a été terminée, avec une intention sur Linux FrameBuffer (qui n'a jamais été très rapide).
Donc, étant donné cela en tant que plate-forme, Dekware en tant qu'application basée sur Sack a pris forme et s'est finalement manifestée; servant de luminaire de test pour la bibliothèque.
Il y avait donc une seule bibliothèque d'images et une bibliothèque de rendements, donc ils étaient toutes sortes d'emballage en un seul grand package. (CMake a toujours des options Build_monolithic, qui est probablement assez cassée maintenant). Je jouais à l'époque beaucoup de boue à l'aide de Dekware (je supportais même Dekware pour quelqu'un d'autre qui courait sur FreeBSD, avec non-GNU Make; quelle douleur qui était ... ai-je mentionné, à l'époque j'utilisais de la marque et j'avais beaucoup de saveurs diverses de makefiles pour beaucoup de systèmes?) ... Quoi qu'il en soit, c'est vraiment l'origine du sac; Avant cela, c'était juste «commun» après le modèle que j'avais appris dans mon travail précédent. Un sac est un grand sac. Un sac peut contenir comme 5 sacs, mais un sac peut contenir comme 25 sacs. Un sac est un groupe global de base, ou un sous-module ... une pièce qui pourrait elle-même être ouverte et n'affecter rien d'autre; Et le sac contient de nombreux sacs.
Il y avait donc un nouvel emploi, en construisant de nouveaux logiciels, et j'ai pu tirer parti du sac et créer des applications très rapidement qui s'exécuteraient sur Windows ou Linux avec le même code et pas de # IFDEF. J'ai développé la couche MSGSVR à l'aide des files d'attente de messages SYSVIPC et j'ai fait un pilote d'affichage commun pour les applications; Depuis, j'ai perdu cela, je suppose que j'ai décidé qu'il était suffisamment brisé pour qu'il soit tué et refait. À ce moment-là, j'avais déjà OpenGL, GL2, GLES, QNX, WebSocket / HTML Drivers en toile; Et le système de messages avait l'air bien, mais était vraiment assez mauvais. (Il est toujours là, et certaines choses l'utilisent encore; cela fonctionne ....) Ici, à ce nouvel emploi, j'ai dû présenter ma bibliothèque à d'autres; Je ne savais pas comment le «sac» pouvait signifier quelque chose de complètement autre que je ne le voulais. Il est devenu un mauvais méchant lorsque j'ai réalisé ce projet (kit de mise en page d'interface modulaire), qui est basé sur mon sac; ou vient de ...
Avec le temps, à la fois à des fins de démonstration, des tests et des services publics généraux, il y a un dossier «utils» sous un sac qui est en quelque sorte de très minuscules applications basées sur le sac; et un dossier «jeux» avec des choses plus proches des applications. Si pour aucune autre raison, le code de référence.
Il y a donc une bibliothèque mathématique vectorielle (remeber de retour pour la géomère constructive?), Une bibliothèque de mathématiques de fraction, qui stocke un nombre de nombres / entiers de dénominateurs; Ceci est utilisé à des fins de mise à l'échelle dans le sac GUI. Il y a un wrapper pour les minuteries; Comme Windows Settimer, il y a addtimer (); Timeuses et threads (threadto () au lieu de pthread_create / createThread / ....).
Intersell est un programme destiné à la production rapide d'applications de fonction dédiées en plein écran (interfaces de kiosque, affichages et signalisation). Il prend en charge les fenêtres transparentes, vous pouvez donc superposer du contenu statique sur le contenu animé existant peut-être joué avec quelque chose comme VLC (bien qu'il existe un petit utilitaire pour lire des vidéos simplement en utilisant FFMPEG comme contrôle DropIn dans l'intersell).
Les sources sont généralement distinctes, nécessitant le moins de dépendances d'autrui. Un jour, cela devrait être peigné dans un arbre de dépendance réel qui peut être exploité à un niveau supérieur.
if( options/version == 1 ) option set options/version=2... option default otheroption/app/color=12344Et quelque part ordonné dans le registre de processus ci-dessus ... 11), permet d'enregistrer les valeurs, les fonctions et les types pour la consommation ultérieure. Le registre de contrôle PSI est basé sur cet arbre de registre. Les noms de l'arbre peuvent être jetés pour la navigation ultérieure (débogage comme, où cela s'est retrouvé?). Ce module est également la bibliothèque DeadStart qui lit Interface.conf et gère le chargement des modules supplémentaires, ou la configuration d'alias aux interfaces en fonction des options spécifiées. (Cela mérite au moins un wikipage entier)
12 ... n) Beaucoup de petits utilitaires écrits avec cette bibliothèque d'abstraction qui fonctionnent généralement sur tous les systèmes.
Certaines fonctionnalités de base qui sont différentes - créez un processus, gérez efficacement les sockets, les abstractions du système de fichiers (même un exemple de système de fichiers virtuels, qui montre comment vous pouvez implémenter vos propres interfaces de système de fichiers), Ping (Sockets bruts), ARP, un pilote de requête WHOIS qui est un peu observé maintenant, Windows Service Hook pour écrire vos propres services. Même un exemple de service qui exécute simplement un exécutable arbitraire. Système de traduction linguistique (rien de tout spécial ou magique).
n + 1) intersoniles; Il s'agit d'un gestionnaire de mise en page générique d'application. Il gère les plugins de haut niveau avec des commandes génériques qui peuvent être placées facilement même après le déploiement. Les petits plugins peuvent être facilement chargés via l'interface fournissant des interfaces d'événement faciles au code utilisateur.
n + 10) dekware - tout ce qui précède; Il peut charger l'interserie, puis étendre les boutons pour fournir des scripts. Terminal, utilité générale de traitement des scripts ...
Les bibliothèques d'images et de rendu sont connectées via des interfaces. Une interface est une structure de pointeurs de fonction demandée par son nom. Les interfaces peuvent être aliasées, donc si la vidéo se charge comme 'video.opengl' un alias appelé «vidéo» peut être créé pour sélectionner lequel des plusieurs est fourni par défaut.
Les images sont de couleur 32 bits; Il existe des fonctions pour fournir des DWORD commandés par la plate-forme pour créer des couleurs à partir de composants ou obtenir des composants à partir de couleurs. En interne, il n'y a que quelques boucles serrées optimisées pour les transferts et opérations de couleurs 32 bits. En 2000, j'ai recherché des couleurs de 64 bits 'qui existent en interne sur les cartes vidéo pour une précision plus élevée (moins de décimales perdues de précision) ... mais généralement l'utilisateur ne peut pas différencier tous les niveaux de 256 couleurs, donc c'est plus que suffisant.
La prise en charge de Linux via NAVTIVE X Now Android peut utiliser GLES2 ou Native FrameBuffer (AnativeWindow?) Les fenêtres peuvent utiliser Win32 Windows, OpenGL, D3D (à peu près), dans OpenGL, Windows / Controls créés se transformer en surfaces dans un espace 3D, qui peut être rendu dans et autour des autres objets 3D. (C'est pourquoi la couche d'image est une interface enfichable, car les opérations de dessin se transforment en appels OpenGL). Tous peuvent utiliser le proxy qui fournit une interafés de réseau à laquelle un navigateur peut se connecter, les commandes de tirage sont déposées au BRWSer pour effectuer ...
A commencé une couche Vulkan, ce qui simplifierait certaines choses. L'interface Image OpenGL pour les shaders pourrait vraiment utiliser Vulkan comme backend ... mais ils sont un peu flexibles maintenant ... alors peut-être que la mise en œuvre de couches plus profondes d'API d'une manière Vulkan sera effectuée.
Ceci est mieux mis en œuvre comme une interface graphique de nœud
Il s'agit d'une bibliothèque de contrôle construite sur des rappels enregistrés de classes de contrôles. La bibliothèque est construite sur l'image et les interfaces de rendu ... il suit des choses de niveau supérieur comme les curseurs, les boîtes de liste, les boutons et fournit des extensions personnalisées en fonction de chaque classe.
Dekware Build Product est un client / boue de boue. La documentation et les téléchargements de versions préfugées sont disponibles sur d3x0r.org ou www.d3x0r.org.
Addon de nœud qui expose la prise en charge de la bibliothèque de base à JavaScript. Fournit WebSockets, HTTP, JSON, PARSERS JSOX, interface SQLite / ODBC.
Package NPM et référentiel GIT
Addon de nœud qui inclut toutes les interfaces de Sack.vfs, mais commence également à implémenter l'interfafce vers le sous-système GUI.
Package NPM et référentiel GIT.
Le référentiel GIT est une branche enracinée dans le maître de Sack.vfs, et ne fait que des ajouts aux interfaces existantes; Bien qu'il passe de l'utilisation d'un Sack.cc Amaglamation, il utilise CMake External Project pour télécharger le référentiel de sacs à partir de GitHub.