Kit komponen abstraksi sistem karung.
libuv, libsdl, gkt, qt, ... hanya tidak ada yang semuanya dalam satu. Terutama ekstensi ke C untuk daftar, tumpukan, antrian, dengan dan tanpa mekanisme penguncian. Diagnsotik memori builtin untuk mengidentifikasi lebih dari/underflow atau penggunaan (tulis) setelah gratis; Pemberitahuan acara sistem file dalam API standar, utas sederhana, jaringan berbasis acara yang berfungsi pada utas latar belakang, http, websocket, json, json6, jsox parsers, xml parser diekspor; SQLite/ODBC Common Wrapper yang menyederhanakan koneksi dan penggunaan basis data; Perpustakaan Numerik Fraksi Sederhana, Perpustakaan Vektor, Sistem Pendaftaran Prosedur dan Fungsi yang dapat mendaftarkan kedua fungsi atau tabel antarmuka untuk interkomunikasi modul pustaka dalam sistem pluggable yang kompleks; Abstraksi sistem file dan antarmuka sistem file virtual.
Apa itu? Itu sendiri bukan sistem operasi, tidak memiliki loader tugas, dan memproses alokasi itu sendiri; Memori diminta dari sistem dan dikelola untuk kode, memori dapat dibagikan di antara proses proses.
Dokumen yang diterbitkan dari informasi dokumen header - http://sack.sf.net (https://sourceforge.net/projects/sack/)
Git seringkali lebih up to date. GIT adalah sistem kontrol sumber pengembangan utama. Mercurial tidak lagi digunakan. (SourceForge usang)
Monoton akan menjadi yang terbaik; Tetapi; Yah ... mungkin mereka terlalu tertutup.
C Paket Sumber Tunggal. Sumber C/C ++ yang dapat dikompilasi, dan satu header. Tautan ke dokumen relavent di setiap proyek ...
Terpapar melalui interop ke v8 melalui node.js ...
Kedua proyek dibangun dengan sumber yang sama - CMakelists terpisah digunakan untuk membangun versi GUI, menggunakan versi karung yang ditarik dari GitHub; bukannya penggabungan termasuk.
Git tidak mengizinkan kait menyimpan dengan sangat baik - tetapi submodule semacam rasa sakit. Ini telah bermigrasi untuk menggunakan submodule git; Yang untuk kemudahan membutuhkan kait. Menyiapkan konfigurasi di mana kait dimuat untuk ini akan membantu.
Hooks in .githooks di repositori ini akan mencoba untuk berantai ke kait yang ada yang disalin dari templat yang telah Anda atur.
# 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
Nama cmake_build_type (rilis/debug/relwithdebinfo/minrel) digunakan untuk menghasilkan direktori _solution dan _out. Jika Anda menggunakan 'debug' maka direktori akan menjadi 'debug_solution' dll. Setiap proyek menginstal ke dalam folder yang terkait dengan <bring_type> _out.
ccmake atau cmake-gui dapat digunakan untuk mengonfigurasi opsi untuk kompilasi. Ini melakukan pekerjaan yang adil untuk menebak berdasarkan sistem, tetapi kadang -kadang ada hal -hal yang ingin Anda ubah.
Pengaturan konfigurasi untuk global memiliki opsi BUILD_EXTRAS yang akan membangun lebih banyak aplikasi dalam karung yang lebih rendah didukung atau untuk pengujian atau dalam pengembangan.
Konfigurasi Sack ..._ Proyek Solusi/Inti memiliki banyak opsi seperti apakah akan menggunakan versi PNG/JPEG/ZLIB dll, atau versi sistem. Sama dengan Sqlite. Dapat memungkinkan NO_ODBC untuk menonaktifkan ketergantungan perpustakaan ODBC ... banyak lagi.
(Linux) UnixoDBC (opsi CMake menggunakan CCMake di Core dapat menonaktifkan ketergantungan ini);
(OpenSSL?)/Libressl (sudah termasuk Libressl 3.2.1 (Terbaru))
Bagian GUI (nama paket Ubuntu, mungkin berbeda untuk sistem lain)
ffmpeg dapat digunakan oleh beberapa kode untuk menghasilkan pemain streaming video/audio. Modul antarmuka FFMPEG secara dinamis memuat ffmpeg.dll, yang harus tersedia untuk windows di repositori; atau bisa dibangun ...
Saya mendapatkannya untuk membangun dengan WSL 2; (WSL --instal). dan Arch Linux Image (https://github.com/yuk7/archwsl); dengan asumsi alat pembuatan sebagai pertimbangan diinstal
PACMAN -S membuat difutil Mingw-w64-gcc
Dan mungkin mingw-w64-pkg-config (aur) mingw-w64-lingkungan (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
Ini umumnya merupakan koleksi besar hal -hal kecil. Ini mengkompilasi untuk C/C ++. Ini adalah perpustakaan, dengan beberapa program dukungan/utilitas; Itulah intinya; Ada beberapa jenis aplikasi mandiri yang disertakan. Ini memberikan abstraksi antara Windows dan POSIX dan bahkan berbagai rasa POSIX, seperti Linux, Android, Mac, et al. Ini SDL (semacam), ini sibuk, tapi tidak juga. Ini GTK (agak), itu STL (tumpukan, daftar, antrian, konstain, obat generik, ...), itu dapat mengandalkan hampir tidak ada perpustakaan C bahkan.
Pada awalnya, ada program terminal serial DOS. Itu ditulis dalam C. Tentu saja ada tipe wadah dasar yang hilang, jadi pada dasarnya setiap struktur adalah beberapa implementasi baru dari sesuatu yang lama; Tapi itu ringkas dan tidak memiliki hal -hal tambahan yang tidak 'dibutuhkan' dalam kasus kelas generik yang dapat memberikan hal -hal yang tidak digunakan kecuali dalam kasus tertentu. Ini sebenarnya memiliki utas; Itu memiliki beberapa tumpukan instruksi di negara bagian Vairous bahwa itu bisa melepaskan waktu untuk.
Ini berevolusi menjadi OS kepemilikan yang disebut NIPC (komunikasi antar proses baru), yang tidak hanya memiliki utas, tetapi juga dapat memuat file dos .exe sebagai proses ke dalam utas (bukan hanya file .com). Alokasi memori yang dikelola ini, akses tampilan, akses disk, dan waktu CPU dengan cara round-robin. Pada awalnya tidak ada tidur, tetapi utas kemudian bisa mengeluarkan diri dari jadwal untuk tidak dibangunkan. Pada 386-25 itu mendapat aound 1500 siklus per detik. Tetapi sebagian besar pekerjaan sebenarnya adalah dalam penanganan interupsi, berkomunikasi dengan beberapa sistem lainnya.
Lalu ada Windows 3.1 ... dan NT 3.51 untuk waktu yang singkat sampai NT4 keluar. Jadi sekarang semua kontrol utas kustom cukup usang, tetapi alokasi itu, itu cukup bagus. Dan ada banyak pengembangan pipa memori bersama/antrian/dll dan soket. Ada juga soket di NIPC; Ditulis sebagai tumpukan UDP/TCP/IP, ke kartu jaringan yang ditulis secara langsung; API untuk itu tentu saja berbasis acara, karena saya benar -benar tidak tahu metode lain untuk menangani jaringan. Tentu saja ada soket Berkley, dan mereka mengatakan kepada saya bahwa saya harus menerapkan API itu, dan itu sangat berbelit -belit ... Saya harus duduk dan menunggu data?
Lalu ada internet, ada kehidupan sebagai seorang pertapa, menyatu untuk orang yang tidak akan ditangkap, dan sakit dari orang yang mengubah kunci, dan ada 'Vurt'.
Ada banyak bermain -main pada hal -hal kecil di sana -sini menghibur diri dengan blaster suara dan 3DFX (Glide). Beberapa algoritma geometri konstruktif yang bekerja cukup baik untuk padatan cembung ...
Jadi di sini inti benar -benar terbentuk sebagai miliknya sendiri. Itu adalah tipe (teks, daftar, tumpukan, antrian, ...), pengalokasi memori (yang memiliki operasi penahan () yang memungkinkan blok memori itu diadakan setelah pemilik membebaskannya.) Yang juga dibungkus dengan dialokasikan dalam banyak memori bersama di antara proses; Itu dan menggunakan tumpukan file yang didukung sebagai memori persisten yang dapat dimuat ulang dan program dilanjutkan dalam keadaan memori yang ada. Dan memperbaiki jaringan; mengubah apa yang menjadi pemilihan menjadi berbasis acara. Jaringan telah berevolusi banyak dari hari -hari di awal menggunakan satu WaitFormuitpleObjects (), setelah semua, bukankah 64 soket cukup untuk siapa pun? (Tidak, 2000 klien yang menghubungkan memiliki masalah dengan itu dengan 80% gagal sama sekali). Sekitar waktu ini, lapisan antarmuka grafis dimulai. Terinspirasi oleh Allegro, dan mengambil struktur ImageFile_tag {} mereka pada awalnya, menerapkan rutinitas jalur warna 32 bit khusus. Allegro mendapat dukungan untuk semua jenis jenis piksel, yang, secepat itu, masih melambat dengan memanggil melalui pointer fungsi tidak langsung. Saya memiliki versi perakitan waktu dari beberapa rutinitas blok-copy dan line baik rasa ASM dan MMX. Pada saat SSE keluar, kompiler melakukan pekerjaan yang sangat baik untuk mengoptimalkan C, dan komputer hanya lebih cepat, bahwa apa yang sudah sangat cepat jauh lebih cepat, bahwa pemeliharaan assmebly untuk berbagai platform/kompiler yang usang. Setelah Anda memiliki gambar yang dapat Anda gambar, maka itu hanya masalah mendapatkan sistem untuk menunjukkannya, jadi antarmuka Windows dilakukan, dengan niat hanya Linux Framebuffer (yang tidak pernah sangat cepat).
Jadi, mengingat ini sebagai platform, Dekware sebagai aplikasi yang didasarkan pada karung berbentuk dan akhirnya terwujud; berfungsi sebagai perlengkapan uji untuk perpustakaan.
Jadi ada satu perpustakaan gambar dan perpustakaan render, jadi mereka semua dikemas ke dalam satu paket besar. (CMake masih memiliki opsi build_monolithic, yang mungkin cukup rusak sekarang). Saya pada saat itu memainkan banyak lumpur menggunakan Dekware (bahkan mendukung Dekware untuk orang lain yang berlari di FreeBSD, dengan non-GNU Make; betapa sakitnya ... apakah saya menyebutkan, saat itu saya menggunakan Make, dan memiliki banyak berbagai rasa Makefile untuk banyak sistem?) ... Pokoknya, ini benar-benar asal karung; Sebelum itu hanya 'umum' setelah pola yang saya pelajari di pekerjaan saya sebelumnya. Sebuah karung adalah tas besar. Sebuah tas bisa ditahan seperti 5 tas, tetapi satu karung dapat menampung seperti 25 tas. Kantong adalah kelompok agregat dasar, atau sub-modul ... karya yang sendiri bisa menjadi ommitted dan tidak memengaruhi hal lain; dan Sack berisi banyak tas.
Jadi ada pekerjaan baru, membangun perangkat lunak baru, dan saya dapat memanfaatkan karung dan membangun aplikasi dengan sangat cepat yang akan berjalan di Windows atau Linux dengan kode yang sama dan tidak ada #IFDEF. Saya mengembangkan lapisan msgsvr menggunakan antrian pesan SYSVIPC, dan melakukan driver tampilan umum untuk aplikasi; Sejak itu saya kehilangan itu, saya kira saya memutuskan itu cukup rusak sehingga perlu dibunuh dan diperbarui. Pada saat itu saya memiliki OpenGL, GL2, GLES, QNX, WebSocket/HTML Canvas Display Driver; Dan sistem pesannya terlihat bagus, tapi benar -benar sangat buruk. (Masih ada di sana, dan beberapa hal masih menggunakannya; itu berhasil ....) Di sini, pada pekerjaan baru ini, saya harus mempresentasikan perpustakaan saya kepada orang lain; Saya tidak menyadari bagaimana 'karung' bisa berarti sesuatu yang sepenuhnya selain yang saya maksudkan. Menjadi Espcailly buruk ketika saya membuat proyek ini (susu - kit tata letak antarmuka modular), yang didasarkan pada karung saya; atau berasal dari ...
Dengan waktu, baik untuk tujuan demonstrasi, pengujian, dan utilitas umum, ada folder 'utils' di bawah karung yang merupakan semacam aplikasi yang sangat kecil berdasarkan karung; dan folder 'game' dengan hal -hal yang lebih dekat dengan aplikasi. Jika tidak ada alasan lain selain kode referensi.
Jadi ada pustaka matematika vektor (remeber kembali untuk geomtry konstruktif?), Perpustakaan matematika fraksi, yang menyimpan nomor bilangan bulat/penyebut; Ini digunakan untuk keperluan penskalaan di tas GUI. Ada pembungkus untuk pengatur waktu; Seperti Windows Settimer, ada addtimer (); pengatur waktu dan utas (threadto () alih -alih pthread_create/createThread/....).
Intershell adalah program yang dimaksudkan untuk produksi cepat aplikasi fungsi khusus layar penuh (antarmuka kios, tampilan dan papan nama). Ini mendukung jendela transparan, sehingga Anda dapat melapisi konten statis di atas konten animasi yang ada mungkin diputar dengan sesuatu seperti VLC (meskipun ada utilitas kecil untuk memutar video hanya menggunakan FFMPEG sebagai kontrol dropin di intershell).
Sumber umumnya terpisah, membutuhkan ketergantungan paling sedikit dari orang lain. Suatu hari ini harus disisir menjadi pohon ketergantungan aktual yang dapat dimanfaatkan pada tingkat yang lebih tinggi.
if( options/version == 1 ) option set options/version=2... option default otheroption/app/color=12344Dan di suatu tempat yang dipesan dalam proses proses di atas ... 11), memungkinkan mendaftarkan nilai, fungsi, dan jenis untuk konsumsi selanjutnya. PSI Control Registry didasarkan pada pohon registri ini. Nama -nama di pohon dapat dibuang untuk menjelajah nanti (debugging like, di mana itu berakhir?). Modul ini juga merupakan perpustakaan DeadStart yang membaca antarmuka.conf dan menangani memuat modul tambahan, atau mengkonfigurasi alias ke antarmuka berdasarkan opsi yang ditentukan. (Ini layak untuk setidaknya seluruh wikipage)
12 ... n) Banyak utilitas kecil yang ditulis dengan perpustakaan abstraksi ini yang umumnya bekerja pada semua sistem.
Beberapa fungsi dasar yang berbeda - membuat proses, menangani soket secara efisien, abstraksi sistem file (bahkan contoh sistem file virtual, yang menunjukkan bagaimana Anda dapat mengimplementasikan antarmuka sistem file Anda sendiri), ping (soket mentah), ARP, driver whois kueri yang sedikit usang sekarang, Windows Service Hook untuk menulis layanan Anda sendiri. Bahkan contoh layanan yang hanya menjalankan yang dapat dieksekusi secara sewenang -wenang. Sistem terjemahan bahasa (tidak ada yang istimewa atau ajaib).
n+1) intershell; Ini adalah penangan tata letak aplikasi generik. Ini menangani plugin tingkat tinggi dengan kontrol generik yang dapat ditempatkan dengan mudah bahkan setelah penempatan. Plugin kecil dapat dengan mudah dimuat melalui antarmuka yang menyediakan antarmuka acara yang mudah ke kode pengguna.
n+10) Dekware - semua hal di atas; Ini dapat memuat intershell, lalu memperpanjang tombol untuk memberikan skrip. Terminal, utilitas pemrosesan skrip umum ...
Perpustakaan gambar dan render terhubung melalui antarmuka. Antarmuka adalah struct dari pointer fungsi yang diminta oleh nama. Antarmuka mungkin alias, jadi jika video memuat sebagai 'video.opengl' alias yang disebut 'video' dapat dibuat untuk memilih mana dari beberapa yang disediakan secara default.
Gambar berwarna 32 bit; Ada fungsi untuk menyediakan DWORD yang dipesan platform untuk membuat warna dari komponen atau mendapatkan komponen dari warna. Secara internal hanya ada beberapa loop ketat yang dioptimalkan untuk transfer dan operasi warna 32 bit. Kembali pada tahun 2000 saya mencari '64 bit color 'yang ada secara internal pada kartu video untuk presisi yang lebih tinggi (lebih sedikit desimal presisi yang hilang) ... tetapi umumnya pengguna tidak dapat membedakan setiap tingkat 256 warna sehingga lebih dari cukup.
Dukungan Linux Melalui Navtive X Now Android dapat menggunakan Windows GLES2 atau Native Framebuffer (AnativeWindow?) Dapat menggunakan Win32 Windows, OpenGL, D3D (secara kasar), di OpenGL, Windows/Controls dibuat berubah menjadi permukaan di ruang 3D, yang dapat diterjemahkan di dan sekitar objek 3D lainnya. (Inilah sebabnya mengapa lapisan gambar adalah antarmuka pluggable, karena operasi menggambar berubah menjadi panggilan OpenGL). Semua dapat menggunakan proxy yang menyediakan interafce jaringan yang dapat dihubungkan oleh browser, perintah draw diselesaikan ke Brwser untuk melakukan ...
Memulai lapisan vulkan, yang akan menyederhanakan beberapa hal. Antarmuka gambar OpenGL untuk shader benar -benar dapat menggunakan vulkan sebagai backend ... tapi mereka agak fleksibel sekarang ... jadi mungkin menerapkan lapisan API yang lebih dalam dengan cara vulkan akan dilakukan.
Ini lebih baik diimplementasikan sebagai simpul GUI
Ini adalah perpustakaan kontrol yang dibangun di atas panggilan balik terdaftar dari kelas kontrol. Perpustakaan dibangun di atas antarmuka gambar dan renderer ... itu melacak hal -hal tingkat yang lebih tinggi seperti slider, listbox, tombol, dan menyediakan ekstensi khusus berdasarkan setiap kelas.
Produk Dekware Build adalah klien/lumpur lumpur. Dokumentasi dan unduhan versi prebuilt tersedia di d3x0r.org atau www.d3x0r.org.
Node addon yang memperlihatkan dukungan perpustakaan inti ke JavaScript. Menyediakan WebSockets, HTTP, JSON, JSOX Parsers, antarmuka SQLite/ODBC.
Paket NPM dan Repositori Git
Node Addon yang mencakup semua antarmuka dari Sack.VFS, tetapi juga mulai mengimplementasikan antarmuka ke subsistem GUI.
Paket NPM dan Repositori Git.
Repositori git adalah cabang yang berakar pada master karung.vfs, dan hanya penambahan antarmuka yang ada; Meskipun itu berubah dari menggunakan amaglamasi karung.cc, ia menggunakan proyek eksternal CMake untuk mengunduh repositori karung dari GitHub.