Coder Social home page Coder Social logo

eur00t / nim-stew Goto Github PK

View Code? Open in Web Editor NEW

This project forked from status-im/nim-stew

0.0 0.0 0.0 564 KB

stew is collection of utilities, std library extensions and budding libraries that are frequently used at Status, but are too small to deserve their own git repository.

Nim 100.00%

nim-stew's Introduction

stew - status e-something w-something

License: Apache License: MIT Stability: experimental Github action

stew is collection of utilities, std library extensions and budding libraries that are frequently used at Status, but are too small to deserve their own git repository.

We also use stew as a staging ground for code that has yet to be battle-tested.

Some of these libraries may eventually be proposed for inclusion in Nim or broken out into separate repositories.

Notable libraries

Libraries are documented either in-module or on a separate README in their respective folders

  • arrayops - small helpers and operations on array/openArray
  • assign2 - fast assignments (unlike the = operator in nim which is very slow)
  • bitops2 - an updated version of bitops.nim, filling in gaps in original code
  • byteutils - utilities that make working with the Nim byte type convenient
  • endians2 - utilities for converting to and from little / big endian integers
  • objects - get an object's base type at runtime, as a string
  • ptrops - pointer arithmetic utilities
  • result - friendly, exception-free value-or-error returns, similar to Option[T], from nim-result
  • shims - backports of nim devel code to the stable version that Status is using
  • sequtils2 - extensions to the sequtils module for working conveniently with seq
  • varints - helpers for working with variable length integers

Layout

stew modules are made to be fairly independent of each other, but generally follow the following layout - if you've used C++'s boost, you'll feel right at home:

# Single-module libraries
stew/small.nim # small libraries that fits in one module

# Multi-module libraries
stew/libname.nim # Main import file
stew/libname/stuff.nim # Detail import file

# Nim standard library shims that contain forwards-compatibility code to manage
# support for multiple nim versions - code in here typically has been taken
# from nim `devel` branch and `name` will reexport the corresponding std lib
# module
stew/shims/macros.nim # module that reexports `macros.nim` adding code from newer nim versions

# Tests are in the tests folder (duh!)
# To execute, run either `all_tests.nim` or specific `test_xxx.nim` files:
nim c -r tests/all_tests

Compatibility

One of the goals of stew is to provide backwards and forwards compatibility for different Nim versions, such that code using stew works well with multiple versions of Nim. If stew is not working with the Nim version you're using, we welcome patches.

You can create multiple versions of your code using the following pattern:

when (NimMajor,NimMinor,NimPatch) >= (0,19,9):
  discard
elif (NimMajor,NimMinor,NimPatch) >= (0,19,0):
  discard
else
  {.fatal: "unsupported nim version"}

Using stew in your project

We do not recommend using this library as a normal nimble dependency - there are no versioned releases and we will not maintain API/ABI stability. Instead, make sure you pin your dependency to a specific git hash (for example using a submodule) or copy the file to your project instead.

Typically, you will import either a top-level library or drill down into its submodules:

import stew/bitops2
import stew/ranges/bitranges

⚠️ No API/ABI stability - pick a commit and stick with it ⚠️

Contributing to stew

We welcome contributions to stew - in particular:

  • if you feel that some part of stew should be part of Nim, we welcome your help in taking it through the Nim PR process.
  • if you're using stew with a particular Nim version, we welcome compatibility patches gated with when NimMajor .. and NimMinor ..

License

Licensed and distributed under either of

or

at your option. These files may not be copied, modified, or distributed except according to those terms.

nim-stew's People

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.