Javascript to Elm artwork

71: Macros ?

Javascript to Elm

English - February 28, 2019 11:00 - 21 minutes - 17.6 MB - ★★★★★ - 4 ratings
Technology elm javascript programming Homepage Download Apple Podcasts Google Podcasts Overcast Castro Pocket Casts RSS feed

Previous Episode: 70: Haskell Serverless
Next Episode: Learn Productively

Just realized that looking at language extensions sent me down a rabbit hole on Macros, and I might have gotten myself totally turned around. 🤷🏼‍♀️

bit of history

Macros can be used to make tasks less repetitive by representing a complicated sequence of keystrokes, mouse movements, commands, or other types of input. In computer programming, macros are a tool that allows a developer to re-use code.

best explianation i have found so far

Fundamentally, macros are a way of writing code that writes other code, which is known as metaprogramming. rust docs

macro is going to happen at compile time. where a function is going to happen at run time.

code that writes code. 🤔 This is less readable, understandable, and maintainable then general functions.

Two types of macros

Declaritive w/ general metaprogramming

Matching on patterns and replacing code

Prodecural more like functions

given input -> producing output (pure)

Problem babel macros sets to solve solution

They can lead to confusion because when looking at code in a project, you might not know that there’s a plugin transforming that code. They have to be globally configured or configured out-of-band (in a .babelrc or webpack config). They can conflict in very confusing ways due to the fact that all babel plugins run simultaneously (on a single walk of Babel’s AST).

Solution

transformations with: zero config importability

Explicit is often a better pattern than implicit because it requires others to understand how things are globally configured. This is in this spirit are babel-plugin-macros designed. However, some things do need to be implicit, and those kinds of babel plugins can’t be turned into macros.

the idea of syntax macro it’s well suited for babel-plugin-macros What would it take to enable JS Macros to open stage proposals to actual implementations?

TC-39 Proposals

Picks Resources

SweetJS

Follow

JavaScript to Elm

Twitter: @jstoelm
Email: [email protected]

Jesse Tomchak

Twitter: @jtomchak

 

Twitter Mentions