mruoss
YMLR - Need help in metaprogramming for improving the deriving macro
Hey Community
Is there anybody out there with good skills in metaprogramming? I definitely have to read Chris McCord’s book at some point because I feel like I’m doing too much of what I don’t understand lately. ![]()
I am one of the maintainers of YMLR - A Yaml Encoder for Elixir and have recently refactored the library to work with a protocol for the encoder. I took the inspiration from Jason but they have implemented their __deriving__ macro in the Jason.Encoder module in a much more performant way. If anybody out there feels up for the job and has some spare time, I’d really appreciate a pull request for the improvement of the __deriving__ macro in Ymlr.Encoder
Many thanks in advance,
Michael
Most Liked
kip
I’ve taken a look and while I don’t have the time to dedicate to a PR I can offer the following observations (which may already be totally obvious to you).
-
Since the
:onlyand:exceptlists need to be known at compile time you can process them in the macro, outside thequoteblock. That will certainly give you some performance improvement and make it easier to maintain as well. -
Most encoding tasks that result in a binary (string) gain material performance benefits in encoding first to iodata and then calling
:erlang.iodata_to_binary/1at the very end. That function uses very efficient kernel system calls to convert io vectors to binaries.File.write/2and friends supportiodataas a parameter do you don’t even have to do the last call yourself and in effect theFile.write/2call will stream theiodatato disc (not exactly how it works, but close enough).
Those are the two primary differences I see with the Jason implementation being very idiomatic macros techniques.
kip
Since that narrows the scope I’ll take a first pass at a PR for point (1) tomorrow my time. Don’t expect a finished product but at least enough for you to move forward. Hopefully gets you on your way at least.
mruoss
Last Post!
mruoss
Popular in Discussions
Other popular topics
Chat & Discussions>Discussions
Latest on Elixir Forum
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
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex









