Abstraktionskomponentenkit Sack System.
libuv, libsdl, gkt, qt, ... nur keine davon in einem. Vor allem Erweiterungen zu C für Listen, Stapel, Warteschlangen mit und ohne Verriegelungsmechanismen. Memory Diagnsotics integriert, um Over/Unterströmung zu identifizieren oder nach freien zu verwenden (schreiben); Dateisystemereignisbenachrichtigungen in einer Standard -API, einfache Threads, ereignisbasiertes Netzwerk, das auf Hintergrund -Threads, HTTP, WebSocket, JSON, JSON6, JSOX -Parsers, XML Parser exportiert ist; SQLite/ODBC Common Wrapper, das die Datenbankverbindung und die Verwendung vereinfacht; Einfache Fraktionsbibliothek, Vektorbibliothek, Prozedur und Funktion Registrierungssystem, mit der sowohl Funktionen als auch Schnittstellentabellen für das Intercommunication in komplexen Steckdosen registriert werden können; Dateisystemabstraktion und virtuelle Dateisystemschnittstelle.
Was ist es? Es ist nicht selbst ein Betriebssystem, es fehlen Aufgabenlader und die Verarbeitung der Allokation selbst. Der Speicher wird vom System angefordert und für den Code verwaltet. Der Speicher kann zwischen den Prozesse geteilt werden.
Ein Dokument, das von Header -Dokumentinformationen veröffentlicht wurde - http://sack.sf.net (https://sourceforge.net/projects/sack/)
Git ist oft auf dem neuesten Stand. Git ist das primäre Entwicklungsquellen -Steuerungssystem. Merkurial wird nicht mehr verwendet. (SourceForge veraltet)
Monoton wäre am besten gewesen; Aber; Nun ... vielleicht waren sie zu geschlossen.
C Einzelquellenpakete. C/C ++ kompilierbare Quellen und ein einzelner Header. Links zu Relavent -Dokumenten in jedem Projekt ...
Durch Interop aus V8 durch node.js ausgesetzt ...
Beide Projekte erstellen mit derselben Quelle - ein separater CMakelists wird verwendet, um die GUI -Version zu erstellen, wobei eine von Github gezogene Version von Sack verwendet wird. eher als die Verschmelzung enthalten.
Git erlaubt nicht sehr gut, Haken zu retten - aber Submodulen sind eine Art Schmerz. Dies ist migriert, um Git -Submodules zu verwenden. was für Leichtigkeit Haken erfordert. Das Einrichten einer Konfiguration für die geladenen Haken hilft.
Haken in .githooks in diesem Repository werden versuchen, an vorhandenen Hooks zu ketten, die aus den von Ihnen eingerichteten Vorlagen kopiert werden.
# 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
Der Name cmake_build_type (Release/Debug/relwithdebinfo/minrel) wird verwendet, um _olution und _out -Verzeichnisse zu generieren. Wenn Sie "Debug" verwenden, werden die Verzeichnisse "Debug_Solution" usw. sein. Jedes Projekt wird in seinen zugehörigen Ordner <Build_type> _out eingebaut.
ccmake oder cmake-gui können verwendet werden, um Optionen für die Kompilierung zu konfigurieren. Es macht eine faire Aufgabe, basierend auf dem System zu erraten, aber manchmal gibt es Dinge, die Sie ändern möchten.
Die Konfigurationseinstellungen für Global haben BUILD_EXTRAS -Option, mit denen mehr Anwendungen in Sack, die weniger unterstützt werden, oder zum Testen oder zutiefst entwickelt werden.
Konfiguration von Sack ..._ Lösung/Core -Projekt bietet viele Optionen, wie die Verwendung von PNG/JPEG/ZLIB usw. oder Systemversionen verwendet werden. Gleiches gilt für SQLite. Kann es ermöglichen, NO_ODBC zu deaktivieren, um die Abhängigkeit der ODBC -Bibliotheken zu deaktivieren ... viele weitere.
(Linux) UNIXODBC (CMake -Optionen mit CCMake im Kern können diese Abhängigkeit deaktivieren);
(OpenSSL?)/Libressl (hat Libressl 3.2.1 (letztes) enthalten)
GUI -Teile (Ubuntu -Paketnamen können sich für andere Systeme unterscheiden)
ffmpeg kann von einigen Code verwendet werden, um Video-/Audio -Streaming -Player zu generieren. Das FFMPEG -Schnittstellenmodul lädt ffmpeg.dll dynamisch, das für Windows im Repository verfügbar sein sollte. oder kann gebaut werden ...
Ich habe es mit WSL 2 bauen lassen; (WSL -Installation). und Arch Linux Image (https://github.com/yuk7/archwsl); Die Annahme, dass Build -Tools als Aufklärung installiert sind
Pacman -s machen Diffutils Mingw-W64-GCC
und vielleicht Mingw-W64-Pkg-Config (AUR) Mingw-W64-Umwelt (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
Dies ist im Allgemeinen eine große Sammlung winziger Dinge. Es kompiliert C/C ++. Es handelt sich um eine Bibliothek mit einigen Support-/Versorgungsprogrammen. Das ist der Kern; Es sind einige weitere eigenständige Anwendungen enthalten. Es liefert Abstraktionen zwischen Windows und POSIX und sogar verschiedenen Geschmacksrichtungen von POSIX, wie Linux, Android, Mac, et al. Es ist SDL (irgendwie), es ist Busybox, aber nicht wirklich. Es ist GTK (Sorta), es ist STL (Stapel, Listen, Warteschlangen, Constainer, Generika, ...), es kann sich auf fast keine der C -Bibliothek verlassen.
Am Anfang gab es ein serielles DOS -Terminalprogramm. Es wurde in C geschrieben. Es fehlten natürlich die grundlegenden Containertypen, so dass im Grunde jede Struktur eine neue Implementierung von etwas Altem war; Aber es war prägnant und hatte keine zusätzlichen Dinge, die es bei einer generischen Klasse nicht "brauchte", die möglicherweise Dinge liefern, die außer in bestimmten Fällen nicht genutzt werden. Dies hatte tatsächlich Fäden; Es gab mehrere Anweisungsstapel in Vairous -Staaten, dass es Zeit aufgeben konnte.
Es entwickelte sich zu einem proprietären Betriebssystem namens NIPC (New Inter Process Communications), das nicht nur Threads hatte, sondern DOS -.exe -Dateien als Prozesse in die Threads laden konnte (nicht nur .com -Dateien). Diese verwaltete Speicherzuweisung, Anzeigezugriff, Festplattenakes und CPU-Zeit in rund-Robin-Weise. Am Anfang gab es keinen Schlaf, aber später konnten sich Fäden aus dem Zeitplan herausnehmen, um nicht einmal geweckt zu werden. Bei einem 386-25 wurden 1500 Zyklen pro Sekunde. Aber der größte Teil seiner wirklichen Arbeit war die Interrupt -Handhabung und kommunizierte mit einem anderen System.
Dann gab es für kurze Zeit Windows 3.1 ... und NT 3.51, bis NT4 herauskam. Jetzt war die gesamte benutzerdefinierte Thread -Steuerung ziemlich veraltet, aber dieser Allocator war ziemlich gut. Und es gab viele Entwicklung gemeinsamer Speicherrohre/Warteschlangen/etc. und Sockets. Es gab auch Sockets in NIPC; geschrieben als UDP/TCP/IP -Stack, zu einer Netzwerkkarte, die direkt geschrieben wurde; Die API dafür basiert natürlich auf Ereignissen, weil ich wirklich keine andere Art von Methode kannte, um mit dem Netzwerk umzugehen. Es gab natürlich Berkley Sockets, und sie sagten mir, ich sollte diese API umsetzen, und es war so sehr verworren ... Ich muss auf Daten warten und warten?
Dann gab es das Internet, es gab ein Leben als Einsiedler, der nach demjenigen steckte, der nicht erwischt wurde, und schmerzte von dem, der die Schlösser änderte, und es gab 'Vurt'.
Hier und da waren viel Basteln an kleinen Dingen, die mich mit soliden Blastern und 3DFX (Glide) amüsant hatten. Einige konstruktive Geometriealgorithmen, die für konvexe Feststoffe ziemlich gut funktionieren ...
Hier wurde der Kern also wirklich als eigenes geformt. Es waren die Typen (Text, Listen, Stapel, Warteschlangen, ...), der Speicherallocator (der eine Hold () -Operation hat, die es ermöglicht, dass dieser Speicherblock nach der Freigabe des Eigentümers ihn befreit wird. Das und eine Datei -unterstütztes Heap als anhaltendem Speicher, der neu geladen werden kann, und der Programm -Lebenslauf in seinem vorhandenen Speicherzustand. Und festes Netzwerk; das in Event basierende Umfragen verwandeln. Networking hat sich aus den Tagen zu Beginn einer WaitFormuitpleObjects () viel entwickelt (), schließlich sind 64 Sockets für niemanden genug? (Nr Um diese Zeit wurden die Grafik -Schnittstellenschichten gestartet. Inspiriert von Allegro und der zunächst ihre ImageFile_tag {} -Struktur, implementierte dedizierte 32 -Bit -Farbpfadroutinen. Allegro hatte Unterstützung für alle Arten von Pixeltypen, die so schnell wie es war, durch die Durchstieg von indirekten Funktionszeigern immer noch verlangsamt wurde. Ich hatte eine Zeit mit den Montageversionen einiger der Blockkopie- und Leitungsroutinen sowohl ASM- als auch MMX-Aromen. Als SSE herauskam, machten Compiler wirklich gute Arbeit, um das C zu optimieren, und die Computer waren einfach schneller, dass das, was schon sehr schnell war, nur so viel schneller war, dass die Wartung von Assmbly für verschiedene Plattformen/Compiler es veraltete. Sobald Sie Bilder haben, auf die Sie zeichnen können, ist es nur eine Frage, dass das System es anzeigen kann. Daher wurde eine Windows -Schnittstelle durchgeführt, mit einer Absicht auf nur Linux Frambuffer (was nie sehr schnell war).
Angesichts dessen als Plattform nahm Dekware als Anwendung, die auf Sack basiert, Form und manifestierte sich schließlich. als Testvorrichtung für die Bibliothek dienen.
Es gab also eine einzelne Bildbibliothek und eine Renderbibliothek, sodass sie alle in einem großen Paket verpackt waren. (CMAKE hat noch Build_Monolithic -Optionen, was jetzt wahrscheinlich ziemlich gebrochen ist). Ich habe zu der Zeit mit Dekware viel Schlamm gespielt (war sogar Dekware für jemanden, der auf FreeBSD lief, mit Nicht-Gnu-Make; Was für ein Schmerz, das ... Habe ich damals erwähnt, damals benutzte ich Make und hatte viele verschiedene Aromen von Makeefiles für viele Systeme?) ... Wie auch immer, dies ist wirklich der Ursprung des Sacks. Zuvor war es nach dem Muster, das ich in meinem vorherigen Job gelernt hatte, nur "üblich". Ein Sack ist eine große Tasche. Eine Tasche kann wie 5 Taschen halten, aber ein Sack kann wie 25 Taschen halten. Eine Tasche ist eine grundlegende Gesamtgruppe oder ein Submodul ... ein Stück, das selbst aufgehoben werden kann und nichts anderes betrifft. Und Sack enthält viele Taschen.
Dann gab es einen neuen Job, der neue Software errichtete, und ich konnte Sack und Anwendungen sehr schnell nutzen, die unter Windows oder Linux mit demselben Code und ohne #ifdef's ausgeführt werden. Ich habe die MSGSVR -Schicht mithilfe von SYSVIPC -Nachrichtenwarteschlangen entwickelt und einen gemeinsamen Display -Treiber für Anwendungen durchgeführt. Ich habe das seitdem verloren, ich nehme an, ich habe beschlossen, dass es so gebrochen war, dass es getötet und erneuert werden musste. Zu dieser Zeit hatte ich bereits OpenGL, GL2, GLES, QNX, WebSocket/HTML -Canvas -Display -Treiber; Und das Nachrichtensystem sah gut aus, war aber wirklich ziemlich schlecht. (Es ist immer noch da, und einige Dinge benutzen es immer noch; es funktioniert ....) Hier muss ich bei diesem neuen Job meine Bibliothek anderen präsentieren; Ich merkte nicht, wie „Sack“ etwas anderes bedeuten könnte, als ich beabsichtigt hatte. Es wurde Espcailly schlecht, als ich dieses Projekt machte (Milch -Modular -Schnittstellen -Layout -Kit), das auf meinem Sack basiert. oder kommt von ...
Mit der Zeit werden sowohl zu Demonstrationszwecken als auch zum allgemeinen Nutzen ein „Utils“ -Fordner unter Sack, der eine Art winzige Anwendungen basiert, die auf Sack basieren. und ein "Spiele" -Fordner mit Dingen, die näher an Anwendungen liegen. Wenn aus keinem anderen Grund als Referenzcode.
Es gibt also eine Vektor -Mathematikbibliothek (Remeber Back für konstruktives Geomtry?), Eine Fraktionsmathematikbibliothek, die Zahlen eines Numbertor/Nenner -Ganzzahlens speichert. Dies wird für Skalierungszwecke in der GUI -Tasche verwendet. Es gibt einen Wrapper für Timer; Wie Windows Settimer gibt es Addtimer (); Timer und Threads (threadto () anstelle von pThread_create/createThead/....).
Intershell ist ein Programm, das für die schnelle Produktion von Funktionsanwendungen mit Vollbildmaterial (Kiosk -Schnittstellen, Anzeigen und Beschilderung) bestimmt ist. Es unterstützt transparente Windows, sodass Sie statische Inhalte über vorhandene animierte Inhalte durchführen können.
Quellen sind im Allgemeinen getrennt und erfordern die wenigsten Abhängigkeiten anderer. Eines Tages sollte dies in einen tatsächlichen Abhängigkeitsbaum verwandelt werden, der auf einem höheren Niveau genutzt werden kann.
if( options/version == 1 ) option set options/version=2... option default otheroption/app/color=12344Und irgendwo in der obigen Prozessregistrierung in der oben genannten Verfahrensregistrierung werden Werte, Funktionen und Typen für den späteren Verbrauch registriert. Das PSI -Steuerungsregister basiert auf diesem Registrierungsbaum. Namen im Baum können zum späteren Surfen abgeladen werden (Debugging wie, wo ist das gelandet?). Dieses Modul ist auch das Deadstart der Bibliothek mit der Schnittstelle.Conf und dem Laden zusätzlicher Module oder der Konfiguration von Aliase an Schnittstellen basierend auf den angegebenen Optionen. (Dies verdient mindestens ein ganzes Wikipage)
12 ... n) Viele kleine Versorgungsunternehmen, die mit dieser Abstraktionsbibliothek geschrieben wurden, die im Allgemeinen nur auf allen Systemen arbeiten.
Einige Basisfunktionen, die anders sind - erstellen Sie einen Prozess, verarbeiten Sie Sockets effizient, Dateisystemabstraktionen (sogar ein Beispiel Virtual Dateisystem, das zeigt, wie Sie Ihre eigenen Dateisystem -Schnittstellen implementieren können), Ping (Rohstecke), ARP, ein Whois -Abfragetreiber, der jetzt ein wenig veraltet ist, Windows Service Hook, um Ihre eigenen Dienste zu schreiben. Sogar ein Beispieldienst, der nur eine willkürliche ausführbare Datei ausführt. Sprachübersetzungssystem (nichts so besonderes oder magisches).
N+1) Intershell; Dies ist ein generischer Anwendungslayout -Handler. Es behandelt hochrangige Plugins mit generischen Steuerelementen, die auch nach dem Einsatz problemlos platziert werden können. Kleine Plugins können einfach über die Schnittstelle geladen werden, die einfache Ereignisschnittstellen für den Benutzercode bietet.
N+10) Dekware - Alle oben genannten; Es kann Intershell laden und dann die Tasten erweitern, um Skripten bereitzustellen. Terminal, allgemeines Dienstprogramm für Skriptverarbeitung ...
Bild- und Renderbibliotheken werden über Schnittstellen verbunden. Eine Schnittstelle ist eine Struktur von Funktionszeiger, die namentlich angefordert wird. Schnittstellen können aliasisiert werden. Wenn Videos also als "Video.opengl" geladen werden, kann ein Alias mit dem Namen "Video" erstellt werden, um auszuwählen, welche von mehreren standardmäßig bereitgestellt werden.
Bilder sind 32 Bitfarben; Es gibt Funktionen, um Plattform -geordnete DWords bereitzustellen, um Farben aus Komponenten zu erstellen oder Komponenten aus Farben zu erhalten. Intern werden nur ein paar enge Schleifen für 32 -Bit -Farbtransfers und -Operationen optimiert. Im Jahr 2000 suchte ich nach '64 -Bit -Farbe', die intern auf Grafikkarten nach höherer Präzision existiert (weniger verlorene Dezimalstellen) ... aber im Allgemeinen kann der Benutzer nicht jede Ebene von 256 Farben unterscheiden, sodass er mehr als ausreichend ist.
Linux -Unterstützung über Navtive X Now Android kann GLES2- oder Native Frambuffer (AnativeWindow?) Windows verwenden können Win32 -Fenster, OpenGL, D3D (ungefähr), in OpenGL, Windows/Controls erstellte Bedienelemente verwandeln sich in Oberflächen in einem 3D -Bereich, das in und um andere 3D -Objekte gerendert werden kann. (Aus diesem Grund ist die Bildschicht eine steckbare Schnittstelle, da Draw -Operationen in OpenGL -Aufrufe verwandeln.) Alle können den Proxy verwenden, der ein Netzwerk -Interafce bietet, mit dem ein Browser eine Verbindung herstellen kann.
Begann eine Vulkan -Schicht, die einige Dinge vereinfachen würde. Das Bild OpenGL -Schnittstellen für Shader könnte Vulkan wirklich als Backend verwenden ... aber sie sind jetzt etwas flexibel ... Daher wird die Implementierung tieferer API -Schichten auf vulkanische Weise getan.
Dies wird besser als Knoten -GOI implementiert
Dies ist ein Aufbau der Kontrollbibliothek auf registrierten Rückrufen von Kontrollklassen. Die Bibliothek basiert auf den Bild- und Renderer -Schnittstellen ... Sie verfolgt Dinge auf höherer Ebene wie Schieberegler, Listboxen, Schaltflächen und bietet basierend auf jeder Klasse benutzerdefinierte Erweiterungen.
Dekware Build Product ist ein Schlammkunde/Schlamm. Dokumentation und Downloads von vorgebauten Versionen finden Sie unter d3x0r.org oder www.d3x0r.org.
Knoten -Addon, das JavaScript -Unterstützung für die Kernbibliothek aufdeckt. Bietet WebSockets, HTTP, JSON, JSOX -Parsers, SQLite/ODBC -Schnittstelle.
NPM -Paket und Git -Repository
Knoten -Addon, das alle Schnittstellen von Sack.VFS enthält, aber auch InterfafCE zum GUI -Subsystem implementiert.
NPM -Paket und Git -Repository.
Das Git -Repository ist ein Zweig, der im Master of Sack.VFS verwurzelt ist, und ist nur Ergänzungen zu vorhandenen Schnittstellen. Obwohl es sich von der Verwendung eines sack.cc -Amaglamation ändert, verwendet es das externe CMake -Projekt zum Herunterladen von Sack -Repository von GitHub.