Lexing separately is cleaner in that the lexer's only job is to produce tokens and then the parser's only job is to consume tokens and produce e.g. an AST. It also means that you can use that token stream for other things that don't require a full parse (e.g. for syntax highlighting). The disadvantage is that you're often doubling the allocations and increasing the memory footprint. I alternate between separate lexer, combined recursive descent parser and generated PEG parsers depending on what is more important: speed + maintainability, speed of execution or speed of development
If you find the code wants factoring out (if you don't, just leave it be, parsers are wonderful things to have written but IME writing them is generally a labour of love) then that split tends to be very natural and works well in the vast majority of cases.
It's also worth having a poke around at some of the Racket community's Language Oriented Programming efforts, they usually have a split they call 'reader' versus 'expander' that I found helped me get my head around how the dividing line can be drawn and why you'd want to.
(Racket's approach isn't quite lexer vs. parser AFAICT but while I at least -think- I've understood it well enough to use ideas, I'm not going to pretend I understand it well enough to provide a correct explanation, let alone a well written one)
If you don't think you're missing out, you're not. I think it could be preference.
I just prefer for a lexer to be responsible for handling characters, and a parser be responsible for handling tokens. So Single Responsibility Principle.
I believe the point being made is that while it is possible to merge lexing and parsing with recursive descent parser, it is not essential to this style, and separating lexing and parsing while doing recursive descent parser is also a legitimate approach.
I’ve used MergerFS and SnapRAID for my media server for about two years. Together they’re really flexible and I’ve been able to drop extra drives into the array as I’ve needed the storage. On that capability alone I highly recommend using them.
I haven’t had a failure yet but I imagine I wouldn’t be in trouble unless I lost a significant portion of my parity drives at the same time.
The last five companies I’ve worked for, three large, one tiny start up, and two msb’s, extensively used A/B and split testing to carefully fine tune every funnel and product to maximize conversion. Most of my job for the last decade has been moving split points around form flows and capturing metrics to show what caused a split to occur. I talk to less than more people that don’t use this practice.
I’ve run splits for everything from background colors to copy changes. If product management anticipates some facet could influence outcome, then it will be tested.
Be super careful with that setup! I did the same with a pair of 32” curved 4k monitors and they were large enough that I was slowly injuring my neck to look at the lower halves of the monitors. I have them oriented in landscape side-by-side now, and they’re honestly just too large even in that arrangement, but I’m at least not hurting like I was. That’s going to be one impressive workspace if it works for you!
If they aren’t paywalled, they’ll hijack ctrl+c in code snippets and give you the option to tweet the snippet. Like what the actual fuck, I’ll find it elsewhere if I don’t figure it out on my own.
ECS is bog standard in a lot of smaller game engines. It’s not new, I first worked with it ~2010 while hacking some Flash stuff together, and I use it frequently when I hack together games in other engines. I’m really baffled by how Unity would be able to patent this.
Archetypes are a conceptually simple implementation optimization (group similarly-populated objects) not unique to ECSes - e.g. v8 organizes javascript objects based on their "shape" (again, grouping similarly-populated objects, based on their "properties" instead of their "components") (2017 article: https://v8.dev/blog/fast-properties .)
You can add all kinds of automagic parallelizing and filtering libraries (which I imagine have some overlap with database query optimization and scheduling in their fundamentals), but the basics are incredibly trivial - to the point where you might re-invent it by accident without knowing it has a name.
Yeah I had never heard of ECS until about a year ago, yet if you could look at the whiteboard on my wall from 2 years ago you'd find a diagram for a primitive version of an ECS I came up with as a hypothetical. Idk understand how tf that could be patentable if its something a former 2.7 gpa CS student could come up with on a whiteboard.
We adopted a border collie around 1.5 years old two years ago with this same behavior. He was completely paranoid and would piss everywhere if you touched him in certain places or came close too quickly. He really would turn into a shaking blob of jello around strangers, and would lose his shit around any of our Asian man friends or even around them in public, he’d void his bladder and back away barking and snarling.
Took a while for him to get comfortable and after giving him a lot of positive reinforcement and space he’s become the most extroverted love bug I’ve ever met. He regularly smashes up against me when I’m on the couch and at the most inconvenient times because he’s got the grace of an unsupported blob of ballistics gel, but what I love most about his growth over the last two years is that now he’ll even try to put his nose under unsuspecting pedestrian’s hands on walks! Even if they’re Asian men!