All Projects → torkleyy → Nitric

torkleyy / Nitric

Licence: other
[ABANDONED] General-purpose data processing library. Mirror of https://gitlab.com/nitric/nitric

Programming Languages

rust
11053 projects
processing
702 projects

Labels

Projects that are alternatives of or similar to Nitric

Gopup
数据接口:百度、谷歌、头条、微博指数,宏观数据,利率数据,货币汇率,千里马、独角兽公司,新闻联播文字稿,影视票房数据,高校名单,疫情数据…
Stars: ✭ 1,229 (+1265.56%)
Mutual labels:  data
Rain
Visualize vertical data inside your terminal 💦
Stars: ✭ 84 (-6.67%)
Mutual labels:  data
Rest Hooks
Delightful data fetching for React.
Stars: ✭ 1,276 (+1317.78%)
Mutual labels:  data
Row Types
A Haskell library for open records and variants using closed type families and type literals
Stars: ✭ 82 (-8.89%)
Mutual labels:  data
Deeplearning Mindmap
A mindmap summarising Deep Learning concepts.
Stars: ✭ 1,251 (+1290%)
Mutual labels:  data
Ecs Pipeline
☁️ 🐳 ⚡️ 🚀 Create environment and deployment pipelines to ECS Fargate with CodePipeline, CodeBuild and Github using Terraform
Stars: ✭ 85 (-5.56%)
Mutual labels:  ecs
Qlib Server
Qlib-Server is the data server system for Qlib. It enable Qlib to run in online mode. Under online mode, the data will be deployed as a shared data service. The data and their cache will be shared by all the clients. The data retrieval performance is expected to be improved due to a higher rate of cache hits. It will consume less disk space, too.
Stars: ✭ 81 (-10%)
Mutual labels:  data
Opensourcecontributors
Find all contributions for a user through the GitHub Archive
Stars: ✭ 88 (-2.22%)
Mutual labels:  data
Lockstepplatform
Stars: ✭ 84 (-6.67%)
Mutual labels:  ecs
Openfintech
Opensource FinTech standards & payment provider data
Stars: ✭ 87 (-3.33%)
Mutual labels:  data
Rust Game Development Frameworks
List of curated frameworks by the **Game Development in Rust** community.
Stars: ✭ 81 (-10%)
Mutual labels:  ecs
Vault Gatekeeper
A small service for securely delivering Vault authorization keys to Mesos tasks and ECS containers.
Stars: ✭ 83 (-7.78%)
Mutual labels:  ecs
Core
Open source Dota 2 data platform
Stars: ✭ 1,266 (+1306.67%)
Mutual labels:  data
Zhihu Oauth
尝试解析出知乎官方未开放的 OAuth2 接口,并提供优雅的使用方式,作为 zhihu-py3 项目的替代者,目前还在实验阶段
Stars: ✭ 1,237 (+1274.44%)
Mutual labels:  data
D3vue
A D3 Plugin for VueJS
Stars: ✭ 87 (-3.33%)
Mutual labels:  data
Hydrogen
🎈 Hydrogen. Voted (by me) the world's lightest static-site generator built with TypeScript ❤ It uses 🔥 lit-html inspired templating for super duper performant template generation.
Stars: ✭ 80 (-11.11%)
Mutual labels:  data
Terraform Aws Ecs Codepipeline
Terraform Module for CI/CD with AWS Code Pipeline and Code Build for ECS https://cloudposse.com/
Stars: ✭ 85 (-5.56%)
Mutual labels:  ecs
Svg To Geojson
Upload SVG, return GeoJSON.
Stars: ✭ 88 (-2.22%)
Mutual labels:  data
Paster
Pasting a text data from a clipboard directlly to Sketch text layers [Sketch plugin]
Stars: ✭ 88 (-2.22%)
Mutual labels:  data
Tksheet
Python 3.6+ tkinter table widget for displaying tabular data
Stars: ✭ 86 (-4.44%)
Mutual labels:  data

nitric(ABANDONED)

Build Status Code coverage Crates.io API Docs

General-purpose data processing library.

Status notes: highly experimental, unfinished, work in progress, not recommended for use

This library is meant as a successor for Specs, a parallel ECS library. However, nitric aims to be more general and composable than Specs. In fact, Specs can be implemented as a frontend for nitric once this library is complete.

Motivation

Specs has many problems, both big and small. The library grew big without much planning and as it is now this will continue and make it very hard to maintain. That's what made me think about what I want to create. This is what I ended up with:

Vision

The vision for nitric is to provide a set of crates that evolve as the standard way to solve data processing problems. There were already very interesting use cases for Specs, including using it for a compiler and performing larger simulations, both outside of Specs' original scope (ECS for game development). This is what I intend to make nitric suitable for. So to list a few examples of what nitric could be used for in the future:

  • game development
  • game physics
  • simulations
  • compilers
  • data validation
  • Graphical User Interfaces

The question of how to structure your library/application is a very common one, everywhere in programming. The plan for nitric is not to force any of them, but to provide useful and modular facilities that allow for specific patterns (e.g. Entity Component System (1)), and to provide "recipes", similar to the Rust cookbook that show how common tasks can be solved. Nice side effects of that are that we can work on one implementation, that is efficient and can allow for neat extra functionality (debugging facilities, profiling, easy multi-threading, etc.).

(1) for ECS, also see this great presentation by Catherine West

Philosophy

nitric will be a collection of crates all about processing data. All of its crates follow this philosophy:

  • Only solve a single problem, in a reasonably composable way
  • Expose a general, composable and robust API (also refer to the API design document)
    • APIs should either be designed to not produce any error cases or return a Result with only the possible error conditions
    • Do not assume how the API is being used (-> composability)
    • Expose internals in a *-internals crate for stability by default, with the option to opt into more unstable facilities
  • Impose minimal friction to use nitric
    • The goal is for nitric to be cheap and easy to use in one place of your project for solving a particular problem
    • nitric is meant to be compatible with other data structure / ECS / CGS libraries, e.g. Specs, froggy, etc. instead of competing with them

Using nitric as ECS

How will this allow you to use nitric instead of Specs? Here's the tentative design for ECS:

  • nitric-entity: Provides entity allocators, storages, and with that mappings between entities and components

This would already be enough to have an ECS. Systems can simply be functions that accept references to the storages and eventually the allocator. In fact, that is the recommended way for libraries to expose their API; libraries should not assume how the code is executed. For example:

(pseudo code for now)

pub fn process_local_transforms(
    local: &Storage<LocalTransform>,
    global: &mut Storage<GlobalTransform>,
    parents: &Storage<Parent>)
{
    // compute global transforms    
}

If those component storages come from a dynamically typed, string mapped HashMap, fine. If they are stored in a struct - works, too. How systems are run also doesn't matter.

Now, there surely are other things Specs users would miss, so the next crate will be...

  • nitric-world

As you might have guessed, this provides a map that can store arbitrary component storages. In contrast to Specs, I also plan to include support for multiple values of the same type by allowing an additional key (e.g. a string).

  • nitric-graph

This will be a re-worked version of shred's Dispatcher, allowing to parallelize data processing (execution of systems). A "system" will simply be a FnMut(T) -> R, which means it's up to the user how the data is fetched (nitric will provide solutions for this, but it doesn't force you to use any of them).

Structure

The main crate, nitric will simply serve as a top-level crate for re-exporting all nitric-* crates. However, since everything is optional, nitric is controlled with Cargo features, only exporting the crates for which you enable the flag.

Current crates:

FAQ

What does this mean for Specs?

For the immediate future, this has no effect on Specs. It will not be deprecated. The biggest change for now is that I won't spend much time on it (just merge PRs and fix critical bugs).

As for when nitric is in a usable state, that has yet to be seen. In any case, it should be possible to make Specs a thin wrapper over nitric crates (if that's necessary). All that depends on how well nitric will be adopted.

What does this mean for Amethyst?

Amethyst (a game engine that makes heavy use of Specs) will continue to use Specs. Whether it will use nitric in the future will be decided by all members, through the usual RFC process.

Contribution

nitric can only exist with lively contributions and every help is very much appreciated!

Please note that in its current state, however, the project might not be very friendly for contributions. If you're still interested in helping out, please contact me (@torkleyy) so we can make sure there's no duplicated effort.

License

All nitric projects are, except stated otherwise, dual-licensed under Apache-2.0 / MIT. You're free to choose one of both licenses.

Every contribution made to this project is assumed to be licensed according to these terms.

See LICENSE, docs/LICENSE-MIT and docs/LICENSE-APACHE for more information.

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].