All Projects → caraus-ecms → Tanya

caraus-ecms / Tanya

Licence: mpl-2.0
GC-free, high-performance D library: Containers, networking, metaprogramming, memory management, utilities

Programming Languages

d
599 projects
metaprogramming
66 projects
dlang
54 projects

Projects that are alternatives of or similar to Tanya

Dlib
Allocators, I/O streams, math, geometry, image and audio processing for D
Stars: ✭ 182 (+160%)
Mutual labels:  utility-library, networking, containers
Caf
Cancelable Async Flows (CAF)
Stars: ✭ 1,027 (+1367.14%)
Mutual labels:  async, library
Cilium
eBPF-based Networking, Security, and Observability
Stars: ✭ 10,256 (+14551.43%)
Mutual labels:  networking, containers
Vibe.d
Official vibe.d development
Stars: ✭ 1,043 (+1390%)
Mutual labels:  async, networking
Handle Path Oz
Android Library to handle multiple Uri's(paths) received through Intents.
Stars: ✭ 36 (-48.57%)
Mutual labels:  async, library
Google Books Android Viewer
Android library to bridge between RecyclerView and sources like web page or database. Includes demonstrator (Google Books viewer)
Stars: ✭ 37 (-47.14%)
Mutual labels:  async, library
C Utils
Tiny, modular, drop-in, library of some most commonly used utility methods for C (embedded) applications. Intended to be used as a git-submodule inside your projects to kickstart development. See https://c-utils.gotomain.io for more details.
Stars: ✭ 47 (-32.86%)
Mutual labels:  library, utility-library
Felix
Project Calico's per-host agent Felix, responsible for programming routes and security policy.
Stars: ✭ 871 (+1144.29%)
Mutual labels:  networking, containers
Aiodine
🧪 Async-first Python dependency injection library
Stars: ✭ 51 (-27.14%)
Mutual labels:  async, library
Cdcontainers
Library of data containers and data structures for C programming language.
Stars: ✭ 57 (-18.57%)
Mutual labels:  library, containers
Macfinder
An iOS Library that helps you find the MAC Address of a specific IP
Stars: ✭ 57 (-18.57%)
Mutual labels:  library, networking
Verwalter
A tool which manages cluster of services
Stars: ✭ 34 (-51.43%)
Mutual labels:  networking, containers
Awesome Scalability Toolbox
My opinionated list of products and tools used for high-scalability projects
Stars: ✭ 34 (-51.43%)
Mutual labels:  networking, containers
Uvloop
Ultra fast asyncio event loop.
Stars: ✭ 8,246 (+11680%)
Mutual labels:  async, networking
Restless
Express.js api, type safe validations and more
Stars: ✭ 32 (-54.29%)
Mutual labels:  async, library
Nff Go
NFF-Go -Network Function Framework for GO (former YANFF)
Stars: ✭ 1,036 (+1380%)
Mutual labels:  networking, containers
Quantumgate
QuantumGate is a peer-to-peer (P2P) communications protocol, library and API written in C++.
Stars: ✭ 62 (-11.43%)
Mutual labels:  library, networking
Gitter Api
[production-ready] Gitter API implementation for php 7.0+ allowing sync, async and streaming access.
Stars: ✭ 11 (-84.29%)
Mutual labels:  async, library
Brmgr
Manage bridge devices and provide DHCP and DNS services to connected interfaces.
Stars: ✭ 11 (-84.29%)
Mutual labels:  networking, containers
Pnet
High level Java network library
Stars: ✭ 49 (-30%)
Mutual labels:  library, networking

Tanya

Build Status Build status codecov Dub version Dub downloads License

Tanya is a general purpose library for D programming language.

Its aim is to simplify the manual memory management in D and to provide a guarantee with @nogc attribute that there are no hidden allocations on the Garbage Collector heap. Everything in the library is usable in @nogc code. Tanya provides data structures and utilities to facilitate painless systems programming in D.

Overview

Tanya consists of the following packages and (top-level) modules:

  • algorithm: Collection of generic algorithms.
  • async: Event loop (epoll, kqueue and IOCP).
  • bitmanip: Bit manipulation.
  • container: Queue, Array, Singly and doubly linked lists, Buffers, UTF-8 string, Set, Hash table.
  • conv: This module provides functions for converting between different types.
  • encoding: This package provides tools to work with text encodings.
  • format: Formatting and conversion functions.
  • functional: Functions that manipulate other functions and their argument lists.
  • hash: Hash algorithms.
  • math: Arbitrary precision integer and a set of functions.
  • memory: Tools for manual memory management (allocators, smart pointers).
  • meta: Template metaprogramming. This package contains utilities to acquire type information at compile-time, to transform from one type to another. It has also different algorithms for iterating, searching and modifying template arguments.
  • net: URL-Parsing, network programming.
  • network: Socket implementation. network is currently under rework. After finishing the new socket implementation will land in the net package and network will be deprecated.
  • os: Platform-independent interfaces to operating system functionality.
  • range: Generic functions and templates for D ranges.
  • test: Test suite for unittest-blocks.
  • typecons: Templates that allow to build new types based on the available ones.

NogcD

To achieve programming without the Garbage Collection tanya uses a subset of D: NogcD.

Allocators

Memory management is done with allocators. Instead of using new to create an instance of a class, an allocator is used:

import tanya.memory;

class A
{
    this(int arg)
    {
    }
}

A a = defaultAllocator.make!A(5);

defaultAllocator.dispose(a);

As you can see, the user is responsible for deallocation, therefore dispose is called at the end.

If you want to change the defaultAllocator to something different, you probably want to do it at the program's beginning. Or you can invoke another allocator directly. It is important to ensure that the object is destroyed using the same allocator that was used to allocate it.

What if I get an allocated object from some function? The generic rule is: If you haven't requested the memory yourself (with make), you don't need to free it.

tanya.memory.smartref contains smart pointers, helpers that can take care of a proper deallocation in some cases for you.

Exceptions

Since exceptions are normal classes in D, they are allocated and dellocated the same as described above, but:

  1. The caller is always responsible for destroying a caught exception.
  2. Exceptions are always allocated and should be always allocated with the defaultAllocator.
import tanya.memory;

void functionThatThrows()
{
    throw defaultAlocator.make!Exception("An error occurred");
}

try
{
    functionThatThrows()
}
catch (Exception e)
{
    defaultAllocator.dispose(e);
}

Built-in array operations and containers

Arrays are commonly used in programming. D's built-in arrays often rely on the GC. It is inconvenient to change their size, reserve memory for future use and so on. Containers can help here. The following example demonstrates how tanya.container.array.Array can be used instead of int[].

import tanya.container.array;

Array!int arr;

// Reserve memory if I know that my container will contain approximately 15
// elements.
arr.reserve(15);

arr.insertBack(5); // Add one element.
arr.length = 10; // New elements are initialized to 0.

// Iterate over the first five elements.
foreach (el; arr[0 .. 5])
{
}

int i = arr[7]; // Access 8th element.

There are more containers in the tanya.container package.

Immutability

Immutability doesn't play nice with manual memory management since the allocated storage should be initialized (mutated) and then released (mutated). immutable is used only for non-local immutable declarations (that are evaluated at compile time), static immutable data, strings (immutable(char)[], immutable(wchar)[] and immutable(dchar)[]).

Unsupported features

The following features depend on GC and aren't supported:

  • lazy parameters (allocate a closure which is evaluated when then the parameter is used)

  • synchronized blocks

Development

Supported compilers

DMD GCC
2.087.1 gdc trunk

Further characteristics

  • Tanya is a native D library

  • Tanya is cross-platform. The development happens on a 64-bit Linux, but it is being tested on Windows and FreeBSD as well

  • Tanya favours generic algorithms therefore there is no auto-decoding. Char arrays are handled as any other array type

  • The library isn't thread-safe yet

  • Complex numbers (cfloat, cdouble, creal, ifloat, idouble, ireal) aren't supported

Feedback

Any feedback about your experience with tanya would be greatly appreciated. Feel free to contact me.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].