suis_siva
Joined 7 months ago
Joined 7 months ago
I respect andrewrk and Jarred in different ways. My understanding are that neither are media trained. Very patronizing post from andrewrk and shows his hostility towards Jarred. I mostly agree with the core meat and potatoes of his post, but the hostile tone, the snarky VC-related remarks, the fact that *most* of his comments felt like a defensive remark.
Yes -- bun has problems. Yes -- bun moves very quickly. Yes -- the 1.4 post seems quite heavily copy-written. Yes -- Jarred doesn't have a syseng background.
But god fucking damn Andrew, you have some problems too -- you have your head up your ass. Every Zig feature that people would love to have, which you personally disagree with will NEVER enter Zig. Why do I still need anonymous structures for lambdas? Sure, no closures I get, but no lambdas? My friends at Tesla tried Zig and then churned to Rust too, for the very same questionable leadership model. Zig will never be a general purpose language because the people -- who have many different generic and general purposes for a language -- simply don't get what they want. Zig is an andrewrk-purpose language at best. Is this leadership for the future of Zig?
I don't want to slander andrewrk. With the brief hiss I've provided, I think he does a more-or-less great job with Zig. It's a really small team, and they're really productive too. The ZSF is a really nice set of people too, from my brief fly-on-the wall moments with meetings with them. They care about Zig and they work really darn hard for it. I've also learned a huge amount from andrewrk, and I respect that he's an off-the-cuff guy. Surprisingly, I am too. Chances are, in his shoes, I'd probably get equally rage-baited to write a similar post.
But reflecting upon this, this is just not productive. These kind of public outlashes are not healthy for the language, don't cause good publicity, and could have been a useful reflection point for the ZSF -- not in terms of money, but in terms of what they want to do with the language. Instead of being a strawman at Jarred, it could have been:
- Bun's not the greatest code quality. (And it really isn't -- I was very stressed by this at work) - Zig doesn't aim to give you tools to manage complexity. We expect the developer to adhere to high code quality. (And this is also very true, coming from C++ -- I was also very stressed by this reality.) - The AI-generated rewrite is not a good idea for reasons XYZ (and I personally think this is true). - We are grateful for Bun being part of the ecosystem, but agree it doesn't adhere to our ethos, nor design philosophy, so it makes sense.
The discussion in the Rust circles (which I am a part of too) is completely different and so much more nuanced -- folks are talking about the code, how many unsafes there are, some of the very valid concerns, but the tone is significantly less enraged.
This is a perfectly legal, polite way to leech on top of the media attention (I mean we are all doing it), maybe throw in some spicy bits with references to some GH issues to stir Twitter up but remain polite and respectful. This was just rude for no good reason, esp. because Jarred CLEARLY was only very respectful towards ZSF.
Personally, I won't run Bun in prod, but I no longer write any Zig either. Good old node for me, and good old C, Rust and C++ too.
I'll give Chatto a shot, but one of the things I'd love to have is interop with Slack and Discord. Is that on the roadmap or no? I saw that there's a Slack -> Chatto migration tool, but the unfortunate reality is that Slack is used by customers, so even if we internally use Chatto, compatibility with Slack is a must.
Additionally, fault-tolerant languages such as Erlang/Elixir allow me to not worry about the billions of edge-cases, and let Claude aggressively implement a mostly good-enough application. With LLMs, accepting a limited amount of failure may be a necessity (depending on the business/domain), and that's exactly what the BEAM enables.
Totally recognize and agree with the lack of libraries -- that's really Elm's weakest side.
For example, https://harmont.dev's app (landing page is not Elm) has a component to render a pipeline graph called DagGraph. In React, you'd do something like
function DagGraph() {
const steps = useState<Jobs[]>([]);
const selectedJobIdx = useState<number | null>(null);
return ...;
}
In elm, I lift this up (I will keep using React syntax for the sake of wider-audience readability) function DagGraph({ steps, selectedJobIdx } : IDagGraphModel) {
return ...;
}
This allows for better testability of the graph view. The parent then injects the model function PipelinePage({ graphMode, selectedPipeline }: IPipelineModel) {
return (
graphMode === GraphMode.DagView
? <DagGraph steps={selectedPipeline.steps} selectedJobIdx={selectedPipeline.selectedStep} />
: <TableView steps={selectedPipeline.steps} selectedJobIdx={selectedPipeline.selectedStep} />
);
}
Now -- we need to bubble up the selected pipeline index based on when the user clicks a node in the DAG view. I personally prefer to do this completely orthogonally to the view rendering pipeline (which remains mostly pure). I create a new model, and define the message relationships to it: namespace PipelineState {
interface Model {
steps: Step[];
selectedStep: number | null;
};
interface ISelectStepMessage { stepIdx: number };
interface IUnselectStepMessage;
type Message = ISelectStepMessage | IUnselectStepMessage;
function update(m: Model, msg: Message): Model { return...; }
}
// main model
interface Model {
pipeline: PipelineState.Model,
}
type Message = PipelineState.Message | SomeOtherMessage | ...;
function update(m: Model, msg: Message): Model {
switch (msg) {
case PipelineState.Message as msg:
return update(m, msg);
...
}
}
And this seems to work quite well. Personally, I really like this architecture, because it enables me to think about state and UI separately. One of the really big gripes I have with React is how most components end up with `useEffect` and `useState`, and then immediately become untestable. Elm literally doesn't allow for that.At the end of the day, there's a trade-off -- my logic is no longer localized to the "component" relevant to rendering the pipeline DAG. I never have one file open editing Elm code, but I'm a vim user so it doesn't bother me. In some ways, semantically, I think it makes sense to split the "state backend" of your UI from your UI, in my opinion.
Most of my app states are represented as state machines (coming from embedded this is quite natural) and UI is represented as pure transformations of that state.
With Elm, it really feels like you reason about state and UI separately, and I actually prefer that, both for testability and that's just how my brain works.
Apologies for the spam!
I'll put it on the list of things for the next release! Thanks =)
Sonny brought me so much joy in life. I found these fun stories https://www.syncopatedjustice.com/p/three-sonny-rollins-stor... about him and I'll quote one here:
> One day Sonny and Max Roach were walking down Seventh Avenue in New York and a man approached them. “Max, what’s the most important city in the world,” he asked. > > “New York.” > “No, that’s not it.” > > Max paused for a moment and then responded, “Paris, the City of Light.” > “No Max, what is the most important city in the world?” > > Max turned to Sonny and asked, “Do you know?” Sonny shook his head no. > “Alright, I give up, what is the most important city in the world?” > > “Generosity.”
He didn't have an easy life, and definitely wasn't a daisy himself, but he was a damn good musician and brought so much happiness.