Pustaka C lintas platform yang fasih
Mendukung proyek tersebut
Dukung proyek ini dengan menjadi sponsor. Logo Anda akan muncul di sini dengan tautan ke situs web Anda. [Menjadi sponsor]
Pendahuluan (中文)
TBOX adalah pustaka C lintas platform yang mudah digunakan namun kuat.
Proyek ini berfokus untuk membuat pengembangan C lebih mudah dan menyediakan banyak modul (misalnya stream, coroutine, regex, container, algoritma ...), sehingga pengembang mana pun dapat dengan cepat memahaminya dan menikmati peningkatan produktivitas saat mengembangkan dalam bahasa C.
Mendukung platform berikut: Windows, Macosx, Linux, Android, iOS, *BSD dan lain-lain.
Dan ini menyediakan banyak opsi kompilasi menggunakan xmake:
- Rilis: Nonaktifkan informasi debug, pernyataan, pemeriksaan memori, dan aktifkan pengoptimalan.
- Debug: Mengaktifkan informasi debug, pernyataan, pemeriksaan memori, dan menonaktifkan pengoptimalan.
- Kecil: Nonaktifkan semua modul ekstensional dan aktifkan pengoptimalan ruang.
- Mikro: mengkompilasi perpustakaan mikro (~64K) untuk sistem penyematan.
Jika Anda ingin tahu lebih banyak, silakan merujuk ke: Dokumen, Github dan Gitee
Fitur
Perpustakaan aliran
- Mendukung file, data, http dan sumber soket
- Mendukung filter aliran untuk gzip, charset dan...
- Menerapkan transfer aliran
- Mengimplementasikan aliran buffer statis untuk mengurai data
- Mendukung coroutine dan mengimplementasikan operasi asinkron
Perpustakaan coroutine
- Menyediakan saklar coroutine berkinerja tinggi
- Mendukung lengan, arm64, x86, x86_64 ..
- Menyediakan antarmuka saluran
- Menyediakan antarmuka semaphore dan kunci
- Mendukung soket io dan operasi streaming di coroutine
- Menyediakan beberapa server io (http ..) menggunakan coroutine
- Menyediakan coroutine yang bertumpuk dan tanpa tumpukan
- Mendukung epoll, kqueue, polling, pilih dan IOCP
- Dukungan untuk menunggu pipa, soket, dan proses dalam coroutine dan poller secara bersamaan
Perpustakaan basis data
- Mendukung database mysql dan sqlite3 dan menghitung data menggunakan mode iterator
Perpustakaan pengurai xml
- Mendukung mode DOM dan SAX dan Mendukung xpath
Pustaka serialisasi dan deserialisasi
- Mendukung format xml, json, bplist, xplist, biner
Perpustakaan memori
- Menerapkan beberapa kumpulan memori untuk mengoptimalkan memori
- Mendukung deteksi kesalahan memori yang cepat. itu dapat mendeteksi jenis bug berikut untuk mode debug:
- akses luar batas ke heap dan global
- gunakan setelah bebas
- bebas ganda, bebas tidak valid
- kebocoran memori
Perpustakaan kontainer
- Mengimplementasikan tabel hash, daftar tunggal, daftar ganda, vektor, tumpukan, antrian, dan tumpukan min/maks. Mendukung mode iterator untuk algoritma
Perpustakaan algoritma
- Menggunakan mode iterator
- Mengimplementasikan algoritma pencarian, pencarian biner, dan pencarian terbalik
- Mengimplementasikan algoritma sortir, bubble sort, quick sort, heap sort, dan insert sort
- Mengimplementasikan penghitungan, item berjalan, item berjalan terbalik, for_all dan rfor_all
Perpustakaan jaringan
- Menerapkan dns (cache)
- Mengimplementasikan ssl(openssl, polarssl, mbedtls)
- Menerapkan http
- Menerapkan cookie
- Mendukung ipv4, ipv6
- Mendukung coroutine
Perpustakaan platform
- Menerapkan pengatur waktu, pengatur waktu cepat dan presisi rendah
- Mengimplementasikan operasi atom dan atom64
- Mengimplementasikan spinlock, mutex, event, semaphore, thread dan thread pool
- Mengimplementasikan file, operasi soket
- Mengimplementasikan poller menggunakan epoll, poll, select, kqueue ...
- Mengimplementasikan antarmuka konteks peralihan untuk coroutine
Perpustakaan rangkaian karakter
- Mendukung utf8, utf16, gbk, gb2312, uc2 dan uc4
- Mendukung mode big endian dan little endian
Perpustakaan zip
- Mendukung format gzip, zlibraw, zlib menggunakan perpustakaan zlib jika ada
- Mengimplementasikan algoritma lzsw, lz77 dan rlc
Perpustakaan utilitas
- Mengimplementasikan encoder dan decoder base32, base64
- Mengimplementasikan penegasan dan penelusuran keluaran untuk mode debug
- Mengimplementasikan operasi bit untuk mengurai data u8, u16, u32, u64
Perpustakaan matematika
- Menerapkan generator acak
- Mengimplementasikan perhitungan titik tetap yang cepat, Mendukung angka titik tetap 6-bit, 16-bit, 30-bit
Perpustakaan libc
- Mengimplementasikan antarmuka perpustakaan libc yang ringan, nama antarmuka berisi awalan
tb_xxx
untuk menghindari konflik - Mengimplementasikan ekstensi antarmuka strixxx strrxxx wcsixxx wcsrxxx
- Mengoptimalkan beberapa antarmuka yang sering digunakan, misalnya memset, memcpy, strcpy ...
- Mengimplementasikan antarmuka ekstensi
memset_u16
, memset_u32
, memset_u64
Perpustakaan libm
- Mengimplementasikan antarmuka perpustakaan libm yang ringan, nama antarmuka berisi awalan
tb_xxx
untuk menghindari konflik - Mendukung tipe float dan ganda
Perpustakaan regex
- Mendukung pertandingan dan penggantian
- Mendukung mode global/multiline/tanpa casing
- Menggunakan modul regex pcre, pcre2 dan posix
Perpustakaan hash
- Mengimplementasikan algoritma hash crc32, adler32, md5 dan sha1
- Mengimplementasikan beberapa algoritma hash string (.misalnya bkdr, fnv32, fnv64, sdbm, djb2, rshash, aphash ...)
- Mengimplementasikan generator uuid
Proyek
Beberapa proyek menggunakan tbox:
- gbox
- vm86
- membuat x
- itrace
- lagi
Bangun (xmake)
Silakan instal xmake terlebih dahulu: xmake
# build for the host platform
$ cd ./tbox
$ xmake
# build for the mingw platform
$ cd ./tbox
$ xmake f -p mingw --sdk=/home/mingwsdk
$ xmake
# build for the iphoneos platform
$ cd ./tbox
$ xmake f -p iphoneos
$ xmake
# build for the android platform
$ cd ./tbox
$ xmake f -p android --ndk=xxxxx
$ xmake
# build for the linux cross-platform
$ cd ./tbox
$ xmake f -p linux --sdk=/home/sdk # --bin=/home/sdk/bin
$ xmake
Bangun (xmake.sh)
Contoh
#include "tbox/tbox.h"
int main ( int argc , char * * argv ) {
if (! tb_init ( tb_null , tb_null )) return 0 ;
tb_vector_ref_t vector = tb_vector_init ( 0 , tb_element_str ( tb_true ));
if ( vector ) {
tb_vector_insert_tail ( vector , "hello" );
tb_vector_insert_tail ( vector , "tbox" );
tb_for_all ( tb_char_t const * , cstr , vector ) {
tb_trace_i ( "%s" , cstr );
}
tb_vector_exit ( vector );
}
tb_exit ();
return 0 ;
}
Dukungan Teknis
Anda juga dapat mempertimbangkan untuk mensponsori kami untuk mendapatkan layanan dukungan teknis, [Menjadi sponsor]
Kontak
- Email:[email protected]
- Beranda:tboox.org
- Komunitas:/r/tbox di reddit
- Ruang Obrolan:Obrolan di telegram, Obrolan di gitter
- Grup QQ: 343118190 (penuh), 662147501
- WeChat Publik: tboox-os