OpenWrt, now 20 years old, is crafting its own future-proof reference hardware

schizoidman@lemmy.ml to Technology@lemmy.ml – 490 points –
OpenWrt, now 20 years old, is crafting its own future-proof reference hardware
arstechnica.com
51

You are viewing a single comment

Yes, I was shocked at how small it is. I had no experience working with such limited resources going into this project. Our router had 32MB of storage. At one point I was looked into adding a python interpreter, and it was like 11MB. The Lua interpreter is like 250KB. Tiny!

Also, the ternary operator has the best syntax of any language I have ever used.

x = [condition] and [true value] or [false value]

No question marks or colons or anything weird. It's a logical extension of && and || after commands in bash using keywords since it is a verbose language. I wish every language had this syntax.

For contrast, python is:

x = [true value] if [condition] else [false value]

It just seems weird to me to have the condition in the middle.

Yeah, I've always hated Python's ternary, and I use it every day at work. Though you can do the same in Python if you want:

x = [condition] and [true value] or [false value]

I consider that bad style because the dedicated syntax is preferred. You can also do similar in JS:

x = [condition] && [true value] || [false value]

The caveat in both (and Lua) is that you'll get the false value if the true value is falsey.

My favorite syntax is Rust:

x = if [condition] { [true value] } else { [false value] };

This preserves the flow you get with the ? :, allows [true value] to be falsey, and is idiomatic without having a lot of extra syntax.

My favorite thing about Lua is that tables separate numeric from string keys, so you can do this:

x = { metadata = ... }
x[1] = 3
x[2] = 4
print(#x) -- prints 2

This is really nice for representing something like an XML/HTML DOM, where numeric indices are child nodes, and string keys are attributes. Or you can store metadata about a list in the list itself (e.g. have a reference to the max value, min value, etc). It's just really nice to work with.

1 more...