Houston FPUG
Houston FPUG
  • 36
  • 80 992
Eric Normand, "Two and a half more domain modeling lenses"
We make better software design decisions when we have more information. Domain modeling proposes that we look to the domain as the primary source of information. To do that, we need to see our domain from different perspectives, so I’ve organized my book about domain modeling around lenses. Each lens gives your different information, and it’s your job to synthesize that into design decisions. I’ve presented seven domain modeling lenses already. In this talk, I will finish the set and present two more (time and domain) and also add to the runnable specifications lens.
มุมมอง: 279

วีดีโอ

Richard Feldman, "The Functional Purity Inference Plan"
มุมมอง 5K3 หลายเดือนก่อน
It’s common for imperative programming languages to announce that they’re adding some new features to support a functional style of programming in that language. The FP experience in those languages is never quite as smooth as it is in functional-first languages, but it’s still appreciated when that’s the style of code you want to write. The Roc programming language, which has historically been...
Raúl Chouza, "Gleam - An Introduction to the Language and Platform"
มุมมอง 1.6K4 หลายเดือนก่อน
Abstract: A brief introduction to the Gleam programming language, we’re going to talk about what makes it “click” as a language but also about the underneath platform/s that make it work. Currently, Gleam can be compiled to erlang or javascript which we can use to our advantage to put the computation where it makes the most sense Bio: While at a desk Raúl spends his time getting into rabbit-hol...
Jeffery Olson, "System R-A Practical Lambda Calculus Made for Extensibility in Rust"
มุมมอง 1259 หลายเดือนก่อน
Abstract: This will be a presentation on lambda calculi, their differing varieties and corresponding expressiveness, and a particular implementation: System R-a lambda calculus, written in Rust, built for extensibility and practical use cases. Many programming languages (especially in the world of FP) we use today are implemented atop layers of academic theory modeled as lambda calculi. Advance...
William E. Byrd, "A New Relational Language"
มุมมอง 35710 หลายเดือนก่อน
Abstract: I’d like to talk about a new relational programming language I’ve just started working on, attempting to combine the pure relationality of miniKanren with better control of search and constraint solving. In particular, the language should make it easier to implement efficient program synthesis algorithms. Following Kowalski’s famous paper, `Algorithm = Logic Control`, the language wil...
Eric Normand, “Four Domain Modeling Lenses”
มุมมอง 424ปีที่แล้ว
Software design is about making decisions within a complex, multidimensional space. Instead of relying on rules that cannot cope with the complexity of design, we should focus on seeing our software from various useful perspectives. Each “lens” will help you extract more information about the problem your software is trying to solve. That added information will help will help you make better so...
Christopher Bremer, “Let’s try Bolero, an F# web framework built on Blazor and Elmish”
มุมมอง 497ปีที่แล้ว
When my team decided it was time to migrate one of our web apps away from AngularJS [^1], Blazor seemed like a good fit. Javascript isn’t really one of our core competencies, but we needed a more robust client than, say, HTMX. One of the devs suggested we look into Bolero. We prefer F# for our technical applications, and we were already familiar with some of the design principles espoused by th...
Onur Gümüş: “Functional CQRS with Akka.NET”
มุมมอง 226ปีที่แล้ว
Abstract: In this talk, we will explore how to use Akka.NET and F# to implement a functional CQRS system that can handle complex business logic, event sourcing, and eventual consistency. We will also discuss the benefits and trade-offs of this approach, as well as some best practices and tips with real life examples. Bio: Onur Gümüş is currently a Senior Software Engineer at Microsoft, located ...
Ahmed Hammad, "Property-based Testing in F#"
มุมมอง 106ปีที่แล้ว
This talk discusses the benefits of Property Based Testing (PBT), an overlooked testing methodology. It introduces PBT in F# using FsCheck, emphasizing the importance of invariants in constructing effective tests. While FsCheck is the specific platform used, the concepts and principles presented are broadly applicable to any Property Based Testing system.
Jade Allen, "Erlang Timer Wheels"
มุมมอง 116ปีที่แล้ว
How can you accurately and easily scale events to trigger at a given time in a distributed system. This is a critical task for many asynchronous systems - Kafka for example has a timer system which helps it decide when it ought to next check its queues for new input. But there are other excellent examples of highly scalable and accurating timing systems such as the one implemented in the Erlang...
Jonah Beckford, "What distributing OCaml on Windows gave me (and you)”
มุมมอง 437ปีที่แล้ว
Abstract: I’ll talk about why I distributed tools to install and use OCaml on Windows. The talk will start with why I adopted OCaml, and why I took the risk as a newcomer to get tooling in a previously tiny corner (Windows) of an uncommon language (OCaml). I’ll spend some time talking about the technical challenges, how I’ve overcome them, and what still needs to be done. I’ll also talk about t...
Gabriella Gonzalez, "How to Write a Nix Derivation"
มุมมอง 3.2Kปีที่แล้ว
This talk will explain how to use Nix like a `make` replacement. Even though Nix isn’t typically used in this way it’s actually well-suited for this purpose and this talk will walk through how to translate `make` idioms to Nix idioms and explain some of the tradeoffs of doing so.
Paul Biggar, "Darklang: A Functional Language for the Cloud"
มุมมอง 368ปีที่แล้ว
I’ll introduce and demo darklang, a “deployless” programming language for building cloud backends, talking about why I built it and what it’s good for. I’ll focus a little bit on why we chose a functional language, and how functional paradigms (esp immutability) allow us build features that don’t exist elsewhere. Bio: Paul Biggar is the founder of Darklang, and previously was Founder and CEO of...
Eric Normand, "Domain Modeling: How Rich Meaning Improves Your Code"
มุมมอง 5672 ปีที่แล้ว
The field of software design aims to make our software easier to maintain and change. But it has failed. After years of design advice, we still face unreadable code, expensive changes, and growing refactoring backlogs. Domain modeling is a deeper approach. Instead of focusing on the superficial quality of code as software design does, domain modeling focuses on encoding deep meaning. If you enc...
John Cavnar-Johnson, "The 'a List"
มุมมอง 1282 ปีที่แล้ว
“One more thing, we need the new system to produce our invoices/estimates/contracts/whatever as PDFs.” Producing Portable Document Format files is one of the gnarliest problems I have to deal with on a regular basis. Tonight I’m introducing a new OSS project to make it a little simpler for F# developers to render PDFs from line of business application. Inspired by FsExcel (which in turn was ins...
Rashad Gover, "Hypermedia-Driven Web Apps in Haskell"
มุมมอง 8012 ปีที่แล้ว
Rashad Gover, "Hypermedia-Driven Web Apps in Haskell"
Richard Feldman, "Pushing Boundaries with Roc"
มุมมอง 11K2 ปีที่แล้ว
Richard Feldman, "Pushing Boundaries with Roc"
Steven Proctor, "The Interceptor Pattern"
มุมมอง 6442 ปีที่แล้ว
Steven Proctor, "The Interceptor Pattern"
Rafal Dittwald, “Data Oriented Programming”
มุมมอง 7K2 ปีที่แล้ว
Rafal Dittwald, “Data Oriented Programming”
Rúnar Bjarnason, "Unison: A Friendly Programming Language from the Future"
มุมมอง 6K2 ปีที่แล้ว
Rúnar Bjarnason, "Unison: A Friendly Programming Language from the Future"
Christopher Bremer, "Types and Categories the 'Easy' Way"
มุมมอง 6352 ปีที่แล้ว
Christopher Bremer, "Types and Categories the 'Easy' Way"
Joey Hess, "Programming Arduinos with Haskell and NASA's Copilot"
มุมมอง 2.1K2 ปีที่แล้ว
Joey Hess, "Programming Arduinos with Haskell and NASA's Copilot"
Jeffrey Olson, "Functional Programming in Rust"
มุมมอง 18K3 ปีที่แล้ว
Jeffrey Olson, "Functional Programming in Rust"
Karl Lehenbauer, "TCL: The Tool Command Language - LISP for the Masses"
มุมมอง 6K3 ปีที่แล้ว
Karl Lehenbauer, "TCL: The Tool Command Language - LISP for the Masses"
David Allsopp, "OPAM: The OCaml Package Manager"
มุมมอง 4253 ปีที่แล้ว
David Allsopp, "OPAM: The OCaml Package Manager"
Jade Allen, "My Favorite Papers: Out of the Tar Pit"
มุมมอง 9483 ปีที่แล้ว
Jade Allen, "My Favorite Papers: Out of the Tar Pit"
Richard Feldman, "Millions of Users, Purely Functional Code"
มุมมอง 8K3 ปีที่แล้ว
Richard Feldman, "Millions of Users, Purely Functional Code"
Gabriel Gonzalez, "Dhall: A Programmable Configuration Language"
มุมมอง 6523 ปีที่แล้ว
Gabriel Gonzalez, "Dhall: A Programmable Configuration Language"
Martin Jambon on Semgrep (2021-04-21)
มุมมอง 1773 ปีที่แล้ว
Martin Jambon on Semgrep (2021-04-21)

ความคิดเห็น

  • @AK-vx4dy
    @AK-vx4dy 2 วันที่ผ่านมา

    That true, everytime I hear or see Richard talk I end up in better mood, convinced that tomorrow will be better 😀

  • @MarcGris
    @MarcGris 6 วันที่ผ่านมา

    Excellent ! Thanks for sharing this.

  • @DomainObject
    @DomainObject 13 วันที่ผ่านมา

    Great talk. Thank you!

  • @yondamhokage1977
    @yondamhokage1977 20 วันที่ผ่านมา

    how does this compare to rich hickey clojure?

  • @ivanmoren3643
    @ivanmoren3643 26 วันที่ผ่านมา

    Great talk! Lots to think about. Your point on sugar vs "primitive" is so great. I think it captures the essence of a lot of language design. :-)

  • @MartialBoniou
    @MartialBoniou หลายเดือนก่อน

    Roc rocks! I cannot wait more for the release of this new PI approach pushing the Task builtin to the low level space. It's a good move. I wish there will be more concern about the Mach-O linkage. Richard (like Andrew Kelley) is such good speaker. He's right about the backpassing syntax, it looks smart but totally unnecessary. I code in Shen/Common Lisp, Fennel/Lua & Zig these days (from Web backends to embedded systems). I can see a future for Roc in my workflow: functional and pragmatic. IMHO, a good generic programming language should have 0 or less keywords 🙂and Prolog is the king, there... Roc has a way of proposing a KISS way of coding with very few keywords while still experimenting its own paradigm. It's a refreshing!

  • @flippert0
    @flippert0 หลายเดือนก่อน

    "The Functional Purity Inference Plan" doesn't sound like computer science, but more like a socio-religious experiment.

  • @dupersuper1000
    @dupersuper1000 หลายเดือนก่อน

    Amazing! I’m going to try out Roc now. And I’m actually tempted to start writing my CLI programs in Roc as well.

  • @ytpah9823
    @ytpah9823 หลายเดือนก่อน

    🎯 Key points for quick navigation: 01:25 *📖 Pure Function Definition: A pure function always returns the same output for the same input and has no observable side effects.* 02:00 *🔍 Lookup Table Analogy: Pure functions can be thought of as lookup tables that map inputs to outputs without altering state.* 02:53 *🧩 Elm Ecosystem: In a purely functional language like Elm, functions are consistently pure, reducing ambiguity and simplifying debugging.* 04:18 *🚀 Rock Language Goals: Rock focuses on being fast, friendly, and purely functional, aiming for rapid compile times and efficient performance.* 05:03 *⚡ Effects vs. Side Effects: Purely functional languages handle effects like I/O through values representing those effects, avoiding side effects.* 06:13 *🧱 Pure and Effectful Code: Even in functional languages, codebases mix pure functions and effectful code to handle real-world tasks.* 07:34 *🛠️ Imperative Languages Adopting FP: Languages like Rust, Kotlin, Swift, and TypeScript support functional styles but remain fundamentally imperative.* 08:42 *🧭 Rust’s FP Support: Rust supports functional programming concepts, but its core style remains imperative.* 09:19 *🔧 TypeScript FP Adoption: TypeScript is commonly used in a functional style, with many developers preferring FP-first approaches.* 10:04 *✅ TypeScript Purity Assurance: Pure functions in TypeScript rely on developers manually verifying purity; type signatures don’t enforce it.* 13:14 *🖨️ Imperative Simplicity: Some tasks, like printing sequences, are naturally suited to imperative code for clarity and efficiency.* 15:00 *⚖️ Efficiency Considerations: In certain cases, imperative code is more efficient, avoiding redundant loops and computations.* 16:00 *🤝 Fit for Purpose: Imperative programming can be the best approach for specific problems, even for developers who prefer functional programming.* 16:43 *🔄 Recursion vs. Loops: In languages without for loops, recursion can replace them, but the resulting code may not be clearer or easier to understand.* 17:46 *❗ Effectful Code: In Rock, side effects are represented using tasks, but this can complicate code readability.* 19:28 *🆕 Imperative Support: Rock is introducing imperative-style syntax (e.g., `var`, `for` loops) while maintaining functional purity principles.* 20:18 *📝 Syntax Similarity: Rock's imperative syntax closely resembles TypeScript’s, with slight differences like `do` blocks and no semicolons.* 21:45 *🔍 Pure vs. Effectful Functions: Rock will differentiate pure functions (thin arrows) and effectful functions (thick arrows) in type signatures.* 22:59 *🚫 Compiler Enforcement: Pure functions in Rock cannot call effectful functions, ensuring purity is preserved.* 23:25 *🔄 Reassignments with `var`: The `var` keyword in Rock allows reassigning names within functions, but not mutating values.* 24:56 *🛡️ Immutable Guarantees: Even with `var`, Rock guarantees that values passed into functions cannot be mutated externally.* 26:28 *📊 Information-Rich Code: Rock’s type signatures and naming conventions (e.g., `!` for effectful functions) provide clear insights into function behavior.* 27:44 *⚠️ Exclamation Naming: Functions with side effects end with `!`, making effectful operations easy to identify at a glance.* 30:17 *🔄 `var` Naming Convention: Variables that can be reassigned end with an underscore, helping distinguish them from constants.* 32:20 *🔀 Code Portability: Pure functions allow flexible code reordering, whereas reassignments limit this flexibility.* 32:54 *⚠️ Portability Warnings: The underscore convention warns developers when code is not easily portable due to variable reassignment.* 33:49 *🔍 Quick Inference: Even without the function name or type signature, developers can infer purity and portability by glancing at code conventions like exclamation points and underscores.* 36:45 *🕵️‍♂️ Debugging Clues: The exclamation point convention acts as a clue to potential gotchas in code, aiding in debugging and understanding.* 37:46 *💡 Information Richness: Minimal syntax additions, like an exclamation point, can provide valuable insights into function behavior without cluttering the code.* 39:13 *📄 Thick Arrow Utility: The thick arrow explicitly indicates effectful functions, making type discussions clearer, especially in API design or REPL scenarios.* 43:19 *🛠️ Preventing Mistakes: The `var` keyword prevents accidental variable conflicts when copying and pasting code, reducing potential bugs.* 45:01 *✅ Purity with `var`: Using `var` inside a function doesn’t affect its purity; purity depends only on input-output consistency.* 46:32 *🔄 Imperative Flexibility: Rock aims to support an imperative style when it suits the problem, without sacrificing functional principles.* 49:33 *🚀 Ease into Functional Programming: Beginners can start writing imperative-style code in Rock and gradually adopt functional idioms over time.* 50:23 *🛠️ Rust’s `clone` Analogy: Just like Rust's `clone` helps beginners bypass complexity, Rock’s imperative support provides an accessible learning path.* 51:34 *🧗 Smoother Learning Curve: Rock aims to avoid the steep learning curve of recursion by providing simple imperative constructs like loops and variable reassignment.* 52:13 *📝 Simplified Syntax: Rock's new syntax for handling effects is clearer and avoids complex task chaining, making code more readable.* 52:48 *🔄 Backpassing Challenges: Earlier designs like backpassing confused beginners, prompting a shift to simpler syntax for handling effects.* 54:20 *🧩 Alternative Designs: Gleam and Haskell’s approaches to chaining tasks were considered but found to be too complex for beginners.* 55:54 *⚠️ Clearer Error Messages: Rock’s new design promises simpler and clearer error messages by avoiding complex desugaring.* 56:37 *❌ Limitations of Chaining: Chaining syntax struggles with conditional logic, making straightforward imperative code more practical for such cases.* 58:52 *⚡ Performance Considerations: Task-based handling introduces performance overhead; new designs aim to support high-performance concurrency similar to Go.* 01:00:47 *🔍 Minimalistic Approach: Rock aims for a simple and minimal system with binary algebraic effects, focusing on purity and effectfulness.* 01:02:57 *📦 New Primitives: Although adding new primitives like `var` and effectful arrows, the overall goal is to make Rock easier for beginners while maintaining simplicity.* 01:04:27 *✅ Compiler Enforcements: Rock’s compiler will enforce purity, effectfulness, and variable conventions to maintain code clarity and consistency.* 01:05:21 *💬 Considering Break and Continue: The team is open to adding `break` and `continue` statements in the future but sees it as non-critical for now.* 01:05:41 *📝 Rock’s New Identity: Rock is transitioning from a purely functional language to one with purity inference, maintaining a functional core.* 01:07:10 *🔒 Var in Closures: Vars captured in closures cannot be mutated. The team may enforce this strictly or allow immutable snapshots for convenience.* 01:09:27 *🌐 Platforms in Rock: Rock applications are built on a single platform that interfaces with non-Rock languages, typically via Rust, Zig, or CFFI.* 01:10:57 *🔄 Single Platform Rule: Each Rock application must use exactly one platform; combining multiple platforms is not supported.* 01:12:33 *⚠️ Effectful Functions Must Have Effects: Rock’s compiler warns if a function is marked as effectful but does not perform any side effects.* 01:14:18 *🔍 Reading Code Clarity: Richard prioritizes code readability and prefers imperative style when recursion or functional constructs complicate comprehension.* 01:19:52 *🎓 Target Audience: Rock’s design considerations focus on programmers familiar with coding, not absolute beginners.* 01:21:30 *⚖️ Trade-Offs in Design: The team acknowledges design trade-offs, particularly around error handling and early returns, settling on a `try` keyword inspired by Zig.* 01:22:40 *🧪 Experimentation Over User Testing: Rock is in a pre-1.0 phase, so changes are made through iterations and experimentation rather than formal user testing.* 01:23:05 *⚠️ Expect Change: Because Rock is still in development with nightly builds, users should expect frequent changes to the language.* 01:23:38 *🔄 Major Yet Subtle Change: The shift to purity inference is a significant change, though much of the current code will look similar, as the exclamation point operator transitions to a naming convention.* 01:24:43 *🚨 CI Failure on Warnings: Compiler warnings won’t prevent local builds but will exit with a non-zero code, causing CI pipelines to fail automatically if warnings are present.* 01:25:16 *🎉 Community Enthusiasm: The community appreciates Rock’s strategy of adopting imperative features while maintaining functional programming principles.* Made with HARPA AI

  • @jdm42
    @jdm42 หลายเดือนก่อน

    Love the introduction of the for loop with careful thinking behind it! Excited to see where it goes :)

  • @suvetar
    @suvetar 2 หลายเดือนก่อน

    Definitely agree on that line separated type def ... Can't even really put it into words, other than it's an elegant and usefully elegant way of laying out code, ensuring readability and clarity of intent. I've been programming for 35+ years and I find I read more then I write now, so it's very important to me, and at least we now don't have to worry about every byte of RAM saved in a compilation pass! Good stuff Sir! Ed: I know I'm cart before horse here but was just wondering, if its a principle to make it difficult for someone to 'accidently' de-pure the function, you could perhaps: abs : F64 --> F64 by n abs = n if n >= 0 else -n this is as close as I can put an approach I'm using in a DSL to abs ... so, the type obviously enforces parameter count and type, and as a convenience can set you up with a known state too, 'by way of n'. We know it's returning so I can give it a likelihood guess that n's gonna be positive more often and then you've also got a nice chance of short circuiting extraneous code. To be honest though, my DSL is not particularly Functional as I'm simming old Mainframe code!! But, I do like to try for elegant but practical ... I'm the poor fool who's got to maintain it and wonder what I was writing 5 years ago!

  • @zuziggy92881
    @zuziggy92881 2 หลายเดือนก่อน

    Terrific presentation. Is the code for the demo game somewhere on GitHub?

  • @privatedeletebuttongooglei5221
    @privatedeletebuttongooglei5221 2 หลายเดือนก่อน

    Richard Feldman is a snitch

  • @pookiepats
    @pookiepats 2 หลายเดือนก่อน

    aaaand this is why F Hash isn't popular 😂

  • @thegeniusfool
    @thegeniusfool 2 หลายเดือนก่อน

    How often do names change? Really? A straw man leading away from the many upsides of Merkel trees for “versioning”. In actuality, I would even include the name of definitions into that Merkel tree itself.

  • @pengain4
    @pengain4 3 หลายเดือนก่อน

    Love to see that Roc is getting more pragmatic!

  • @pengain4
    @pengain4 3 หลายเดือนก่อน

    4:42 Not a big issue but I hope some day compiler will be smart enough to understand that non-empty compile-time list is never empty :)

    • @سنابل-الفردوس
      @سنابل-الفردوس 2 หลายเดือนก่อน

      it will hopefully be there someday every new release has so much dev experince features in both lsp and the compiler and the formatter

  • @MaksimVolkau
    @MaksimVolkau 3 หลายเดือนก่อน

    I've literally just saw Jose Valim on ThePrimeagen show telling that he tries and tried to bring imperative while loop in functional language.

  • @craftvscruft8060
    @craftvscruft8060 3 หลายเดือนก่อน

    This is super clever!

  • @MaksimVolkau
    @MaksimVolkau 3 หลายเดือนก่อน

    great people are presenting in your group

  • @scott11x8
    @scott11x8 3 หลายเดือนก่อน

    I've been following Roc for a while now (I did the advent of code in it last year!), and I was just wondering, what was the reasoning for only using a naming convention of ending impure functions with "!" instead of requiring "!" as an operator when calling impure functions? It seems to me that it would be simpler to have it be based on the type of the function being called, similar to how "?" or "try" are often used for calling fallible functions (e.g. Zig, Rust). Was it mainly so that changing a function from pure to impure just causes warnings rather than type errors? Also, I'm a big fan of the approach of keeping a simple distinction between pure and impure functions. For a while, I was working on a compiler that supported annotating arbitrary effects (including effect-polymorphic types and functions) as a personal project, and it led to a lot of complexity that probably isn't worth it in my opinion (especially regarding type inference and compiler errors). I'm excited to see where Roc goes!

  • @DomainObject
    @DomainObject 3 หลายเดือนก่อน

    Roc is looking spectacular! 🎉 I wish Richard and friends would hurry up and get it out the door. LOL.

    • @smores56
      @smores56 3 หลายเดือนก่อน

      This stuff is priority number one right now! And of course, contributions are always welcome 😉

  • @deryilz
    @deryilz 3 หลายเดือนก่อน

    At 26:00, if you put another function within the printAsteriks! function that mutated totalPrinted_, wouldn't that one be unpure?

    • @smores56
      @smores56 3 หลายเดือนก่อน

      I think mutation isn't the way to think of var, it's more accurate to think "reassignment". A called function couldn't "mutate" totalPrinted_, it could only use the current value immutably to generate a different value and reassign it to totalPrinted_

    • @deryilz
      @deryilz 3 หลายเดือนก่อน

      @@smores56 right, but would a nested function inside printAsteriks! be allowed to reassign totalPrinted? would that apply only within the nested function? if so that it would be pure actually and that kinda makes sense

    • @smores56
      @smores56 3 หลายเดือนก่อน

      @@deryilz we haven't ironed out the details yet, and I'll probably spark up a discussion on this. It seems like we should probably not allow closures to capture var variables because you don't know which value you'll get.

    • @deryilz
      @deryilz 3 หลายเดือนก่อน

      @@smores56 cool. I know koka is an effect based language, and it doesn't let you do it to avoid complications

  • @1Arseniy
    @1Arseniy 3 หลายเดือนก่อน

    Great talk as always! I really loved the -> and => features, and using the bang (!) to unwrap the result is awesome. I’m not too sure about the var x_ = 1; x_ = x_ + 1 syntax, though. I think something more explicit would work better for mutability. Like var x = 1; x <- x + 1

  • @oserodal2702
    @oserodal2702 3 หลายเดือนก่อน

    LOL I was prepared to be surprised, turns out its just effectful types. Also, Julia-like in place mutation convention.

  • @yurtle1851
    @yurtle1851 3 หลายเดือนก่อน

    awesome :D

  • @lpil
    @lpil 3 หลายเดือนก่อน

    Cool vid! Just to say the feature attributed to Gleam at around 50mins doesn't exist in Gleam. Gleam doesn't have anything like that as we prefer to always keep it explicit.

    • @hayleigh-dot-dev
      @hayleigh-dot-dev 3 หลายเดือนก่อน

      I think there's quite a fundamental misunderstand of what Gleam's `use` is. It is true that folks new to Gleam often take a little time to get their head around the feature, but it has nothing to do with IO, monads, `do` notation, ocaml's binding operators...

    • @georgesboris
      @georgesboris 3 หลายเดือนก่อน

      Gleam's `use` is exactly like the first example - the arrow backpassing.

    • @rtfeldman
      @rtfeldman 3 หลายเดือนก่อน

      oh, no - really sorry about that! I'd heard about the feature and thought that was how it worked, but I didn't actually verify that in the docs...definitely my mistake. 🙇

    • @xtty7644
      @xtty7644 หลายเดือนก่อน

      @@hayleigh-dot-dev It actually does have to do with all of those, though. Every single feature you mentioned is some variation on automatically transforming the code into and from continuation-passing style. They might seem quite different but they're all variations on that same basic idea.

    • @lpil
      @lpil 17 วันที่ผ่านมา

      @@xtty7644That’s not much of a statement as the set of language features that boil down to CPS is huge. At the level of the language they’re all very different.

  • @poppafuze
    @poppafuze 4 หลายเดือนก่อน

    Super talk, plus great Q&A dialogue at the end.

  • @javidmohajery4394
    @javidmohajery4394 4 หลายเดือนก่อน

    Man, so fun audiences :)

  • @facundolucero5386
    @facundolucero5386 6 หลายเดือนก่อน

    Great video!

  • @TreeLuvBurdpu
    @TreeLuvBurdpu 8 หลายเดือนก่อน

    Sounds like the mic is about 15 feet away from the speaker.

  • @pdr.
    @pdr. 8 หลายเดือนก่อน

    Lots of great ideas here. However I think this makes dependency management really difficult. For example, if you have a large function which is found to have an important bug in some old version, it seems like it would be really hard to identify the users of that code and patch the bug just for the affected cases.

  • @edgeeffect
    @edgeeffect 8 หลายเดือนก่อน

    I don't like type-inference. "Explicit is better than implicit". Reading other people's code in languages with type-inference can sometimes be very confusing. I see type annotations as more documentation for the reader/maintainer. If a feature makes it easier to read other people's code and harder to write your own code, then reading trumps writing and it's a good feature. and If the converse is true, it's a bad feature. "Typing [as in pressing keys on the keyboard, not type-systems] is not the bottleneck".

  • @sensagentcom
    @sensagentcom 9 หลายเดือนก่อน

    nice work...

  • @SantiagoGarcia-rh1ig
    @SantiagoGarcia-rh1ig 11 หลายเดือนก่อน

    Hey, great talk! I am wondering how you get the hx attributes for lucid?

  • @AbdurrahmanSinanTokmak-gd6cm
    @AbdurrahmanSinanTokmak-gd6cm ปีที่แล้ว

    Efsanesin hocam

  • @bullpup1337
    @bullpup1337 ปีที่แล้ว

    great insights

  • @Tirka100
    @Tirka100 ปีที่แล้ว

    no mutable variables == no mass adoption

  • @the_nurk
    @the_nurk ปีที่แล้ว

    THANK YOU

  • @julianavar3836
    @julianavar3836 ปีที่แล้ว

    For those interested, I recommend Koka. Really incredible language.

  • @bibliusz777
    @bibliusz777 ปีที่แล้ว

    If it had array programming where the old arrays were dropped after writes, I would use it

  • @billdoyle117
    @billdoyle117 ปีที่แล้ว

    Comedy!

  • @majorhumbert676
    @majorhumbert676 ปีที่แล้ว

    Would we still need Elm if we have Roc with a corresponding Web UI library?

  • @ni-fr
    @ni-fr ปีที่แล้ว

    The questions intermission ends at 49:32

  • @u9vata
    @u9vata ปีที่แล้ว

    I came up with this idea of storing programs in structural format aroun 2013 - originally thought its future just like you think. I later however found value in the text representation - just more structured languages, but still text. I think now that is future not this. Also learned that big-idea languages usually are not the future - they are useful experiments as full-size prototypes more often than solutions. -- But its really interesting to see something similar to what I imagined back in uni (and also talked to people about) come to exists ;-) Its also so interesting to see its "same core idea made differently" - also the distributed part is interesting and all where you went with this idea is actually pretty awsome..

    • @homelessrobot
      @homelessrobot ปีที่แล้ว

      As long as there is a text editing interface the code at some level its still just a 'more structured language'. The bad stuff happens when you try to prevent users from being able to express invalid code by requiring that they only express code as a self-validating data structure. You need to be able to put square pegs in round holes when programming. If for no other reason than to demonstrate why you otherwise shouldn't.

  • @airman122469
    @airman122469 ปีที่แล้ว

    “The compiler can always infer the type.” Whoa. That’s pretty cool.

  • @shawkubaska2891
    @shawkubaska2891 ปีที่แล้ว

    P r o m o S M 👇

  • @dat7118
    @dat7118 ปีที่แล้ว

    I believe the statement at 26:30 is incorrect about Rust. Calling `let fut = get_movies();` does not immediately fire an HTTP request. One must do `fut.await` afterwards (or just do `get_movies().await`.

  • @pathyal489
    @pathyal489 ปีที่แล้ว

    Promo-SM

  • @davidcodes009
    @davidcodes009 ปีที่แล้ว

    fantastic and easy to grasp. thank you so much!