# Functional programming

In computer science, functional programming is a programming paradigm where programs are constructed by applying and composing functions. It is a declarative programming paradigm in which function definitions are trees of expressions that map values to other values, rather than a sequence of imperative statements which update the running state of the program.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## What's New in OSS at Khan Academy

DevFeed: [What's New in OSS at Khan Academy](<https://devfeed.tech/articles/what-s-new-in-oss-at-khan-academy-27396.md>)

Original publisher: [Read original article](<http://engineering.khanacademy.org/posts/new-oss-activity.htm>)

Author: Khan Academy

Published: 2017-04-03T22:00:00Z

Content type: article

Language: en

Sources: [Khan Academy](<https://devfeed.tech/sources/khan-academy.md>)

Topics: [Open Source](<https://devfeed.tech/topics/open-source.md>), [Software](<https://devfeed.tech/topics/software.md>), [React](<https://devfeed.tech/topics/react.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Algorithms](<https://devfeed.tech/topics/algorithms.md>), [jQuery](<https://devfeed.tech/topics/jquery.md>)

Tags: [algorithms](<https://devfeed.tech/tags/algorithms.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [news](<https://devfeed.tech/tags/news.md>), [open-source-software](<https://devfeed.tech/tags/open-source-software.md>), [oss](<https://devfeed.tech/tags/oss.md>), [react](<https://devfeed.tech/tags/react.md>), [web-frontend](<https://devfeed.tech/tags/web-frontend.md>)

### AI overview

Khan Academy highlights several recent open-source projects, including Mu Lambda, a small JavaScript library of functional programming utilities; React Balance Text, a React wrapper for Adobe's Balance-Text project; Fuzzy Match Utils, which uses string-matching algorithms for filtering; and React Multi Select.

### Source excerpt

By Brian Genisio At Khan Academy, we rely heavily on Open Source Software (OSS). The majority of our ... Read more

## Clojure/Conj 2026 Will Offer Free Online Streaming to Broaden Access

DevFeed: [Clojure/Conj 2026 Will Offer Free Online Streaming to Broaden Access](<https://devfeed.tech/articles/why-this-year-s-clojure-conj-matters-beyond-the-conference-38855.md>)

Original publisher: [Read original article](<https://building.nubank.com/why-this-years-clojure-conj-matters-beyond-the-conference/>)

Author: Nubank Editorial

Published: 2026-09-11T17:39:44Z

Content type: opinion

Language: en

Sources: [Nubank](<https://devfeed.tech/sources/nubank.md>)

Topics: [Clojure](<https://devfeed.tech/topics/clojure.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [coding-community](<https://devfeed.tech/topics/coding-community.md>)

Tags: [analytics-engineering](<https://devfeed.tech/tags/analytics-engineering.md>), [clojure](<https://devfeed.tech/tags/clojure.md>), [data-science-machine-learning](<https://devfeed.tech/tags/data-science-machine-learning.md>), [developer-community](<https://devfeed.tech/tags/developer-community.md>), [free](<https://devfeed.tech/tags/free.md>), [technical](<https://devfeed.tech/tags/technical.md>)

### AI overview

This commentary explains how free online streaming for Clojure/Conj 2026 can make technical discussions accessible to developers who cannot travel or afford in-person attendance. The conference will take place from September 30 to October 2 in Charlotte, North Carolina.

### Source excerpt

Making technical knowledge more accessible strengthens the entire developer community The post Why this year's Clojure/Conj matters beyond the conference appeared first on Building Nubank.

## Clojure/Conj 2026 Will Offer Free Online Streaming to Expand Access

DevFeed: [Clojure/Conj 2026 Will Offer Free Online Streaming to Expand Access](<https://devfeed.tech/articles/why-this-year-s-clojure-conj-matters-beyond-the-conference-41440.md>)

Original publisher: [Read original article](<https://building.nu.com/why-this-years-clojure-conj-matters-beyond-the-conference/>)

Author: Nubank Editorial

Published: 2026-09-11T17:39:44Z

Content type: opinion

Language: en

Sources: [Nubank](<https://devfeed.tech/sources/nubank.md>)

Topics: [Clojure](<https://devfeed.tech/topics/clojure.md>), [coding-community](<https://devfeed.tech/topics/coding-community.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>)

Tags: [analytics-engineering](<https://devfeed.tech/tags/analytics-engineering.md>), [clojure](<https://devfeed.tech/tags/clojure.md>), [conference](<https://devfeed.tech/tags/conference.md>), [data-science-machine-learning](<https://devfeed.tech/tags/data-science-machine-learning.md>), [developer-community](<https://devfeed.tech/tags/developer-community.md>), [events](<https://devfeed.tech/tags/events.md>), [free](<https://devfeed.tech/tags/free.md>)

### AI overview

This editorial explains that Clojure/Conj 2026 will be held from September 30 to October 2 in Charlotte, North Carolina, with free online streaming. It argues that online access can broaden participation by reducing travel and accommodation barriers while preserving live interaction with the event.

### Source excerpt

Making technical knowledge more accessible strengthens the entire developer community The post Why this year's Clojure/Conj matters beyond the conference appeared first on Building Nubank.

## Creator of Scala: Comparing Languages And How AI Will Impact Them | Martin Odersky

DevFeed: [Creator of Scala: Comparing Languages And How AI Will Impact Them | Martin Odersky](<https://devfeed.tech/articles/creator-of-scala-comparing-languages-and-how-ai-will-impact-them-martin-odersky-18089.md>)

Original publisher: [Read original article](<https://www.developing.dev/p/creator-of-scala-comparing-languages>)

Author: Ryan Peterman

Published: 2026-08-31T13:05:35Z

Content type: opinion

Language: en

Sources: [The Developing Dev](<https://devfeed.tech/sources/the-developing-dev.md>)

Topics: [Scala](<https://devfeed.tech/topics/scala.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [languages](<https://devfeed.tech/tags/languages.md>), [llms](<https://devfeed.tech/tags/llms.md>), [scala](<https://devfeed.tech/tags/scala.md>)

### AI overview

An interview with Martin Odersky, creator of Scala, compares Rust, Zig, Python, and Scala and discusses how AI may affect programming-language ecosystems. Odersky also explains functional programming as a style based on values and functions, with minimal mutable state and side effects.

### Source excerpt

There are so many choices every programming language creator makes while navigating engineering tradeoffs in building one.

## When you keep AI Lean, you keep AI correct

DevFeed: [When you keep AI Lean, you keep AI correct](<https://devfeed.tech/articles/when-you-keep-ai-lean-you-keep-ai-correct-2215.md>)

Original publisher: [Read original article](<https://stackoverflow.blog/2026/08/28/when-you-keep-ai-lean-you-keep-ai-correct/>)

Author: Phoebe Sajor

Published: 2026-08-28T07:40:00Z

Content type: article

Language: en

Sources: [Stack Overflow Blog](<https://devfeed.tech/sources/stack-overflow-blog.md>)

Topics: [AI Bots](<https://devfeed.tech/topics/ai-bots.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>)

Tags: [agentic-ai](<https://devfeed.tech/tags/agentic-ai.md>), [agents](<https://devfeed.tech/tags/agents.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [ai-models](<https://devfeed.tech/tags/ai-models.md>), [automated-reasoning](<https://devfeed.tech/tags/automated-reasoning.md>), [code](<https://devfeed.tech/tags/code.md>), [developers](<https://devfeed.tech/tags/developers.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [podcast](<https://devfeed.tech/tags/podcast.md>), [programming](<https://devfeed.tech/tags/programming.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [reasoning](<https://devfeed.tech/tags/reasoning.md>), [se-stackoverflow](<https://devfeed.tech/tags/se-stackoverflow.md>), [se-tech](<https://devfeed.tech/tags/se-tech.md>)

### AI overview

A discussion of using Lean to prove AI-agent correctness, combine automated reasoning with probabilistic AI models, and continuously optimize code.

### Source excerpt

Ryan chats with Leo de Moura, Senior Principal Applied Scientist at AWS and the creator of the Lean language, about proving correctness in AI agents with the Lean language, how automated reasoning complements probabilistic AI models, and the use of AI for continuous code optimization.

## Creator of OCaml: Functional Programming, Formal Verification, Programming Languages | Xavier Leroy

DevFeed: [Creator of OCaml: Functional Programming, Formal Verification, Programming Languages | Xavier Leroy](<https://devfeed.tech/articles/creator-of-ocaml-functional-programming-formal-verification-programming-languages-xavier-leroy-18088.md>)

Original publisher: [Read original article](<https://www.developing.dev/p/creator-of-ocaml-functional-programming>)

Author: Ryan Peterman

Published: 2026-07-20T13:05:11Z

Content type: article

Language: en

Sources: [The Developing Dev](<https://devfeed.tech/sources/the-developing-dev.md>)

Topics: [OCaml](<https://devfeed.tech/topics/ocaml.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Formal verification](<https://devfeed.tech/topics/formal-verification.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>)

Tags: [formal-verification](<https://devfeed.tech/tags/formal-verification.md>), [functional](<https://devfeed.tech/tags/functional.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [ocaml](<https://devfeed.tech/tags/ocaml.md>), [programming](<https://devfeed.tech/tags/programming.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [verification](<https://devfeed.tech/tags/verification.md>)

### AI overview

A podcast transcript featuring Xavier Leroy discusses what distinguishes OCaml, including its functional and systems programming capabilities, type inference, control structures, predictable execution costs, and low-latency garbage collection. The conversation also covers formal verification through the CompCert project and comparisons with languages such as Rust and JavaScript.

### Source excerpt

Professor Leroy (Creator of OCaml) is incredibly knowledgeable.

## Simon Peyton Jones on Haskell and Why Functional Programming Matters

DevFeed: [Simon Peyton Jones on Haskell and Why Functional Programming Matters](<https://devfeed.tech/articles/co-creator-of-haskell-functional-programming-thinking-in-types-useless-languages-simon-jones-18084.md>)

Original publisher: [Read original article](<https://www.developing.dev/p/co-creator-of-haskell-functional>)

Author: Ryan Peterman

Published: 2026-06-08T10:02:31Z

Content type: article

Language: en

Sources: [The Developing Dev](<https://devfeed.tech/sources/the-developing-dev.md>)

Topics: [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Haskell](<https://devfeed.tech/topics/haskell.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Declarative programming](<https://devfeed.tech/topics/declarative-programming.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>)

Tags: [declarative](<https://devfeed.tech/tags/declarative.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [languages](<https://devfeed.tech/tags/languages.md>), [programming](<https://devfeed.tech/tags/programming.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [types](<https://devfeed.tech/tags/types.md>)

### AI overview

An interview with Simon Peyton Jones, co-creator of Haskell, about functional programming, its emphasis on values rather than mutation, and how it differs from imperative programming.

### Source excerpt

Simon Peyton Jones is the co-creator of Haskell (pure functional programming language) and I interviewed him about functional programming, why it matters, and his thoughts on other programming languages.

## the algebra of dependent types

DevFeed: [the algebra of dependent types](<https://devfeed.tech/articles/the-algebra-of-dependent-types-36214.md>)

Original publisher: [Read original article](<https://dotat.at/@/2025-05-28-types.html>)

Published: 2025-05-29T00:07:51Z

Content type: article

Language: en

Sources: [Tony Finch's blog](<https://devfeed.tech/sources/tony-finch-s-blog.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Standard ML](<https://devfeed.tech/topics/standard-ml.md>), [Rust](<https://devfeed.tech/topics/rust.md>)

Tags: [algebra](<https://devfeed.tech/tags/algebra.md>), [enum](<https://devfeed.tech/tags/enum.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [languages](<https://devfeed.tech/tags/languages.md>), [programming-languages](<https://devfeed.tech/tags/programming-languages.md>), [type-system](<https://devfeed.tech/tags/type-system.md>), [type-theory](<https://devfeed.tech/tags/type-theory.md>), [types](<https://devfeed.tech/tags/types.md>)

### AI overview

An explanation of why big-sigma and big-pi notation appears in dependent type theory. It connects dependent functions and dependent pairs to algebraic data types, showing how products correspond to multiplication and sum types to addition, with examples from type theory, Standard ML, Haskell, and Rust.

### Source excerpt

TIL (or this week-ish I learned) why big-sigma and big-pi turn up in the notation of dependent type theory. I've long been aware of the zoo of more obscure Greek letters that turn up in papers about type system features of functional programming languages, μ, Λ, Π, Σ. Their meaning is usually clear from context but the reason for the choice of notation is usually not explained. I recently stumbled on an explanation for Π (dependent functions) and Σ (dependent pairs) which turn out to be nicer than I expected, and closely related to every-day algebraic data types. sizes of types The easiest way to understand algebraic data types is by counting the inhabitants of a type. For example: the unit type () has one inhabitant, (), and the number 1 is why it's called the unit type; the bool type hass two inhabitants, false and true. I have even seen these types called 1 and 2 (cruelly, without explanation) in occasional papers. product types Or pairs or (more generally) tuples or records. Usually written, (A, B) The pair contains an A and a B, so the number of possible values is the number of possible A values multiplied by the number of possible B values. So it is spelled in type theory (and in Standard ML) like, A * B sum types Or disjoint union, or variant record. Declared in Haskell like, data Either a b = Left a | Right b Or in Rust like, enum Either<A, B> { Left(A), Right(B), } A value of the type is either an A or a B, so the number of possible values is the number of A values plus the number of B values. So it is spelled in type theory like, A + B dependent pairs In a dependent pair, the type of the second element depends on the value of the first. The classic example is a slice, roughly, struct IntSlice { len: usize, elem: &[i64; len], } (This might look a bit circular, but the idea is that an array [i64; N] must be told how big it is - its size is an explicit part of its type - but an IntSlice knows its own size. The traditional dependent "vector" type is a sized li

## Why Learning Scala Gave Me Déjà Vu of Kotlin: A Developer's Journey

DevFeed: [Why Learning Scala Gave Me Déjà Vu of Kotlin: A Developer's Journey](<https://devfeed.tech/articles/why-learning-scala-gave-me-deja-vu-of-kotlin-a-developer-s-journey-22877.md>)

Original publisher: [Read original article](<https://medium.com/mindorks/why-learning-scala-gave-me-d%C3%A9j%C3%A0-vu-of-kotlin-a-developers-journey-3126b0e80272?source=rss----f1a763fc7443---4>)

Author: Kavya P S

Published: 2024-10-16T06:49:14Z

Content type: opinion

Language: en

Sources: [Mindorks - Medium](<https://devfeed.tech/sources/mindorks-medium.md>)

Topics: [Scala](<https://devfeed.tech/topics/scala.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [beginners-guide](<https://devfeed.tech/tags/beginners-guide.md>), [developer](<https://devfeed.tech/tags/developer.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [journey](<https://devfeed.tech/tags/journey.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [learning](<https://devfeed.tech/tags/learning.md>), [programming](<https://devfeed.tech/tags/programming.md>), [scala](<https://devfeed.tech/tags/scala.md>)

### AI overview

A Kotlin Android developer reflects on beginning to learn Scala for backend development and finding familiar concepts in its syntax and features. The article compares the languages through examples including conciseness, type inference, functional programming, null safety, extension functions, pattern matching, and operator overloading. The author notes that the comparison is based on only a few hours of Scala study.

### Source excerpt

Imagine you're 2 years deep into creating cool stuff with Kotlin for Android and you decide to venture into an unfamiliar territory -- Backend development with Scala. You are all prepared to start from zero. But as you go on, it feels strangely familiar, like meeting an old friend. Let me take you through my journey -- exploring Scala was a bit like déjà vu, reminding me of Kotlin in unexpected ways. Come along as I share this story of two coding worlds that seemed oddly similar to me! Disclaimer: Before I begin, I am only one day deep into Scala learning -- okay 2-5 hours deep thanks to this RockTheJVM tutorial! So, this article is not a consolidated list, but a spoiler before you learn the basics of Scala as a Kotlin developer (or vice versa). Before we begin, here's a "textbook" answer for similarities between Kotlin and Scala (thanks to ChatGPT) -- feel free to skip it! Kotlin and Scala, while having their unique features, share some similarities in their syntax. Here are a few key similarities between Kotlin and Scala:1. Conciseness: Both Kotlin and Scala are designed to reduce boilerplate code, allowing developers to write more with less. They provide concise syntax for common operations, making the code cleaner and easier to read. 2. Type Inference: Both languages support type inference, allowing developers to omit explicit type declarations in many cases. The compiler can often deduce the types based on the context, reducing verbosity in code. 3. Functional Programming Features: Both languages incorporate functional programming concepts. They support higher-order functions, immutable data structures, lambda expressions, and various functional programming paradigms. 4. Null Safety: Kotlin and Scala provide features to handle null references safely. Kotlin has a robust system with nullable and non-nullable types, while Scala includes options like `Option` or `Some` to deal with null values. 5. Extension Functions/Methods: Both languages support extension functions

## ICFP 2024

DevFeed: [ICFP 2024](<https://devfeed.tech/articles/icfp-2024-20181.md>)

Original publisher: [Read original article](<https://blog.janestreet.com/icfp-2024-index/>)

Author: Nailen Matschke

Published: 2024-08-29T00:00:00Z

Content type: article

Language: en

Sources: [Jane Street](<https://devfeed.tech/sources/jane-street.md>)

Topics: [OCaml](<https://devfeed.tech/topics/ocaml.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>)

Tags: [compiler](<https://devfeed.tech/tags/compiler.md>), [conference](<https://devfeed.tech/tags/conference.md>), [functional](<https://devfeed.tech/tags/functional.md>), [language](<https://devfeed.tech/tags/language.md>), [memory-management](<https://devfeed.tech/tags/memory-management.md>), [ocaml](<https://devfeed.tech/tags/ocaml.md>), [programming](<https://devfeed.tech/tags/programming.md>), [talks](<https://devfeed.tech/tags/talks.md>)

### AI overview

Jane Street previews its participation in ICFP 2024 and discusses OCaml work on type-system features, code generation, register allocation, inlining, memory management, and parallel programming. It also describes plans to upstream compiler extensions and provide a bleeding-edge opam repository for testing them.

### Source excerpt

It's no secret that Jane Street is an active participant in the programming language community, and we're excited to be attending ICFP 2024, the International Conference on Functional Programming, in Milan next week! Most members of our OCaml Language team will be there, and as usual, we look forward to sharing our work with the wider community. Please see below for a full list of papers and talks that Jane Street folk are involved in. Note that a lot of these are collaborations of one kind or another with researchers outside of Jane Street.

## The principle of immutability

DevFeed: [The principle of immutability](<https://devfeed.tech/articles/the-principle-of-immutability-13266.md>)

Original publisher: [Read original article](<https://www.chainguard.dev/unchained/the-principle-of-immutability>)

Published: 2024-08-20T00:00:00Z

Content type: opinion

Language: en

Sources: [Chainguard: Unchained](<https://devfeed.tech/sources/chainguard-unchained.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Rust](<https://devfeed.tech/topics/rust.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [C++](<https://devfeed.tech/topics/c-plus-plus.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>)

Tags: [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [immutability](<https://devfeed.tech/tags/immutability.md>), [rust](<https://devfeed.tech/tags/rust.md>), [secure-by-default](<https://devfeed.tech/tags/secure-by-default.md>), [secure-by-design](<https://devfeed.tech/tags/secure-by-design.md>)

### AI overview

The article argues that immutability is about intentionally controlling change rather than preventing change. It presents immutability by default as part of secure-by-design software and compares approaches in functional programming, C++, and Rust.

### Source excerpt

Secure by default starts with immutability. Discover how to control change and minimize risks.

## What You Need to Know About Lazy Evaluation in Nix

DevFeed: [What You Need to Know About Lazy Evaluation in Nix](<https://devfeed.tech/articles/what-you-need-to-know-about-lazy-evaluation-in-nix-32454.md>)

Original publisher: [Read original article](<https://nixcademy.com/posts/what-you-need-to-know-about-laziness/>)

Author: Jacek Galowicz

Published: 2024-07-15T00:00:00Z

Content type: tutorial

Language: en

Sources: [Nixcademy Blog](<https://devfeed.tech/sources/nixcademy-blog.md>)

Topics: [Nix](<https://devfeed.tech/topics/nix.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [lazy](<https://devfeed.tech/tags/lazy.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

This article explains lazy evaluation in the Nix language, including when expressions are evaluated, how errors can be deferred until a value is referenced, and how thunks model this behavior. It also introduces context for understanding Nix overlays and dependency overrides.

### Source excerpt

If you have no prior experience with functional programming, don't miss this article which explains the most important intricacies of lazy evaluation!

## Abstraction design: Introduction

DevFeed: [Abstraction design: Introduction](<https://devfeed.tech/articles/abstraction-design-introduction-39268.md>)

Original publisher: [Read original article](<https://kt.academy/article/ek-abstraction>)

Published: 2024-02-05T00:00:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [abstraction](<https://devfeed.tech/topics/abstraction.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Object-oriented programming (OOP)](<https://devfeed.tech/topics/oop.md>), [interfaces](<https://devfeed.tech/topics/interfaces.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [concepts](<https://devfeed.tech/tags/concepts.md>), [core](<https://devfeed.tech/tags/core.md>), [function](<https://devfeed.tech/tags/function.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>), [object-oriented](<https://devfeed.tech/tags/object-oriented.md>), [programming](<https://devfeed.tech/tags/programming.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

This introduction explains abstraction as a form of simplification that hides complexity by deciding what to expose and what to conceal. It discusses abstractions in object-oriented and functional programming, including interfaces, classes, functions, and higher-level operations, with examples involving Java and Kotlin.

### Source excerpt

What is abstraction in programming and why is it so important.

## 10 Interview Questions Every JavaScript Developer Should Know in 2024

DevFeed: [10 Interview Questions Every JavaScript Developer Should Know in 2024](<https://devfeed.tech/articles/10-interview-questions-every-javascript-developer-should-know-in-2024-20711.md>)

Original publisher: [Read original article](<https://medium.com/javascript-scene/10-interview-questions-every-javascript-developer-should-know-in-2024-c1044bcb0dfb?source=rss----c0aeac5284ad---4>)

Author: Eric Elliott

Published: 2023-12-31T01:38:10Z

Content type: tutorial

Language: en

Sources: [Eric Elliot](<https://devfeed.tech/sources/eric-elliot.md>)

Topics: [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Test-driven development](<https://devfeed.tech/topics/tdd.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>)

Tags: [career](<https://devfeed.tech/tags/career.md>), [closure](<https://devfeed.tech/tags/closure.md>), [developer](<https://devfeed.tech/tags/developer.md>), [guide](<https://devfeed.tech/tags/guide.md>), [hiring](<https://devfeed.tech/tags/hiring.md>), [interview](<https://devfeed.tech/tags/interview.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [react](<https://devfeed.tech/tags/react.md>), [tdd](<https://devfeed.tech/tags/tdd.md>), [technology](<https://devfeed.tech/tags/technology.md>), [typescript](<https://devfeed.tech/tags/typescript.md>)

### AI overview

A guide to JavaScript interview questions covering closures, pure functions, test-driven development, and related programming concepts. It also discusses how interviewers may assess learning aptitude alongside technical knowledge.

### Source excerpt

The world of JavaScript has evolved significantly, and interview trends have changed a lot over the years. This guide features 10 essential questions that every JavaScript developer should know the answers to in 2024. It covers a range of topics from closures to TDD, equipping you with the knowledge and confidence to tackle modern JavaScript challenges. As a hiring manager, I use all of these questions in real technical interviews on a regular basis. When engineers don't know the answers, I don't automatically reject them. Instead, I teach them the concepts and get a sense of how well they listen, and learn, and deal with the stressful situation of not knowing the answer to an interview question. A good interviewer is looking for people who are eager to learn and advance their understanding and their career. If I'm hiring for a less experienced role, and the candidate fails all of these questions, but demonstrates a good aptitude for learning, they may still land the job! 1. What is a Closure? A closure gives you access to an outer function's scope from an inner function. When functions are nested, the inner functions have access to the variables declared in the outer function scope, even after the outer function has returned: const createSecret = (secret) => { return { getSecret: () => secret, setSecret: (newSecret) => { secret = newSecret; }, }; }; const mySecret = createSecret("My secret"); console.log(mySecret.getSecret()); // My secret mySecret.setSecret("My new secret"); console.log(mySecret.getSecret()); // My new secret Closure variables are live references to the outer-scoped variable, not a copy. This means that if you change the outer-scoped variable, the change will be reflected in the closure variable, and vice versa, which means that other functions declared in the same outer function will have access to the changes. Common use cases for closures include: Data privacy Currying and partial applications (frequently used to improve function composition, e

## Swift Result Builders: Creating Custom DSLs for Binary Formatted Data

DevFeed: [Swift Result Builders: Creating Custom DSLs for Binary Formatted Data](<https://devfeed.tech/articles/swift-result-builders-creating-custom-dsls-for-binary-formatted-data-23995.md>)

Original publisher: [Read original article](<https://quickbirdstudios.com/blog/swift-resultbuilder-data/>)

Author: Paul Kraft

Published: 2023-08-03T14:22:38Z

Content type: tutorial

Language: en

Sources: [QuickBird Studios Blog](<https://devfeed.tech/sources/quickbird-studios-blog.md>)

Topics: [Swift](<https://devfeed.tech/topics/swift.md>), [Declarative programming](<https://devfeed.tech/topics/declarative-programming.md>), [data](<https://devfeed.tech/topics/data.md>), [SwiftUI](<https://devfeed.tech/topics/swiftui.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [data-processing](<https://devfeed.tech/topics/data-processing.md>), [Bluetooth](<https://devfeed.tech/topics/bluetooth.md>), [Internet](<https://devfeed.tech/topics/internet.md>), [P2P](<https://devfeed.tech/topics/p2p.md>)

Tags: [bluetooth](<https://devfeed.tech/tags/bluetooth.md>), [communication](<https://devfeed.tech/tags/communication.md>), [data-transformation](<https://devfeed.tech/tags/data-transformation.md>), [declarative](<https://devfeed.tech/tags/declarative.md>), [deep-dive](<https://devfeed.tech/tags/deep-dive.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [internet](<https://devfeed.tech/tags/internet.md>), [ios](<https://devfeed.tech/tags/ios.md>), [post](<https://devfeed.tech/tags/post.md>), [programming](<https://devfeed.tech/tags/programming.md>), [swift](<https://devfeed.tech/tags/swift.md>), [swiftui](<https://devfeed.tech/tags/swiftui.md>)

### AI overview

This tutorial explains Swift result builders and declarative programming, then applies custom result builders to encoding binary-formatted data. It also introduces DataKit, a Swift library for declaratively specifying binary message formats for encoding and decoding.

### Source excerpt

SwiftUI has revolutionized how we build UI, introducing a more intuitive, declarative approach. Instead of prescribing a series of steps to reach an end goal, we describe the outcome and let the program determine the path The post Swift Result Builders: Creating Custom DSLs for Binary Formatted Data appeared first on QuickBird Studios.

## AI Programming for Absolute Beginners

DevFeed: [AI Programming for Absolute Beginners](<https://devfeed.tech/articles/ai-programming-for-absolute-beginners-20712.md>)

Original publisher: [Read original article](<https://medium.com/javascript-scene/ai-programming-for-absolute-beginners-16ac3fc6dea6?source=rss----c0aeac5284ad---4>)

Author: Eric Elliott

Published: 2023-06-12T02:01:14Z

Content type: tutorial

Language: en

Sources: [Eric Elliot](<https://devfeed.tech/sources/eric-elliot.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Language models](<https://devfeed.tech/topics/language-models.md>), [Code](<https://devfeed.tech/topics/code.md>), [Declarative programming](<https://devfeed.tech/topics/declarative-programming.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [anthropic](<https://devfeed.tech/topics/anthropic.md>), [OpenAI](<https://devfeed.tech/topics/openai.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [ai-models](<https://devfeed.tech/tags/ai-models.md>), [beginners](<https://devfeed.tech/tags/beginners.md>), [chatgpt](<https://devfeed.tech/tags/chatgpt.md>), [claude](<https://devfeed.tech/tags/claude.md>), [code](<https://devfeed.tech/tags/code.md>), [declarative](<https://devfeed.tech/tags/declarative.md>), [functional](<https://devfeed.tech/tags/functional.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [language-models](<https://devfeed.tech/tags/language-models.md>), [programming](<https://devfeed.tech/tags/programming.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [software-development](<https://devfeed.tech/tags/software-development.md>), [technology](<https://devfeed.tech/tags/technology.md>)

### AI overview

An introductory tutorial to SudoLang, a natural-language pseudocode programming language designed to instruct advanced language models such as ChatGPT, GPT-4, and Claude. It explains SudoLang's interface-oriented, constraint-based, and pseudo-functional approach, along with its declarative, compositional, and expressive properties.

### Source excerpt

Your First Steps with SudoLang If you want to build chat bots, games, or applications using AI models like ChatGPT, you've come to the right place. In this article, we're going to dive into the basics of SudoLang, a powerful natural language pseudocode programming language designed to instruct advanced language models like OpenAI's GPT-4, Anthropic's Claude, and others. SudoLang was co-designed by me (Eric Elliott) and GPT-4 to create an easy-to-learn language that AI models would understand without any special training. All sufficiently advanced language models naturally understand SudoLang and follow its instructions. Just remember that AI models can sometimes make mistakes, just like people. And remember that you're learning a new skill, and that takes time and practice. Even if you've coded before, SudoLang is different than anything you've learned before. A programming paradigm defines the units (like building blocks) we use to compose our programs together. Object oriented languages use objects as the primary building block. Functional languages use functions, and so on. SudoLang is: Interface-oriented: You tell it what to remember and how to interact with you, and it handles the rest, like a smart personal assistant. Constraint-based: It follows rules you set. Pseudo-Functional: Build complex processes by composing small, simple functions together. These paradigms give SudoLang programs the following properties: Declarative: You tell it what you want and it figures out how. Compositional: You can combine different pieces to create something new. Expressive: You can do a lot with a little code. Don't worry if you don't know what all that means, yet. Just remember to be patient with yourself and with your AI friends if something doesn't work the first time. Constraint-based programming was invented in the early 1960's by the genius Ivan Sutherland, who also pioneered screens you could directly interact with (like your phone), and virtual reality headsets. In co

## Using Fleet 1.19's AI Assistant to Convert Kotlin Between Imperative and Functional Styles

DevFeed: [Using Fleet 1.19's AI Assistant to Convert Kotlin Between Imperative and Functional Styles](<https://devfeed.tech/articles/the-imitation-tortoise-s-song-a-fleety-conversion-from-imperative-to-functional-will-you-join-the-dance-32082.md>)

Original publisher: [Read original article](<https://www.maiatoday.net/p/the-imitation-tortoises-song-a-fleety-conversion-from-imperative-to-functional-will-you-join-the-dance/>)

Published: 2023-06-10T13:12:44Z

Content type: article

Language: en

Sources: [maiatoday](<https://devfeed.tech/sources/maiatoday.md>)

Topics: [coding style](<https://devfeed.tech/topics/coding-style.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [coding](<https://devfeed.tech/topics/coding.md>), [Code](<https://devfeed.tech/topics/code.md>), [Advent of Code](<https://devfeed.tech/topics/advent-of-code.md>)

Tags: [advent-of-code](<https://devfeed.tech/tags/advent-of-code.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-assistant](<https://devfeed.tech/tags/ai-assistant.md>), [code](<https://devfeed.tech/tags/code.md>), [coding-style](<https://devfeed.tech/tags/coding-style.md>), [doggerel](<https://devfeed.tech/tags/doggerel.md>), [fleet](<https://devfeed.tech/tags/fleet.md>), [functional](<https://devfeed.tech/tags/functional.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [imperative](<https://devfeed.tech/tags/imperative.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [word-games](<https://devfeed.tech/tags/word-games.md>)

### AI overview

The article experiments with Fleet 1.19's integrated AI assistant by converting Kotlin code for the Advent of Code 2022 Day 10 puzzle between imperative and functional styles, comparing the results, and generating poetry.

### Source excerpt

Once upon a time I admit. I have a penchant for word games and weird segues. So I will tell you what this post is about off the bat. You can skip to the code, I won't be offended. Fleet 1.19 was released this week with an integrated AI assistant. I took it for a spin and used it to convert Kotlin code from imperative style to functional and back again. I used some Kotlin code, which solves the Advent of Code 2022 Day 10 puzzle. I had written the solution in two styles and I had the AI assistant do the same conversion and compared the code. And then I played around and generated some poetry. Follow links at your peril, there are rabbit holes, it might make you late or change the size of your free time. Segue the first of many Oh you are still here! You didn't jump to the code starts here section? Why am I doing this? A long time ago, I read a lot of Lewis Caroll, Alice in Wonderland. In one scene Alice talks to the Mock Turtle. He sings a song about sea creatures dancing. When the first language translators appeared on the scene, Altavisa babelfish or perhaps it was the early Google Translate, I converted passages from Alice in Wonderland to French and then back again to see what the machines could do. The Mock Turtle was transformed into an Imitation Tortoise. In this way the reference to the original mock turtle soup was lost in translation. In a roundabout way I was wondering what would be uncovered or lost if I used the AI assistant for some translations in coding style. Couplets of doggerel My trusty and non emotional assistant had no opinion on Lewis Caroll but it made this for me. A definition of functional programming style in rhyming couplets: Functional programming's way, treats functions as the play. Immutable states they use, side effects they refuse. Declarative code is their choice, with functions, they rejoice. Nested functions map, filter, reduce, a clean, elegant code they produce. Compare this with the imperative version: Imperative code, step by st

## Arrow 2.0's Trajectory

DevFeed: [Arrow 2.0's Trajectory](<https://devfeed.tech/articles/arrow-2-0-s-trajectory-25509.md>)

Original publisher: [Read original article](<http://nomisrev.github.io/arrows-2-0-trajectory/>)

Author: Simon Vergauwen

Published: 2023-04-16T00:00:00Z

Content type: opinion

Language: en

Sources: [nomisRev](<https://devfeed.tech/sources/nomisrev.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Library](<https://devfeed.tech/topics/library.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [interoperability](<https://devfeed.tech/topics/interoperability.md>), [Java](<https://devfeed.tech/topics/java.md>), [Scala](<https://devfeed.tech/topics/scala.md>)

Tags: [arrow](<https://devfeed.tech/tags/arrow.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [interoperability](<https://devfeed.tech/tags/interoperability.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [library](<https://devfeed.tech/tags/library.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [oss](<https://devfeed.tech/tags/oss.md>), [scala](<https://devfeed.tech/tags/scala.md>)

### AI overview

A presentation transcription about Arrow's 10-year history, its trajectory toward version 2.0, functional programming in Kotlin, ecosystem cohesion, evolving APIs, and challenges faced by open-source projects.

### Source excerpt

This blog post is an improved version of the transcription of the presentation I gave at KotlinConf 2023. It discusses the 10-year history of Arrow, all the way from the first commit to the current state of the library. It also discusses the future of Functional Programming in Kotlin, and the challenges OSS projects face.

## KotlinConf'23-Kotlin & Functional Programming: pick the best, skip the rest by Urs Peter

DevFeed: [KotlinConf'23-Kotlin & Functional Programming: pick the best, skip the rest by Urs Peter](<https://devfeed.tech/articles/kotlinconf-23-kotlin-functional-programming-pick-the-best-skip-the-rest-by-urs-peter-27026.md>)

Original publisher: [Read original article](<https://appmattus.medium.com/kotlinconf23-kotlin-functional-programming-pick-the-best-skip-the-rest-by-urs-peter-8958d3dcb432?source=rss-be40b368c57e------2>)

Author: Matthew Dolan

Published: 2023-04-14T06:32:47Z

Content type: opinion

Language: en

Sources: [Stories by Matthew Dolan on Medium](<https://devfeed.tech/sources/stories-by-matthew-dolan-on-medium.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [exceptions](<https://devfeed.tech/topics/exceptions.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [arrow](<https://devfeed.tech/tags/arrow.md>), [data-structures](<https://devfeed.tech/tags/data-structures.md>), [exceptions](<https://devfeed.tech/tags/exceptions.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [monad](<https://devfeed.tech/tags/monad.md>), [optional](<https://devfeed.tech/tags/optional.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

A review of Urs Peter's KotlinConf'23 talk on functional programming, covering monoids, functors, monads, and selective use of the Arrow framework. It highlights using Either for recoverable service errors, nullable comprehensions, and Arrow Optics for nested data updates.

### Source excerpt

KotlinConf'23 -- Kotlin & Functional Programming: pick the best, skip the rest by Urs Peterhttps://medium.com/media/b5b95f6bdbb507930534ef8279ba1d05/href I recently had the pleasure of listening to Urs Peter's talk on Kotlin & Functional. The speaker gave a great, simple summary of what a Monad is and how it works. In essence: a Monoid is combinable (plus) and has an identity (empty) element which when combined with another value returns that other value. a Functor is mappable (map) a Monad is composable (flatMap) The talk then went on to discuss some common monads, such as Collections and Optional. The highlight of the talk for me was when the speaker talked about cherry-picking the best features between Kotlin and Monads (using the Arrow framework). Use Monads selectively where needed and useful. Why use a Monad to replace try-catch blocks for the 95% of use cases? Let exceptions bubble up to a GlobalExceptionHandler. For the other 5%, where we're typically recovering in our service, prefer Either<A,B> over Result as it makes the contract explicit with easy access to the error reply. Prevent tedious null checks with Arrow's nullable{ } comprehension. With deeply nested data structures where you want to change something at the leaf level, use Arrow Optics instead of nested copy calls. While I enjoyed the talk, I would have loved to hear more best features. You can find my thoughts on more KotlinConf'23 talks at KotlinConf'23. Please let me know your thoughts. Join medium to read all of my articles or subscribe for e-mail updates.

## KotlinConf'23

DevFeed: [KotlinConf'23](<https://devfeed.tech/articles/kotlinconf-23-27024.md>)

Original publisher: [Read original article](<https://appmattus.medium.com/kotlinconf23-d03fe60af719?source=rss-be40b368c57e------2>)

Author: Matthew Dolan

Published: 2023-04-14T06:29:10Z

Content type: article

Language: en

Sources: [Stories by Matthew Dolan on Medium](<https://devfeed.tech/sources/stories-by-matthew-dolan-on-medium.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Swift](<https://devfeed.tech/topics/swift.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [kotlinconf](<https://devfeed.tech/tags/kotlinconf.md>), [swift](<https://devfeed.tech/tags/swift.md>)

### AI overview

Personal notes from KotlinConf'23 in Amsterdam covering talks on Kotlin, functional programming, Kotlin Multiplatform, compiler plugins, Android Jetpack, and a Swift-friendly API generator called SKIE.

### Source excerpt

I recently attended KotlinConf'23 Amsterdam; these are some of my thoughts on talks I enjoyed. Kotlin & Functional Programming: pick the best, skip the rest by Urs Peter. Dissecting Kotlin: Unsealing the Sealed, the SAM, and Other Syntax by Huyen Tue Dao Meta-programming with KSP and Kotlin compiler plugins by Tadeáš Kříž Why code autocompletion works faster on weekends by Egor Tolstoy Kotlin Multiplatform 5 years of Multiplatform Settings by Russell Wolf Kotlin Multiplatform Conversions at Android Jetpack Scale by Dustin Lam and James Ward One of the most promising demos I saw was SKIE. The premise of SKIE is a Swift-friendly API Generator for Kotlin Multiplatform. You may already be familiar with MOKO KSwift but SKIE looks incredibly more powerful. NOTE: I will be adding to this as I continue to write up my notes. Join medium to read all of my articles or subscribe for e-mail updates.

## Kotlin DSL is Now the Default for New Gradle Builds

DevFeed: [Kotlin DSL is Now the Default for New Gradle Builds](<https://devfeed.tech/articles/kotlin-dsl-is-now-the-default-for-new-gradle-builds-24665.md>)

Original publisher: [Read original article](<https://blog.gradle.org/kotlin-dsl-is-now-the-default-for-new-gradle-builds>)

Author: Paul Merlin

Published: 2023-04-13T04:00:00Z

Content type: article

Language: en

Sources: [The Gradle Blog](<https://devfeed.tech/sources/the-gradle-blog.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [IntelliJ IDEA](<https://devfeed.tech/topics/intellij-idea.md>), [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [ide](<https://devfeed.tech/topics/ide.md>), [Declarative programming](<https://devfeed.tech/topics/declarative-programming.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>)

Tags: [android-studio](<https://devfeed.tech/tags/android-studio.md>), [build-tool](<https://devfeed.tech/tags/build-tool.md>), [declarative](<https://devfeed.tech/tags/declarative.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [ide](<https://devfeed.tech/tags/ide.md>), [intellij-idea](<https://devfeed.tech/tags/intellij-idea.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>)

### AI overview

This article explains that Kotlin DSL is now the default for new Gradle builds, while Groovy DSL remains supported for existing projects and users who prefer it. It describes Kotlin DSL's static typing, concise syntax, functional programming support, declarative build language, and IDE assistance in IntelliJ IDEA and Android Studio, including auto-completion, documentation access, source navigation, and context-aware refactoring. It also highlights support for version catalogs and improvements to code analysis and auto-completion.

### Source excerpt

Kotlin DSL for Gradle was introduced in version 3.0 of the Gradle Build Tool in August 2016 and released as 1.0 in Gradle 5.0. Since then, it's been growing in popularity and has greatly improved the authoring experience of many Gradle builds. Kotlin DSL is now the default choice for new Gradle builds. This means that when creating a new project with Gradle, including in IntelliJ IDEA (starting with 2023.1) and Android Studio (starting with Giraffe), Kotlin DSL is the default option. Support for Groovy DSL will continue for existing projects or those who prefer to use it. In this post, we will explore the benefits of Kotlin DSL and why it is becoming the recommended option for new Gradle builds. We will also discuss some of the improvements that are planned for the future to make Kotlin DSL even better. About Kotlin DSL Kotlin is a powerful language that offers many features that make it an excellent fit for creating a DSL. Its static type system, concise and expressive syntax, and support for functional programming constructs make it easy to create readable and composable DSLs. Kotlin DSL for Gradle takes advantage of the Kotlin language to enable full IDE assistance for build authoring in IntelliJ IDEA and Android Studio. This includes auto-completion, smart content assist, quick access to documentation, navigation to source, and context-aware refactoring. With Kotlin DSL, you can edit your build logic with the same editing experience you are used to when working with your production and test code. Gradle combines Kotlin language features with its capabilities to provide an elegant and extensible declarative build language that enables expressing any build clearly and understandably. Dynamically added elements of the build model, like project dependencies (when using version catalog) or subproject names in multi-project builds, benefit from static typing and IDE assistance. Gradle plugins extend Kotlin DSL by contributing extensions and tasks made available static

## Bean Machine Retrospective, part 8

DevFeed: [Bean Machine Retrospective, part 8](<https://devfeed.tech/articles/bean-machine-retrospective-part-8-38666.md>)

Original publisher: [Read original article](<https://ericlippert.com/2023/02/23/bean-machine-retrospective-part-8/>)

Author: ericlippert

Published: 2023-02-23T20:54:17Z

Content type: article

Language: en

Sources: [Eric Lippert](<https://devfeed.tech/sources/eric-lippert.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Code review](<https://devfeed.tech/topics/code-review.md>)

Tags: [algorithm](<https://devfeed.tech/tags/algorithm.md>), [code](<https://devfeed.tech/tags/code.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [functional](<https://devfeed.tech/tags/functional.md>), [source](<https://devfeed.tech/tags/source.md>), [test](<https://devfeed.tech/tags/test.md>), [transformation](<https://devfeed.tech/tags/transformation.md>), [uncategorized](<https://devfeed.tech/tags/uncategorized.md>)

### AI overview

This retrospective explains Beanstalk's combinator-inspired source code transformation system. It uses functional programming for AST transformations, with patterns, partial transformation rules, and combinators. The approach aims to make rewriting logic concise, testable, and easy to adapt to different traversal strategies.

### Source excerpt

Before getting into the details of how my combinator-inspired source code transformation system works, I should say first, what is a general overview of the system? and second, why did I build it at all? In my experience, a typical ... Continue reading ->

## Bean Machine Retrospective, part 7

DevFeed: [Bean Machine Retrospective, part 7](<https://devfeed.tech/articles/bean-machine-retrospective-part-7-38665.md>)

Original publisher: [Read original article](<https://ericlippert.com/2023/02/08/bean-machine-retrospective-part-7/>)

Author: ericlippert

Published: 2023-02-08T18:19:08Z

Content type: tutorial

Language: en

Sources: [Eric Lippert](<https://devfeed.tech/sources/eric-lippert.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Parser](<https://devfeed.tech/topics/parser.md>), [Python](<https://devfeed.tech/topics/python.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>)

Tags: [ast](<https://devfeed.tech/tags/ast.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [function](<https://devfeed.tech/tags/function.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [programming](<https://devfeed.tech/tags/programming.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [uncategorized](<https://devfeed.tech/tags/uncategorized.md>)

### AI overview

This installment explains how function composition and ideas from combinatory logic and functional programming can model control flow as combinators for constructing compiler workflows. It introduces abstract syntax trees and uses Python's ast module in the context of Bean Machine's compiler.

### Source excerpt

How do we write a compiler in a typical general-purpose line-of-business OO programming language such as Python, C#, Java, and so on? Compilers are programs, so we could make the question more general: how do we write programs? The basic ... Continue reading ->

## Functional Classes in Clojure

DevFeed: [Functional Classes in Clojure](<https://devfeed.tech/articles/functional-classes-in-clojure-21800.md>)

Original publisher: [Read original article](<http://blog.cleancoder.com/uncle-bob/2023/01/19/functional-classes-clojure.html>)

Published: 2023-01-19T00:00:00Z

Content type: article

Language: en

Sources: [Robert C. Martin](<https://devfeed.tech/sources/robert-c-martin.md>), [The Clean Code Blog](<https://devfeed.tech/sources/the-clean-code-blog.md>)

Topics: [Clojure](<https://devfeed.tech/topics/clojure.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Code](<https://devfeed.tech/topics/code.md>), [Polymorphism](<https://devfeed.tech/topics/polymorphism.md>)

Tags: [clojure](<https://devfeed.tech/tags/clojure.md>), [code](<https://devfeed.tech/tags/code.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [inheritance](<https://devfeed.tech/tags/inheritance.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

The article explains how class-like abstractions can be implemented in functional programming using Clojure. It presents a Dilithium Cloud example built from named functions, an internally defined data structure, dynamic type specifications, constructors, methods, and unit-test validation, while arguing that class syntax, inheritance, and polymorphic dispatch are not required.

### Source excerpt

My previous blog seemed only to continue the confusion regarding classes in Functional Programming. Indeed, many people got quite irate. So perhaps a bit of code will help. Trigger Warning: Object Oriented Terminology. Dynamically Typed Language. Mixed Metaphors. Distracting Animations. To all the adherents of the Statically Typed Functional Programming religion: I know that you believe that Static Typing is an essential aspect of Functional Programming and that no mere dynamically typed language could ever begin to approach the heights and glory of The One True and Holy TYPED Functional Apotheotic Paradigm. But we lowly programmers quivering down here at the base of Orthanc can only hope to meekly subsist on the dregs that fall from on high. (R.I.P. Kirstie Alley OK, so, once again... A class is an intentionally named abstraction that consists of a set of narrowly cohesive functions that operate over an internally defined data structure. We do not need the class keyword. Nor do we need polymorphic dispatch. Nor do we need inheritance. A class is just a description, whether in full or in part, of an object. For example - it's time we talked about clouds (which I have looked at from both sides now; and do, in fact, understand pretty well). So... Here come your father's parentheses! (ns spacewar.game-logic.clouds (:require [clojure.spec.alpha :as s] [spacewar.geometry :as geo] [spacewar.game-logic.config :as glc])) (s/def ::x number?) (s/def ::y number?) (s/def ::concentration number?) (s/def ::cloud (s/keys :req-un [::x ::y ::concentration])) (s/def ::clouds (s/coll-of ::cloud)) (defn valid-cloud? [cloud] (let [valid (s/valid? ::cloud cloud)] (when (not valid) (println (s/explain-str ::cloud cloud))) valid)) (defn make-cloud ([] (make-cloud 0 0 0)) ([x y concentration] {:x x :y y :concentration concentration})) (defn harvest-dilithium [ms ship cloud] (let [ship-pos [(:x ship) (:y ship)] cloud-pos [(:x cloud) (:y cloud)]] (if (< (geo/distance ship-pos cloud-pos) glc/dilit

[Next page](<https://devfeed.tech/topics/functional-programming.md?cursor=WyIyMDIzLTAxLTE5VDAwOjAwOjAwKzAwOjAwIiwgImQzYjA2NzhiLTA2YjgtNDNhNC05OGJmLTI4NTllZjU3NzQ4MiJd>)