Hacker News new | past | comments | ask | show | jobs | submit login

> Having different `class` macro definitions between codebases that use sweet.js will devolve into madness.

Urgh, I just got a sinking feeling in my stomach because I know how right you are.




> Having different `class` macro definitions between codebases that use sweet.js will devolve into madness.

As long as you don't have different definitions in the same JS file, it's not really a problem because each file can be compiled down to JS independently of the others. I'd imagine you could even add a package.json flag to specify which version of a sweet.js "syntactic sugar" library to use for a given package, and npm could compile the files automatically on install.

The more transparent the sweet.js workflow can be (much like LESS/SASS is for CSS), the more likely it is to be adopted.


It could be made to work technically, certainly.

But it'd be a complete mess of a code base. Code is read much more often than written, easily understanding a code base is incredibly important, and really hard in larger systems.

If even your syntactical constructs behave subtly different (let alone the code you're writing!), you're setting yourself up for unpleasant surprises.

There's an excellent book on UX, "Don't make me think". The same applies to code: strive to reduce the cognitive load it takes to understand a piece of code as much as possible.


strive to reduce the cognitive load it takes to understand a piece of code as much as possible.

Agreed. And it seems macros can really help with that, by encouraging a DRY codebase.


As others have noted, macros in theory could really help with that. But with macros in practice, I wouldn't be so sure. Macros essentially add syntax to languages.

Syntax to help with common tasks is nice, but if you end up with lots of ad hoc syntax for lots of very divergent, and maybe not so common tasks, you're in trouble. The problem is just the multitude of syntax constructs that typically end up way underspecified, as opposed to the much more formal and strict models of a language that went through a specification process. Imagine learning not three kinds of loops (for, while, do), but 300 subtly different ones in one code base. Ugh.

On the other hand, lots of boilerplate make code unreadable just by the sheer amount of it. This is a very hard balance to strike, I'd rather err on not giving every developer on a code base the power to add new syntactical abstractions.


Even if it's consistent within files, you can still run into big problems. If the different macros supply slightly different functionality, you could end up in a situation where you have two different types of classes that can't be used interchangeably. It's not a problem if you write all the code, but once you start pulling in other code all bets are off.


It's still a problem for the poor person who has to read those different files and understand the underlying semantics.




Consider applying for YC's W25 batch! Applications are open till Nov 12.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: