Erlang's defining characteristics aren't lightweight processes and message passing, but rather its error handling philosophy. The author argues that Erlang's true power comes from embracing failure as inevitable and providing mechanisms to isolate and manage it. This is achieved through the "let it crash" philosophy, where individual processes are allowed to fail without impacting the overall system, combined with supervisor hierarchies that restart failed processes and maintain system stability. The lightweight processes and message passing are merely tools that facilitate this error handling approach by providing isolation and a means for asynchronous communication between supervised components. Ultimately, Erlang's strength lies in its ability to build robust and fault-tolerant systems.
"Learn You Some Erlang for Great Good" is a comprehensive, beginner-friendly online tutorial for the Erlang programming language. It covers fundamental concepts like data types, functions, modules, and concurrency primitives such as processes and message passing. The guide progresses to more advanced topics including OTP (Open Telecom Platform), distributed systems, and how to build fault-tolerant applications. Using humorous illustrations and clear explanations, it aims to make learning Erlang accessible and engaging, even for those with limited programming experience. The tutorial encourages practical application by incorporating numerous examples and exercises throughout, guiding readers from basic syntax to building real-world projects.
Hacker News users discussing "Learn You Some Erlang for Great Good!" generally praised the book as a fun and effective way to learn Erlang. Several commenters highlighted its humorous and engaging style as a key strength, making it more accessible than drier technical manuals. Some noted the book's age and questioned whether all the information is still completely up-to-date, particularly regarding newer tooling and OTP practices. Despite this, the overall sentiment was positive, with many recommending it as an excellent starting point for anyone interested in exploring Erlang. A few users mentioned other Erlang resources, like the "Elixir in Action" book, suggesting potential alternatives or supplementary materials for continued learning. There was some discussion around the practicality of Erlang in modern development, with some arguing its niche status while others defended its power and suitability for specific tasks.
Gleam v1.9.0 introduces improved error messages, specifically around type errors involving records and incorrect argument counts. It also adds the gleam echo
command, a helpful tool for debugging pipelines by printing values at different stages. Additionally, the release includes experimental support for Git integration, allowing Gleam to leverage Git information for dependency resolution and package management. This simplifies workflows and improves dependency management within projects, especially for local development and testing.
Hacker News users discussed the Gleam v1.9.0 release, largely focusing on its novel approach to error handling. Several commenters praised the explicit and exhaustive nature of error handling in Gleam, contrasting it favorably with Elixir's approach, which some found less strict. The discussion also touched upon the tradeoffs between Gleam's stricter error handling and potential verbosity, with some acknowledging the benefits while others expressed concerns about potential boilerplate. A few comments highlighted the language's growing maturity and ecosystem, while others inquired about specific features like concurrency and performance. One commenter appreciated the clear and concise changelog, a sentiment echoed by others who found the update informative and well-presented. The overall tone was positive, with many expressing interest in exploring Gleam further.
The blog post "Gleam, Coming from Erlang" explores the author's experience transitioning from Erlang to Gleam, a newer language built on the Erlang Virtual Machine (BEAM). It highlights Gleam's similarities to Erlang, such as its functional nature, immutability, and the benefits of the BEAM ecosystem like concurrency and fault tolerance. However, the author emphasizes key differences, primarily Gleam's static typing, more approachable syntax inspired by Rust and Elm, and its focus on clearer error messages. While acknowledging some current limitations in tooling and library availability compared to Erlang's mature ecosystem, the post ultimately presents Gleam as a promising alternative for building robust, concurrent applications, particularly for developers coming from other statically-typed languages who might find Erlang's syntax challenging.
Hacker News commenters generally expressed interest in Gleam, praising its friendly syntax and the benefits it inherits from the Erlang ecosystem, like the BEAM VM. Some saw it as a potentially strong competitor to Elixir, appreciating its stricter type system and simpler tooling. A few users familiar with Erlang questioned the necessity of Gleam, suggesting that learning Erlang directly might be more worthwhile. Performance comparisons with Elixir and other BEAM languages were also a topic of discussion, with some expressing hope for benchmarks. A recurring sentiment was curiosity about Gleam's potential to attract a larger community and gain wider adoption. Several commenters also appreciated the author's candid comparison between Gleam and Erlang, finding the article helpful for understanding Gleam's niche.
Summary of Comments ( 164 )
https://news.ycombinator.com/item?id=43655221
Hacker News users discussed the meaning and significance of "lightweight processes and message passing" in Erlang. Several commenters argued that the author missed the point, emphasizing that the true power of Erlang lies in its fault tolerance and the "let it crash" philosophy enabled by lightweight processes and isolation. They argued that while other languages might technically offer similar concurrency mechanisms, they lack Erlang's robust error handling and ability to build genuinely fault-tolerant systems. Some commenters pointed out that immutability and the single assignment paradigm are also crucial to Erlang's strengths. A few comments focused on the challenges of debugging Erlang systems and the potential performance overhead of message passing. Others highlighted the benefits of the actor model for concurrency and distribution. Overall, the discussion centered on the nuances of Erlang's design and whether the author adequately captured its core value proposition.
The Hacker News post titled "Erlang's not about lightweight processes and message passing (2023)" generated several comments discussing the author's viewpoint on Erlang's core strengths.
Several commenters agreed with the author's assertion that immutability is a crucial aspect of Erlang, enabling easier reasoning about code and simplifying debugging. One commenter highlighted the benefits of immutability in concurrent programming, suggesting that it allows developers to avoid many of the pitfalls associated with shared mutable state. Another emphasized the significance of immutability by drawing a parallel to functional programming paradigms and their advantages.
The discussion also explored the concept of "behavior" as a core component of Erlang. Some commenters saw this as a powerful abstraction for building concurrent systems, allowing developers to define patterns of interaction between processes in a structured way. This view was further supported by a commenter who pointed out the similarities between Erlang's behaviors and the actor model, where actors communicate through message passing.
The notion of lightweight processes and message passing, while acknowledged as part of Erlang, was not considered the primary defining characteristic by several commenters. They argued that these features, while important for concurrency, are mechanisms to achieve higher-level goals like fault tolerance and scalability, which are ultimately what make Erlang unique. One commenter specifically stated that the real strength of Erlang lies in its ability to build robust and resilient systems, rather than just its implementation details.
There was also discussion about the learning curve associated with Erlang and its suitability for different types of projects. While some commenters acknowledged its complexity, others emphasized the value of the robustness and reliability it offers, especially for critical systems.
Some commenters also drew comparisons between Erlang and other languages like Smalltalk, highlighting similarities in their approach to message passing and concurrency. This comparison prompted further discussion about the historical context and influences on Erlang's design.
Finally, a few comments touched upon alternative approaches to concurrency, such as using shared memory and mutexes, and discussed their trade-offs compared to Erlang's message-passing model. These comments offered a broader perspective on concurrency models and their applicability in different scenarios.