자루 시스템 추상화 구성 요소 키트.
libuv, libsdl, gkt, qt ... 잠금 메커니즘이 있거나없는 목록, 스택, 대기열에 대한 C 로의 주로 확장. 메모리 진단소는 무료 후에 과도한/언더 플로우 또는 사용 (쓰기)을 식별하기 위해 내장되었습니다. 표준 API의 파일 시스템 이벤트 알림, 간단한 스레드, 백그라운드 스레드, HTTP, WebSocket, JSON, JSON6, JSOX Parsers, XML Parser 내보내기에서 작동하는 이벤트 기반 네트워킹; 데이터베이스 연결 및 사용을 단순화하는 SQLITE/ODBC 공통 래퍼; 간단한 분획 숫자 라이브러리, 벡터 라이브러리, 절차 및 기능 등록 시스템은 복잡한 플러그 가능 시스템에서 라이브러리 모듈의 기능 또는 인터페이스 테이블을 모두 등록 할 수 있습니다. 파일 시스템 추상화 및 가상 파일 시스템 인터페이스.
무엇이 아닌가? 그 자체가 운영 체제가 아니며 작업 로더가 부족하고 프로세스 할당 자체가 부족합니다. 메모리는 시스템에서 요청되며 코드를 위해 관리되며, Proceses간에 메모리가 공유 될 수 있습니다.
헤더 문서 정보에서 게시 한 문서 -http://sack.sf.net (https://sourceforge.net/projects/sack/)
Git은 종종 최신 상태입니다. GIT는 기본 개발 소스 제어 시스템입니다. 머큐리리어는 더 이상 사용되지 않습니다. (Sourceforge 쓸모없는)
모노톤은 최고 였을 것입니다. 하지만; 글쎄 ... 어쩌면 그들은 너무 닫혔습니다.
C 단일 소스 패키지. C/C ++ 컴파일 가능한 소스 및 단일 헤더. 각 프로젝트에서 realavent 문서에 대한 링크 ...
Node.js를 통해 인터 로프를 통해 V8에 노출되었습니다.
두 프로젝트 모두 동일한 소스로 구축됩니다. 별도의 cmakelists는 Github에서 가져온 자루 버전을 사용하여 GUI 버전을 구축하는 데 사용됩니다. 합병보다는 포함됩니다.
git은 훅을 절약 할 수 없지만 서브 모듈은 일종의 고통입니다. 이것은 git 서브 모듈을 사용하기 위해 마이그레이션되었습니다. 쉽게 고리가 필요합니다. 후크가로드되는 위치에 대한 구성을 설정하면 도움이됩니다.
이 저장소의 .githooks의 후크는 설정 한 템플릿에서 복사 한 기존 후크에 체인을 시도합니다.
# 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
cmake_build_type (릴리스/디버그/relwithdebinfo/minrel) 이름은 _solution 및 _out 디렉토리를 생성하는 데 사용됩니다. '디버그'를 사용하는 경우 디렉토리는 'Debug_Solution'등이됩니다. 각 프로젝트는 관련 <bule_type> _out 폴더에 설치됩니다.
ccmake 또는 cmake-gui 사용하여 컴파일 옵션을 구성 할 수 있습니다. 그것은 시스템을 기반으로 추측하는 공정한 일을하지만 때로는 변화하고 싶은 것들이 있습니다.
Global의 구성 설정에는 BUILD_EXTRAS 옵션이 있으며, 이는 지원되지 않거나 테스트하거나 개발중인 자루에 더 많은 응용 프로그램을 구축 할 수 있습니다.
SACK의 구성 ..._ 솔루션/코어 프로젝트에는 PNG/JPEG/ZLIB 등을 사용하는 것과 같은 많은 옵션이 있습니다. sqlite와 동일합니다. NO_ODBC가 ODBC 라이브러리의 종속성을 비활성화 할 수 있도록 할 수 있습니다.
(Linux) unixodbc (Cor에서 CCMake를 사용한 CMAKE 옵션은 이러한 종속성을 비활성화 할 수 있음);
(OpenSSL?)/libressl (libressl 3.2.1 (최신) 포함)
GUI 부품 (우분투 패키지 이름, 다른 시스템에 대해 다를 수 있음)
ffmpeg 일부 코드에서 비디오/오디오 스트리밍 플레이어를 생성하는 데 사용할 수 있습니다. FFMPEG 인터페이스 모듈은 FFMPEG.DLL을 동적으로로드하며 리포지토리에서 Windows에서 사용할 수 있어야합니다. 또는 건축 할 수 있습니다 ...
나는 WSL 2와 함께 만들었습니다. (WSL- 설치). 및 Arch Linux 이미지 (https://github.com/yuk7/archwsl); Deproriate대로 빌드 도구가 설치되었다고 가정합니다
Pacman -s는 diffutils mingw-w64-gcc를 만듭니다
그리고 아마도 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
이것은 일반적으로 작은 작은 것들입니다. C/C ++를 위해 컴파일합니다. 일부 지원/유틸리티 프로그램이있는 도서관입니다. 그것이 핵심입니다. 몇 가지 더 독립형 응용 프로그램이 포함되어 있습니다. Linux, Android, Mac 등과 같은 Windows와 Posix의 추상화와 Posix의 다양한 풍미를 제공합니다. SDL (정렬)이지만 BusyBox이지만 실제로는 아닙니다. 그것은 gtk (sorta), stl (스택, 목록, 큐, 상수, 제네릭, ...)이며 C 라이브러리도 거의 의존 할 수 없습니다.
처음에는 DOS 직렬 터미널 프로그램이있었습니다. 물론 기본 컨테이너 유형이 누락되었으므로 기본적으로 모든 구조는 오래된 무언가의 새로운 구현이었습니다. 그러나 그것은 간결했고 특정한 경우를 제외하고 사용하지 않는 것들을 제공 할 수있는 일반적인 클래스의 경우 '필요하지 않은'추가 사항이 없었습니다. 이것은 실제로 실이있었습니다. Vairous 상태에서 시간을 포기할 수 있다는 몇 가지 명령 스택이있었습니다.
NIPC (New Inter Prociess Communications)라는 독점 OS로 발전했으며 스레드뿐만 아니라 DOS .EXE 파일을 스레드 (.com 파일이 아닌)에 프로세스로로드 할 수 있습니다. 이 관리 된 메모리 할당, 디스플레이 액세스, 디스크 아크스 및 CPU 시간은 라운드 로빈 방식으로 CPU 시간입니다. 처음에는 잠이 들지 않았지만 나중에 실은 일정을 벗어나서 깨어날 수 없었습니다. 386-25에서 그것은 1500 사이클을 1 초 동안 얻었습니다. 그러나 실제 작업의 대부분은 인터럽트 처리에있어서 다른 시스템과 의사 소통하는 것이 었습니다.
그런 다음 NT4가 나올 때까지 Windows 3.1과 NT 3.51이 짧은 시간 동안있었습니다. 이제 모든 사용자 정의 스레드 컨트롤은 상당히 쓸모가 없었지만 할당자는 꽤 좋았습니다. 그리고 공유 메모리 파이프/큐 등과 소켓이 많이 개발되었습니다. NIPC에도 소켓이있었습니다. UDP/TCP/IP 스택으로 작성하여 직접 작성된 네트워크 카드로 작성되었습니다. 이에 대한 API는 물론 이벤트 기반이었습니다. 왜냐하면 네트워크를 다루는 다른 종류의 방법을 실제로 알지 못했기 때문입니다. 물론 버클리 소켓이 있었는데, 그들은 그 API를 구현해야한다고 말했고 너무 복잡하다고 생각했습니다 ... 나는 앉아서 데이터를 기다려야합니까?
그런 다음 인터넷이 있었고, 은둔자로서의 삶이 있었고, 잡지 못하는 사람을 고정시키고, 자물쇠를 바꾼 사람과 아프고, 'vurt'가있었습니다.
사운드 블래스터와 3DFX (글라이드)로 자신을 즐겁게하는 작은 것들에 대한 많은 땜질이있었습니다. 볼록한 고형물에 잘 작동하는 일부 건설적인 지오메트리 알고리즘 ...
그래서 여기서 핵심은 실제로 그 자체로 형성되었습니다. 유형 (텍스트, 목록, 스택, 대기열, ...), 메모리 할당 자 (소유자가 해당 메모리 블록을 잡을 수있는 hold () 조작이 있습니다. 또한 프로세스간에 공유 메모리의 사용자 지정 메모리에 할당되도록 랩핑됩니다. 이를 위해 파일 뒷받침 힙을 다시로드 할 수있는 지속적인 메모리로 사용하고 프로그램이 기존 메모리 상태에서 이력서를 사용합니다. 고정 네트워킹; 여론 조사가 이벤트 기반으로 바꾸는 것. Net (No, 2000 고객 연결에는 80%가 완전히 실패한 문제가 있습니다). 이시기에 그래픽 인터페이스 레이어가 시작되었습니다. Allegro에서 영감을 얻은 ImageFile_Tag {} 구조를 처음에 가져 와서 전용 32 비트 컬러 경로 루틴을 구현했습니다. Allegro는 모든 종류의 픽셀 유형에 대한 지원을 받았으며, 간접 기능 포인터를 통해 호출하여 여전히 빠르게 느려졌습니다. 나는 ASM 및 MMX 풍미 모두에서 블록-카피 및 라인 루틴의 일부 조립 버전을 가지고있었습니다. SSE가 나왔을 때, 컴파일러는 C를 최적화하는 데 정말 좋은 일을하고 있었고 컴퓨터는 더 빨랐으며, 이미 빠른 것이 훨씬 빠르기 때문에 다양한 플랫폼/컴파일러에 대한 Assmebly의 유지 관리가 그것을 쓸모 없게했습니다. 일단 당신이 그릴 수있는 이미지가 있으면 시스템에 표시를하는 것이 문제 일 뿐이므로 Linux Framebuffer (결코 빠르지 않은)에 대한 의도로 Windows 인터페이스가 수행되었습니다.
따라서 이것을 플랫폼으로 고려할 때, 자루를 기반으로 한 응용 프로그램으로서 Dekware는 형성되어 결국 나타납니다. 라이브러리의 테스트 고정물 역할을합니다.
따라서 단일 이미지 라이브러리와 렌더 라이브러리가 있었으므로 하나의 큰 패키지로 패키지되었습니다. (cmake에는 여전히 build_monolithic 옵션이 있으며 아마도 현재 상당히 깨 졌을 것입니다). 나는 Dekware를 사용하여 많은 진흙을 연주하고있었습니다 (GNU가 아닌 사람과 함께 FreeBsd에서 달리는 다른 사람을 위해 Dekware를 지원했습니다. 그 전에는 이전 직장에서 배운 패턴 이후에는 '공통적 인'일이었습니다. 자루는 큰 가방입니다. 가방은 5 봉지처럼 담을 수 있지만 자루는 25 봉지처럼 담을 수 있습니다. 가방은 기본 집계 그룹 또는 하위 모듈입니다. 그 자체가 헌신하고 다른 것에 영향을 미치지 않는 조각입니다. 그리고 자루에는 많은 가방이 들어 있습니다.
따라서 새로운 소프트웨어를 구축하는 새로운 작업이 있었으며 동일한 코드와 #ifdef가없는 Windows 또는 Linux에서 실행될 애플리케이션을 매우 빠르게 활용하고 응용 프로그램을 구축 할 수있었습니다. SYSVIPC 메시지 대기열을 사용하여 MSGSVR 계층을 개발했으며 응용 프로그램을위한 공통 디스플레이 드라이버를 수행했습니다. 나는 그것을 잃어 버렸다. 나는 그것이 죽이고 재개해야 할 정도로 부러 졌다고 결정했다고 생각한다. 당시 나는 OpenGL, GL2, GLES, QNX, WebSocket/HTML Canvas 디스플레이 드라이버를 이미 사용했습니다. 그리고 메시지 시스템은 좋아 보였지만 실제로는 꽤 나빴습니다. (여전히 거기에 있고 어떤 것들이 여전히 그것을 사용하고 있습니다. 그것은 작동합니다 ....) 여기에서,이 새로운 직업에서, 나는 내 도서관을 다른 사람들에게 제시해야했습니다. 나는 '자루'가 내가 의도 한 것보다 완전히 다른 것을 의미 할 수있는 방법을 몰랐다. 이 프로젝트를 만들었을 때 (우유 - 모듈 식 인터페이스 레이아웃 키트) 내 자루를 기반으로 한 것은 espcailly가 나빴습니다. 아니면 ...에서 온다 ...
시연 목적, 테스트 및 일반적인 유틸리티를 위해 시간이 지남에 따라 자루 아래에 'utils'폴더가 자루를 기반으로 한 일종의 작은 응용 프로그램이됩니다. 응용 프로그램에 더 가까운 '게임'폴더. 참조 코드 외에 다른 이유가없는 경우.
따라서 분수 수학 라이브러리 인 벡터 수학 라이브러리 (건설적인 지오 트리를위한 remeber)가 있습니다. 이것은 GUI 백에서 스케일링 목적으로 사용됩니다. 타이머 용 래퍼가 있습니다. Windows Settimer와 마찬가지로 AddTimer ()가 있습니다. pthread_create/createthread/....
Intershell은 전체 화면 전용 기능 응용 프로그램 (키오스크 인터페이스, 디스플레이 및 간판)을 빠르게 제작하기위한 프로그램입니다. 투명한 Windows를 지원하므로 VLC와 같은 기존 애니메이션 컨텐츠를 통해 정적 컨텐츠를 계층화 할 수 있습니다 (FFMPEG를 Intershell에서 Dropin 컨트롤로 사용하는 비디오를 재생하는 작은 유틸리티가 있지만).
출처는 일반적으로 분리되어 있으며 다른 사람의 가장 적은 의존성이 필요합니다. 언젠가 이것은 더 높은 수준에서 활용할 수있는 실제 의존 트리로 빗질해야합니다.
if( options/version == 1 ) option set options/version=2... option default otheroption/app/color=12344그리고 위의 어딘가에있는 곳 ... 11) 프로세스 레지스트리는 나중에 소비를위한 값, 기능 및 유형을 등록 할 수 있습니다. PSI Control Registry는이 레지스트리 트리를 기반으로합니다. 트리의 이름은 나중에 탐색하기 위해 버릴 수 있습니다 (디버깅은 어디에서 끝났습니까?). 이 모듈은 또한 Interface.conf를 읽고 추가 모듈로드 또는 지정된 옵션을 기반으로 인터페이스에 별명을 구성하는 라이브러리 데드 스타트입니다. (이것은 최소한 전체 위키피지를받을 자격이 있습니다)
12 ... n) 일반적으로 모든 시스템에서 작동하는이 추상화 라이브러리로 작성된 많은 작은 유틸리티.
프로세스 생성, 소켓을 효율적으로 처리하고, 파일 시스템 추상화 (예제 가상 파일 시스템조차도 자신의 파일 시스템 인터페이스를 구현할 수있는 방법), Ping (Raw Sockets), ARP, Whois Query 드라이버, Windows Service Hook, 자신의 서비스를 작성하는 Windows 서비스 후크. 임의의 실행 파일을 실행하는 예제 서비스조차도. 언어 번역 시스템 (특별하거나 마법 같은 것은 없음).
n+1) 인터 쉘; 이것은 일반적인 응용 프로그램 레이아웃 처리기입니다. 배포 후에도 쉽게 배치 할 수있는 일반 컨트롤이있는 높은 수준의 플러그인을 처리합니다. 작은 플러그인은 인터페이스를 통해 쉽게로드하여 사용자 코드에 쉽게 이벤트 인터페이스를 제공 할 수 있습니다.
n+10) dekware- 위의 모든 것; 인터 쉘을로드 한 다음 버튼을 확장하여 스크립팅을 제공 할 수 있습니다. 터미널, 일반 스크립트 처리 유틸리티 ...
이미지 및 렌더 라이브러리는 인터페이스를 통해 연결됩니다. 인터페이스는 이름으로 요청 된 함수 포인터의 구조입니다. 인터페이스가 별명이 될 수 있으므로 'video.opengl'으로 비디오로드되면 '비디오'라는 별칭을 만들어 기본적으로 제공되는 몇 가지 중 일부를 선택할 수 있습니다.
이미지는 32 비트 컬러입니다. 구성 요소에서 색상을 만들거나 색상에서 구성 요소를 얻기 위해 플랫폼 주문 DWORDS를 제공하는 기능이 있습니다. 내부적으로 32 비트 컬러 전송 및 작업에 최적화 된 단단한 루프가 있습니다. 2000 년에 나는 더 높은 정밀도를 위해 비디오 카드에 내부적으로 존재하는 '64 비트 컬러 '를 검색했지만 (정밀도의 소수성 손실). 그러나 일반적으로 사용자는 256 개의 모든 수준을 차별화 할 수 없으므로 충분합니다.
Navitive X를 통한 Linux 지원 Now Android는 GLES2 또는 기본 프레임 버퍼 (AnativeWindow?) Windows를 사용할 수 있습니다. Windows는 OpenGL에서 Win32 Windows, OpenGL, D3D (대략)를 사용할 수 있습니다. (이것은 그림 레이어가 플러그 가능한 인터페이스 인 이유입니다. 드로우 작업이 OpenGL 호출로 바뀌기 때문입니다). 모두 브라우저가 연결할 수있는 네트워크 인터페이스를 제공하는 프록시를 사용할 수 있으며, 드로우 명령은 BRWSER에 전달되어 ...
Vulkan 층을 시작하여 몇 가지를 단순화 할 수 있습니다. 셰이더의 이미지 OpenGL 인터페이스는 실제로 Vulkan을 백엔드로 사용할 수 있지만 지금은 다소 유연합니다 ... 아마도 Vulkan의 더 깊은 API 레이어를 구현할 수 있습니다.
이것은 노드 GUI로 더 잘 구현됩니다
이것은 컨트롤 클래스의 등록 된 콜백에 대한 제어 라이브러리 빌드입니다. 라이브러리는 이미지 및 렌더러 인터페이스를 기반으로 구축됩니다. 슬라이더, 목록 상자, 버튼과 같은 더 높은 수준의 항목을 추적하며 각 클래스를 기반으로 사용자 정의 확장 기능을 제공합니다.
Dekware 빌드 제품은 진흙 클라이언트/진흙입니다. 사전 빌드 버전의 문서 및 다운로드는 d3x0r.org 또는 www.d3x0r.org에서 확인할 수 있습니다.
핵심 라이브러리 지원을 JavaScript에 노출시키는 노드 애드온. WebSockets, HTTP, JSON, JSOX Parsers, SQLITE/ODBC 인터페이스를 제공합니다.
NPM 패키지 및 git 저장소
Sack.vfs의 모든 인터페이스를 포함하는 노드 애드온이지만 GUI 서브 시스템에서 InterfaFce를 구현하기 시작합니다.
NPM 패키지 및 git 저장소.
git 리포지토리는 Sack.vfs의 마스터에 뿌리를 둔 지점이며 기존 인터페이스에 추가 된 것입니다. Sack.cc Amaglamation 사용에서 변경되지만 CMake 외부 프로젝트를 사용하여 Github에서 Sack Repository를 다운로드합니다.