NullOranje
While working on a work project, I found I needed a more Elixir-like queue versus the Erlang :queue module. So I decided to write one. I liked what I did, so I’m sharing it with others.
Yaq (Yet another queue) is a double-ended queue that supports both the Enumerable and Collectable protocols. I wanted something I could use with the pipe operator, since with my use case I found myself having to write a lot of functions to make :queue work correctly.
This is my first library I’m sharing with the community. I not only wanted a library I could use in my day job, but something I could take an opportunity to learn how to “do things right” so with regards to Elixir.
Source code is available on Github: GitHub - NullOranje/yaq: Yet another queue module for Elixir · GitHub
Hex package: yaq | Hex
Documentation: API Reference — yaq v1.2.0
Any and all feedback is welcome.
Trending in Announcing
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #blog-post
- #ai
- #phoenix_html
- #elixirconf-us
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming










Showing Posts 1 to 10- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
NobbZ
I get a 404 for the GitHub repository.
Also from the examples in the documentation, I really do not like that its inspection shows the length of the queue but not the contents…
Oh, and I just realise,
Yaq.value/0isnil | term,termincludesnil, so why isnilmentioned extra here?Why is there no
Yaq.t/1which would allow us to specify the members types as well?kip
Congratulations on your first library, its a big milestone and will be much appreciated I’m sure. I’ll check it out. @NobbZ is more direct and to the point than I am and his feedback is always very valuable, if sometimes a bit abrupt.
NobbZ
I really should try polishing this
thojanssens1
Thank you for sharing your work. By the way, are there other libraries like
yaq? If so, what are the main differences?What happened to the GitHub repo?
Isn’t it interesting to know whether the passed atom may be expected to be
nilor not?NobbZ
What if is I want to store
nil? Is that not allowed?thojanssens1
Sorry, in this specific case it makes no sense to me too. I thought you meant as a general rule that
nil | termis useless, astermincludesnil; but I thought maybe sometimes it is useful to know that the library can expectnil.Again, in this case I don’t see why this needs to be clarified indeed.
NobbZ
Yes, I’m pretty sure a
@typedocwould help.mat-hek
Hmm, seems very similar to Qex. Have you tried that one?
NullOranje
That’s my fault. The repo is public now.
This was a deliberate choice. I can show the size of the
It probably shouldn’t be.
Mostly because I’m still figuring out how typespecs work.
This is probably an artifact of some thinking. The
:queuemodule I drew inspiration from returned an:emptyatom if you tried to dequeue an empty list. I guess I didn’t like the specific atom, so I think that’s why it became a nil. My own limited knowledge probably had me explicitly describe this case.Thinking back, I’m wondering if an atom would be a better empty queue return value.
NullOranje
I did, but because it is mostly wrapper for
:quque, it has some of the same issues.:quque(deliberately) does not track the size of the queue, so that is an O(N) operation, which was too slow for my use case.