Comments (8)
The easiest way would be to maintain the parsing stack as a data structure threaded through the functions instead of using recursive calls - this means we can always interrupt, return from the functions, yield and later use that state to resume the parsing from where it was left.
from jason.
I think this is a great idea!
Having multiple Rust binaries for popular targets will be nice as well as using Rustler.
We could also just provide some sort of build step for those comfortable in the Rust ecosystem as well.
Now that serde
is on stable we can (with confidence) push out stable/safe native perf for those that chose the alternative
from jason.
Yes, but we can't use serde
directly - the problem is that it is not pre-emptive, so we can't use it with regular NIFs. It's true we have dirty schedulers, but I'm pretty sure using them in high concurrency situations for this could be even slower than the pure Elixir version (that statement is not confirmed by any experiments, though).
from jason.
Yea that makes sense. I wonder how this could otherwise be done 🤔
from jason.
Yes, but we can't use serde directly - the problem is that it is not pre-emptive
This is a bit unexpected especially as Rust is meant to be highly concurrent and I can't find a proof that serde is not thread safe.
from jason.
@RumataEstor It's not about thread safety. Rust and Elixir does concurrency in different ways, Rust uses OS threads and Elixir uses lightweight processes. When serde runs it will block a scheduler until it is done running so when decoding or encoding large JSON objects you can disrupt the scheduler.
from jason.
I don’t mean it’s not thread safe - it is. Preemptive means we need to be able to pause the execution of the parser/generator at arbitrary moments to yield the scheduler thread to other elixir/erlang processes.
from jason.
After 5 years, I finally got around to this. Check out https://github.com/spawnfest/json_native!
from jason.
Related Issues (20)
- Jason fails to encode HOT 1
- Better error messaging on invalid escapes
- Issue decoding particular string HOT 5
- fails to install in rebar3 HOT 2
- Proposal: Consistent number decoding
- Configure Jason to parse keys as atoms by default for Phoenix HOT 2
- Support JSON Canonical Scheme (JCS) - RFC 8785 HOT 2
- Json file can not be decoded HOT 1
- Heads up: Jason will be an ExDoc dependency HOT 1
- Map key validity/order in Elixir 1.14 HOT 3
- Misformatted README HOT 1
- Lists with numbers can parse to ASCII whitespace HOT 2
- Support for escape: :binary_safe HOT 4
- Change behaviour of Float HOT 1
- Why '/' not valid in JSON key? HOT 2
- Better error message on invalid `@derive Jason.Encoder` options HOT 1
- Status of v1.5? HOT 2
- Plan for Jason library after Erlang/OTP 27 added native support to JSON parsing HOT 2
- Compiler warnings with Elixir v1.17.0-rc.0 HOT 2
- @derive Jason.Encoder fails with a :_ (single underscore) struct field HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jason.