Kit de componentes de abstracción del sistema Sack.
Libuv, Libsdl, GKT, Qt, ... solo ninguno de esos en uno. Principalmente extensiones a C para listas, pilas, colas, con y sin mecanismos de bloqueo. Diagnóstico de memoria creado para identificar sobre/subflujo o usar (escribir) después de gratis; Notificaciones de eventos del sistema de archivos en una API estándar, subprocesos simples, redes basadas en eventos que funciona en hilos de fondo, HTTP, WebSocket, JSON, JSON6, JSOX analizadores, analizador XML exportado; SQLITE/ODBC Common Wrapper que simplifica la conexión y uso de la base de datos; Biblioteca numérica de fracción simple, biblioteca vectorial, procedimiento y sistema de registro de funciones que puede registrar tanto funciones o tablas de interfaz para la intercomunicación del módulo de biblioteca en sistemas complejos conectables; Abstracción del sistema de archivos e interfaz del sistema de archivos virtuales.
¿Qué no es? No es en sí mismo un sistema operativo, carece de cargadores de tareas y la asignación de procesos en sí mismo; La memoria se solicita desde el sistema y se gestiona para el código, la memoria se puede compartir entre procedimientos.
Un documento publicado a partir de la información del documento del encabezado: http://sack.sf.net (https://sourceforge.net/projects/sack/)
Git a menudo está más actualizado. GIT es el sistema de control de fuente de desarrollo principal. Mercurial ya no se usa. (SourceForge obsoleto)
Monótono habría sido el mejor; pero; Bueno ... tal vez estaban demasiado cerrados.
C paquetes de fuente única. Fuentes compilables C/C ++ y un solo encabezado. Enlaces a los documentos de relaves en cada proyecto ...
Expuesto a través de INETOP a V8 a través de Node.js ...
Ambos proyectos se construyen con la misma fuente: se utiliza una CMAKELists separada para construir la versión GUI, utilizando una versión de Sack sacada de GitHub; en lugar de la amalgamación incluida.
Git no permite guardar ganchos muy bien, pero los submódulos son una especie de dolor. Esto ha estado migrando para usar submódulos Git; que para facilitar los ganchos. Configurar una configuración para donde se cargan los ganchos para esto ayudará.
Los ganchos en .Githooks en este repositorio intentarán encadenar a los ganchos existentes copiados de las plantillas que tiene configurado.
# 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
El nombre CMAKE_BUILD_TYPE (Release/Debug/RelWithDebinfo/Minrel) se usa para generar directorios _solution y _Out. Si usa 'depurar', los directorios serán 'debug_solution', etc. Cada proyecto se instala en su carpeta relacionada <S.Type> _Out.
ccmake o cmake-gui se pueden usar para configurar opciones para la compilación. Hace un trabajo justo de adivinar en base al sistema, pero a veces hay cosas que le gustaría cambiar.
La configuración de configuración para Global tiene la opción BUILD_EXTRAS que construirá más de las aplicaciones en Sack que son menos compatibles o para pruebas o profundamente en el desarrollo.
Configuración del proyecto Sack ..._ Solución/Core tiene muchas opciones como si se debe usar PNG/JPEG/ZLIB, etc., o versiones del sistema. Lo mismo con SQLite. Puede habilitar NO_ODBC para deshabilitar la dependencia de las bibliotecas ODBC ... muchas más.
(Linux) UnixodBC (las opciones de CMake usando CCmake en el núcleo pueden deshabilitar esta dependencia);
(¿OpenSSL?)/Libressl (ha incluido Libressl 3.2.1 (último))
Partes GUI (nombres de paquetes de Ubuntu, pueden diferir para otros sistemas)
ffmpeg puede ser utilizado por parte del código para generar reproductores de transmisión de video/audio. El módulo de interfaz FFMPEG carga dinámicamente ffmpeg.dll, que debería estar disponible para Windows en el repositorio; o se puede construir ...
Lo conseguí para construir con WSL 2; (WSL -Instalación). y imagen de Arch Linux (https://github.com/yuk7/archwsl); Suponiendo que se instalen las herramientas de compilación como APRARIADO
Pacman -s hace difutilos MingW-W64-GCC
Y tal vez 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
Esta es generalmente una gran colección de cosas pequeñas. Se compila para C/C ++. Es una biblioteca, con algunos programas de soporte/utilidad; Ese es el núcleo; Hay varias aplicaciones más independientes incluidas. Proporciona abstracciones entre Windows y Posix e incluso varios sabores de Posix, como Linux, Android, Mac, et al. Es SDL (más o menos), es BusyBox, pero en realidad no. Es GTK (Sorta), es STL (pilas, listas, cola, Constainers, Generics, ...), puede confiar en casi ninguna de la biblioteca C ni siquiera.
Al principio, había un programa de terminal en serie DOS. Fue escrito en C. Por supuesto, faltaban los tipos básicos de contenedores, por lo que básicamente cada estructura era una nueva implementación de algo antiguo; Pero era conciso y no tenía cosas adicionales que no "necesitaba" en el caso de una clase genérica que puede proporcionar cosas que no se usan excepto en casos específicos. Esto realmente tenía hilos; Tenía varias pilas de instrucciones en los estados de Vairous en los que podría renunciar al tiempo.
Evolucionó en un sistema operativo patentado llamado NIPC (nuevas comunicaciones de interacción entre procesos), que no solo tenía hilos, sino que podía cargar archivos Dos .exe como procesos en los hilos (no solo archivos .com). Esta asignación de memoria gestionada, acceso de visualización, disco accede y tiempo de CPU de forma redonda. Al principio no había dormido, pero los hilos posteriores podrían sacar a sí mismos para ni siquiera ser despertados. En un 386-25 obtuvo 1500 ciclos por segundo. Pero la mayor parte de su trabajo real fue para interrumpir el manejo, comunicarse con algún otro sistema.
Luego estaba Windows 3.1 ... y NT 3.51 por un corto tiempo hasta que salió NT4. Así que ahora todo el control de hilos personalizados era bastante obsoleto, pero ese asignador, eso era bastante bueno. Y hubo mucho desarrollo de tuberías de memoria compartidas/colas/etc. y enchufes. También había enchufes en NIPC; Escrito como una pila UDP/TCP/IP, a una tarjeta de red que se escribió directamente; La API para eso fue, por supuesto, basada en eventos, porque realmente no conocía ningún otro tipo de método para tratar con la red. Por supuesto, hubo enchufes Berkley, y me dijeron que debía implementar esa API, y fue muy complicado ... Tengo que sentarme y esperar datos?
Luego estaba Internet, había vida como ermitaño, afligiendo a quien no sería atrapado y dolorido por el que cambió las cerraduras, y había 'vurt'.
Había muchos retoques en las pequeñas cosas aquí y allá divertiéndome con blasters de sonido y 3DFX (Glide). Algunos algoritmos de geometría constructivos que funcionan bastante bien para sólidos convexos ...
Así que aquí el núcleo realmente se formó como algo propio. Eran los tipos (texto, listas, pilas, colas, ...), el asignador de memoria (que tiene una operación Hold () que permite que ese bloque de memoria se mantenga después de que el propietario lo libera). Que también está envuelto en asignación en montones personalizados de memoria compartida entre procesos; eso y para usar un montón respaldado por el archivo como una memoria persistente que se puede volver a cargar y el programa reanude en su estado de memoria existente. Y redes fijas; Convirtiendo lo que estaba en votación en eventos. Las redes han evolucionado mucho desde los días al comienzo del uso de un WaitFormuitPeObjects (), después de todo, ¿no son 64 enchufes suficientes para alguien? (No, 2000 clientes que se conectan tienen problemas con eso con un 80% de falla por completo). Alrededor de este tiempo, se iniciaron las capas de la interfaz gráfica. Inspirado por Allegro, y tomando su estructura ImageFile_Tag {} inicialmente, implementó rutinas dedicadas de ruta de color de 32 bits. Allegro recibió apoyo para todo tipo de tipos de píxeles, que, tan rápido como era, todavía se ralentizó llamando a través de punteros de la función indirecta. Tuve durante una versiones de ensamblaje de tiempo de algunas de las rutinas de copia y línea de bloques tanto ASM como de sabores MMX. Cuando salió SSE, los compiladores estaban haciendo un muy buen trabajo al optimizar la C, y las computadoras eran simplemente más rápidas, que lo que ya era realmente rápido era mucho más rápido, que la mantenencia de asociablemente para varias plataformas/compiladores lo obsoletaba. Una vez que tenga imágenes a las que pueda dibujar, es solo una cuestión de hacer que el sistema las muestre, por lo que se realizó una interfaz de Windows, con una intención de Linux FrameBuffer (que nunca fue muy rápido).
Entonces, dada esto como una plataforma, DeKware como una aplicación basada en Sack tomó forma y finalmente se manifestó; Sirviendo como accesorio de prueba para la biblioteca.
Así que había una sola biblioteca de imágenes y una biblioteca de renderizado, por lo que todos estaban empaquetados en un paquete grande. (Cmake todavía tiene opciones Build_Monolithic, que probablemente ahora están bastante rotas). En ese momento estaba jugando mucho lodo usando Dekware (incluso fue soportado de Dekware para alguien más que se estaba ejecutando en FreeBSD, con no GNU. Antes de eso era solo 'común' después del patrón que había aprendido en mi trabajo anterior. Un saco es una bolsa grande. Una bolsa puede contener como 5 bolsas, pero un saco puede contener como 25 bolsas. Una bolsa es un grupo agregado básico, o un submódulo ... una pieza que en sí misma podría ser omitida y no afectar nada más; Y Sack contiene muchas bolsas.
Entonces, hubo un nuevo trabajo, construyendo un nuevo software, y pude aprovechar el saco y crear aplicaciones muy rápidamente que se ejecutarían en Windows o Linux con el mismo código y sin #Ifdef. Desarrollé la capa MSGSVR usando colas de mensajes SYSVIPC e hice un controlador de visualización común para aplicaciones; Desde entonces he perdido eso, supongo que decidí que estaba lo suficientemente roto como para que debía ser asesinado y rehicado. En ese momento tenía controladores de lienzo OpenGL, GL2, GLES, QNX, WebSocket/HTML ya; Y el sistema de mensajes se veía bien, pero realmente era bastante malo. (Todavía está allí, y algunas cosas todavía lo usan; funciona ...) Aquí, en este nuevo trabajo, pude presentar mi biblioteca a otros; No me di cuenta de cómo 'saco' podría significar algo completamente diferente de lo que pretendía. Se convirtió en Espcailly Bad cuando hice este proyecto (Kit de diseño de interfaz modular de leche), que se basa en mi saco; o viene de ...
Con el tiempo, tanto para fines de demostración, pruebas y utilidad general, se convierte en una carpeta de 'utilización' en Sack, que es una especie de aplicaciones realmente pequeñas basadas en Sack; y una carpeta de 'juegos' con cosas que están más cerca de las aplicaciones. Si no es por otra razón que el código de referencia.
Entonces, hay una biblioteca vectorial de matemáticas (¿Remeber Back for Constructive Geomtry?), Una biblioteca de matemáticas de fracción, que almacena un número de enteros numerosos/denominadores; Esto se utiliza para fines de escala en la bolsa GUI. Hay un envoltorio para temporizadores; Al igual que Windows Settimer, hay addTimer (); temporizadores y hilos (threadto () en lugar de pthread_create/creethread/....).
Intershell es un programa destinado a la producción rápida de aplicaciones de funciones dedicadas de pantalla completa (interfaces kiosco, pantallas y señalización). Admite ventanas transparentes, por lo que puede colocar el contenido estático sobre el contenido animado existente que tal vez se reproduce con algo así como VLC (aunque hay una pequeña utilidad para reproducir videos solo usando FFMPEG como control de Dropin en Intershell).
Las fuentes generalmente están separadas, lo que requiere menos dependencias de los demás. Algún día esto debe peinarse en un árbol de dependencia real que pueda aprovecharse en un nivel superior.
if( options/version == 1 ) option set options/version=2... option default otheroption/app/color=12344Y en algún lugar ordenado en el registro de procesos anterior ... 11), permite registrar valores, funciones y tipos para consumo posterior. El Registro de control de PSI se basa en este árbol de registro. Los nombres en el árbol pueden ser arrojados para navegar posteriormente (depuración, ¿dónde terminó eso?). Este módulo también es la biblioteca Deadstart que lee interfaz.conf y maneja la carga de módulos adicionales, o configurando alias en interfaces basadas en opciones especificadas. (Esto merece al menos una wikipage completa)
12 ... n) Muchas pequeñas utilidades escritas con esta biblioteca de abstracción que generalmente funcionan en todos los sistemas.
Alguna funcionalidad base que es diferente: cree un proceso, maneje los sockets de manera eficiente, las abstracciones del sistema de archivos (incluso un sistema de archivos virtual de ejemplo, que muestra cómo puede implementar las interfaces de su sistema de archivos), ping (sockets sin procesar), ARP, un controlador de consulta Whois que es un poco obsoleto ahora, Windows Service Hook para escribir sus propios servicios. Incluso un servicio de ejemplo que solo ejecuta un ejecutable arbitrario. Sistema de traducción de idiomas (nada tan especial o mágico).
n+1) Intershell; Este es un controlador de diseño de aplicación genérico. Maneja complementos de alto nivel con controles genéricos que se pueden colocar fácilmente incluso después de la implementación. Los complementos pequeños se pueden cargar fácilmente a través de la interfaz que proporciona interfaces de eventos fáciles para el código de usuario.
n+10) dekware - todo lo anterior; Puede cargar intershell, luego extender los botones para proporcionar secuencias de comandos. Terminal, utilidad general de procesamiento de script ...
Las bibliotecas de imagen y render están conectadas a través de interfaces. Una interfaz es una estructura de punteros de funciones que se solicita por nombre. Las interfaces pueden estar alias, por lo que si el video se carga como 'Video.Opengl' Un alias llamado 'Video' se puede crear para seleccionar cuál de varios se proporciona de manera predeterminada.
Las imágenes son de 32 bits de color; Hay funciones para proporcionar DWORDS ordenados por la plataforma para crear colores a partir de componentes o obtener componentes de colores. Internamente, solo hay algunos bucles ajustados optimizados para transferencias y operaciones de color de 32 bits. En 2000 busqué '64 Bit Color ', que existe internamente en tarjetas de video para una mayor precisión (menos decimales perdidos de precisión) ... pero generalmente el usuario no puede diferenciar todos los niveles de 256 colores, por lo que es más que suficiente.
Soporte de Linux a través de Navtive X Now Android puede usar GLES2 o FrameBuffer nativo (¿ventanas AnitativeWindow?) Puede usar Win32 Windows, OpenGL, D3D (aproximadamente), en OpenGL, Windows/Controles creados en superficies en un espacio 3D, que se pueden representar en y alrededor de otros objetos 3D. (Esta es la razón por la cual la capa de imagen es una interfaz conectable, porque las operaciones de dibujo se convierten en llamadas OpenGL). Todos pueden usar el proxy que proporciona una red de red a la que un navegador puede conectarse, los comandos de dibujo se encuentran en el brwser para realizar ...
Comenzó una capa Vulkan, que simplificaría algunas cosas. La interfaz de la imagen OpenGL para sombreadores realmente podría usar Vulkan como un backend ... pero ahora son algo flexibles ... así que tal vez se realizarán capas más profundas de API de una manera de Vulkan.
Esto se implementa mejor como una GUI de nodo
Esta es una biblioteca de control construida en devoluciones de llamada registradas de clases de controles. La biblioteca se basa en las interfaces de imagen y renderizador ... rastrea cosas de nivel superior como controles deslizantes, cuadros de lista, botones y proporciona extensiones personalizadas basadas en cada clase.
Dekware Build Product es un cliente de barro/barro. La documentación y las descargas de versiones prebuilt están disponibles en d3x0r.org o www.d3x0r.org.
Complemento de nodo que expone el soporte de la biblioteca central a JavaScript. Proporciona WebSockets, HTTP, JSON, JSOX analizadores, interfaz SQLite/ODBC.
Repositorio de paquete NPM y git
El complemento de nodos que incluye todas las interfaces de Sack.vfs, pero también comienza a implementar el subsistema de Interfafe to GUI.
Paquete NPM y repositorio Git.
El repositorio de Git es una rama enraizada en el maestro de Sack.vfs, y es solo adiciones a las interfaces existentes; Aunque cambia de usar una amaglamación Sack.cc, utiliza el proyecto externo CMake para descargar el repositorio de Sack de GitHub.