# Declarative programming

A programming paradigm that specifies the desired result while leaving the system to determine how to execute the task.

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

## 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.

## Declarative vs. Imperative Programming: A Practical Guide for Choosing the Right Paradigm

DevFeed: [Declarative vs. Imperative Programming: A Practical Guide for Choosing the Right Paradigm](<https://devfeed.tech/articles/declarative-vs-imperative-programming-a-practical-guide-for-choosing-the-right-paradigm-4459.md>)

Original publisher: [Read original article](<https://www.toptal.com/developers/software/declarative-vs-imperative-programming>)

Author: THOMAS VARGHESE, SENIOR SOFTWARE DEVELOPER @ TOPTAL

Published: 2026-05-05T04:00:00Z

Content type: tutorial

Language: en

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

Topics: [Declarative programming](<https://devfeed.tech/topics/declarative-programming.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Code](<https://devfeed.tech/topics/code.md>), [Provisioning](<https://devfeed.tech/topics/provisioning.md>), [CI/CD](<https://devfeed.tech/topics/cicd.md>), [Automation](<https://devfeed.tech/topics/automation.md>)

Tags: [automation](<https://devfeed.tech/tags/automation.md>), [ci-cd](<https://devfeed.tech/tags/ci-cd.md>), [code](<https://devfeed.tech/tags/code.md>), [developers](<https://devfeed.tech/tags/developers.md>), [development](<https://devfeed.tech/tags/development.md>), [guide](<https://devfeed.tech/tags/guide.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

A practical guide to declarative and imperative programming, explaining how each paradigm shapes code structure, application state, debugging, performance, and architectural decisions. It describes the growing use of declarative systems in modern development while noting the complexity hidden behind their abstractions.

### Source excerpt

Deep understanding of declarative versus imperative programming shapes how developers write, run, and maintain code. This guide explains the differences, challenges, and when to choose each approach.

## 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.

## Understanding & Assessing Visual Regression Testing

DevFeed: [Understanding & Assessing Visual Regression Testing](<https://devfeed.tech/articles/understanding-assessing-visual-regression-testing-22787.md>)

Original publisher: [Read original article](<https://medium.com/microsoft-mobile-engineering/understanding-assessing-visual-regression-testing-4384529a8dd8?source=rss----87f10537e947---4>)

Author: Nikhita Reddy Eega

Published: 2023-07-27T12:58:43Z

Content type: tutorial

Language: en

Sources: [Android@Microsoft - Medium](<https://devfeed.tech/sources/android-microsoft-medium.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Declarative programming](<https://devfeed.tech/topics/declarative-programming.md>), [ui](<https://devfeed.tech/topics/ui.md>), [XML](<https://devfeed.tech/topics/xml.md>)

Tags: [capture](<https://devfeed.tech/tags/capture.md>), [cashapp-paparazzi](<https://devfeed.tech/tags/cashapp-paparazzi.md>), [declarative](<https://devfeed.tech/tags/declarative.md>), [facebook-sdk](<https://devfeed.tech/tags/facebook-sdk.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [snapshots](<https://devfeed.tech/tags/snapshots.md>), [testing](<https://devfeed.tech/tags/testing.md>), [verify](<https://devfeed.tech/tags/verify.md>), [visual-regression-testing](<https://devfeed.tech/tags/visual-regression-testing.md>)

### AI overview

This article explains visual regression testing for Android UI, focusing on possible visual differences when migrating from the View system to Jetpack Compose. It describes recording baseline snapshots, verifying new snapshots against them, and evaluating VRT tools such as Facebook SDK and Paparazzi for framework compatibility.

### Source excerpt

Understanding & Evaluating Visual Regression TestingPhoto by Jessica Ruscello on UnsplashDive into learning about VRT tools like Facebook SDK, Paparazzi and study their compatibility for migration. Since Jetpack Compose was released in 2021, its declarative programming model has offered a modern and intuitive approach to building user interface. Compared to View system framework, Compose promotes cohesion and simplifies state-management. This framework is lightweight because the UI components are built using composable functions as separate building pieces. With this paradigm shift, boilerplate code is lessened, code reuse is encouraged, and the development process is made simpler. Migrating to Compose seems quite appealing. Will there be any regression if we migrate from one framework to another, though? Because Compose is still relatively new compared to the well-established View-based UI, there might be potential challenges faced during the migration period. What about visual regressions? Possible visual regressions can be encountered due to different UI frameworks, view configuration and styling approach. Styling and themes are usually defined in XML resource files which are applied to the views and then rendered. Whereas in Compose, these are programmatically defined in Kotlin and then takes advantage of efficient recomposition. These variances may result in changes to padding, margin, etc. Thus, to maintain a seamless transition and avoid any visual bugs going unreported, visual regression testing can be used. This ensures that the final UI is consistent to enhance user experience. Understanding Visual Regression Testing (VRT): Let us now break down the process into two design approaches -- High level and Low level High-Level Design Approach Consists of 2 steps: 1) Record -- Generating a snapshot and saving it as Golden (baseline/reference snapshot used to compare subsequent snapshots) 2) Verify -- Compares the two snapshots High level design flowLow-Level Design

## 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

## 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

## Graphical Applications in Haskell with FRP and Reflex

DevFeed: [Graphical Applications in Haskell with FRP and Reflex](<https://devfeed.tech/articles/graphical-applications-in-haskell-with-frp-and-reflex-27926.md>)

Original publisher: [Read original article](<http://alt-romes.github.io/posts/lectures/2022-07-10-frp.html>)

Published: 2022-07-10T00:00:00Z

Content type: tutorial

Language: en

Sources: [Romes' Musings](<https://devfeed.tech/sources/romes-musings.md>)

Topics: [Haskell](<https://devfeed.tech/topics/haskell.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Reflex FRP](<https://devfeed.tech/topics/reflex-frp.md>), [ui](<https://devfeed.tech/topics/ui.md>), [real-time](<https://devfeed.tech/topics/real-time.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Declarative programming](<https://devfeed.tech/topics/declarative-programming.md>)

Tags: [functional](<https://devfeed.tech/tags/functional.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [haskell](<https://devfeed.tech/tags/haskell.md>), [programming](<https://devfeed.tech/tags/programming.md>), [reactive](<https://devfeed.tech/tags/reactive.md>), [reactive-programming](<https://devfeed.tech/tags/reactive-programming.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [user-interface](<https://devfeed.tech/tags/user-interface.md>)

### AI overview

This article introduces functional reactive programming for interactive graphical user interfaces in Haskell. It explains how behaviours represent values that vary continuously over time and events represent occurrences at particular points in time, allowing programmers to describe reactive systems without handling time-related implementation details directly. The article also covers Reflex and building user interfaces with Reflex-Dom.

### Source excerpt

Contents 1 Functional Reactive Programming 1.1 Behaviours 1.2 Events 2 Reflex 2.1 Building UIs with Reflex-Dom 2.2 Reflex Combinators 3 Example: 101companies 1 Functional Reactive Programming Functional reactive programming is a general paradigm well suited to programming real-time systems in a high-level and functional way. Real-time systems or reactive systems are those that handle continuous time-varying values, discrete events in real time, and react accordingly. A good example of these systems is a mobile robot. They must take into consideration continuous inputs like wheel speed, orientation, and discrete events such as detection of another object. The class of reactive systems we're interested in here is interactive graphical UIs. A user interface has multiple components that can be seen as discrete events and continuous time-varying values. An input box, where one might write their name, is an example of a time varying value (it continously changes - whenever the user types something); a button is an example of a discrete event in time: at certain points in time the user will click the button. This will make more sense with practice and code samples. So the promise of functional reactive programming is that we can program these complicated reactive systems in a pure functional way. But how? Functional Reactive Programming introduces two key concepts: Behaviours and Events. Behaviours are first-class values that vary over continuous time. That means a behaviour is a value that changes with time and can be passed to/returned by functions. Events are first-class values that occur at some points in time. They may refer, e.g., to happenings in the real world time - such as a mouse click or a key press. And then, it says that the FRP implementation will handle all time-related details so that the programmer can describe their reactive system without thinking about what happens at any particular point in time, but rather thinking about what happens accross all poin

## Jetpack Compose 1.0: A Kotlin UI Toolkit for Android

DevFeed: [Jetpack Compose 1.0: A Kotlin UI Toolkit for Android](<https://devfeed.tech/articles/jetpack-compose-1-0-beauty-in-simplicity-touchlab-38230.md>)

Original publisher: [Read original article](<https://touchlab.co/jetpack-compose-stable-kotlin-multiplatform>)

Published: 2021-08-24T04:21:17Z

Content type: article

Language: en

Sources: [Touchlab | Enterprise Mobile Innovation & Development](<https://devfeed.tech/sources/touchlab-enterprise-mobile-innovation-development.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [android-app-development](<https://devfeed.tech/topics/android-app-development.md>), [Declarative programming](<https://devfeed.tech/topics/declarative-programming.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-open-source-project](<https://devfeed.tech/tags/android-open-source-project.md>), [declarative-programming](<https://devfeed.tech/tags/declarative-programming.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [thoughts](<https://devfeed.tech/tags/thoughts.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

Jetpack Compose 1.0 is a stable Kotlin UI toolkit for Android that uses declarative programming to simplify UI development. The article explains how functions transform data into a UI hierarchy and update the view when data changes.

### Source excerpt

Jetpack Compose 1.0 is a UI toolkit written in Kotlin and designed to make life easier for Android developers.

## A Jetpack Compose by any other name

DevFeed: [A Jetpack Compose by any other name](<https://devfeed.tech/articles/a-jetpack-compose-by-any-other-name-20909.md>)

Original publisher: [Read original article](<https://jakewharton.com/a-jetpack-compose-by-any-other-name/>)

Published: 2020-12-30T00:00:00Z

Content type: article

Language: en

Sources: [Jake Wharton](<https://devfeed.tech/sources/jake-wharton.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [Declarative programming](<https://devfeed.tech/topics/declarative-programming.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>), [React](<https://devfeed.tech/topics/react.md>), [Svelte](<https://devfeed.tech/topics/svelte.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [compose](<https://devfeed.tech/tags/compose.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [programming](<https://devfeed.tech/tags/programming.md>), [react](<https://devfeed.tech/tags/react.md>), [svelte](<https://devfeed.tech/tags/svelte.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

The article examines what Jetpack Compose is, arguing that it should be understood as more than an Android UI toolkit. It describes its origins in declarative Android UI development and the unbundling of platform widgets, while discussing its Kotlin compiler-plugin and DSL foundations, multiplatform scope, and relationship to React and Svelte concepts.

### Source excerpt

I really like Jetpack Compose. Between work and personal stuff I have three projects which are each built on top of it. It's great! So far my biggest problem is its name... but that requires some explaining. Welcome to one of the hills I'll die on! What is Jetpack Compose? If you're already familiar with it, something should pop in your head when asked: What is Jetpack Compose? A new UI toolkit for Android? Yep, that's right. A declarative Android UI framework? Sure, that is correct. A multiplatform application UI? Thanks to JetBrains this is also true. If you're somewhat in tune to how the sausage is made you may also reference the fact that it's a Kotlin compiler plugin and DSL to build Android UI or multiplatform UI. It's those things, too. None of these answers are wrong. However, they're doing a bit of a disservice to the internals of Compose and its unrealized potential. Pedigree What we now know as Jetpack Compose started as two separate projects: The first was a solution for writing declarative Android UIs using the existing platform UI toolkit. Take the declarative components of React, wrap it in an ahead-of-time compiler like Svelte, and target Android's UI toolkit with Kotlin. All existing View-based UI could suddenly level-up by changing their programming paradigm from imperative to declarative. Separately, the toolkit team was about to ramp up on unbundling as many UI widgets as possible from the OS. This followed on the success of ViewPager, RecyclerView, and what was learned from the AppCompat and Design libraries. By removing a ton of OEM touchpoints and normalizing behavior across all versions of Android, the work required to build a good UI would be reduced. Over time these efforts became inescapably linked. If you are building standalone versions of the platform UI widgets then why not take the opportunity to correct mistakes in their API and overcome limitations of the resource system? And if you're changing their API, why not have the new declarat

## Tracking side effects at compile time with suspend

DevFeed: [Tracking side effects at compile time with suspend](<https://devfeed.tech/articles/tracking-side-effects-at-compile-time-with-suspend-27471.md>)

Original publisher: [Read original article](<https://jorgecastilloprz.github.io/tracking-side-effects-with-suspend>)

Author: Jorge Castillo

Published: 2020-10-10T10:00:00Z

Content type: article

Language: en

Sources: [👨💻 Jorge Castillo](<https://devfeed.tech/sources/jorge-castillo.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Declarative programming](<https://devfeed.tech/topics/declarative-programming.md>), [Concurrency](<https://devfeed.tech/topics/concurrency.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>)

Tags: [all-kotlin-posts-including-the-fp-ones](<https://devfeed.tech/tags/all-kotlin-posts-including-the-fp-ones.md>), [android](<https://devfeed.tech/tags/android.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [compose](<https://devfeed.tech/tags/compose.md>), [coroutine](<https://devfeed.tech/tags/coroutine.md>), [declarative](<https://devfeed.tech/tags/declarative.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [suspend](<https://devfeed.tech/tags/suspend.md>)

### AI overview

The article explains suspend as a Kotlin standard-library mechanism that makes effects visible to the compiler and restricts them to coroutine environments prepared to execute those effects. It relates this model to deferred execution in Kotlin Sequences and runtime interpretation and optimization in Jetpack Compose.

### Source excerpt

Thinking of suspend as a Kotlin stdlib mechanism for flagging and tracking effects at compile time.

## Find the number of the longest continuously rising days for a stock

DevFeed: [Find the number of the longest continuously rising days for a stock](<https://devfeed.tech/articles/find-the-number-of-the-longest-continuously-rising-days-for-a-stock-34582.md>)

Original publisher: [Read original article](<https://tapoueh.org/blog/2018/02/find-the-number-of-the-longest-continuously-rising-days-for-a-stock/>)

Author: Dimitri Fontaine PostgreSQL Major Contributor; Author

Published: 2018-02-06T22:24:17Z

Content type: comparison

Language: en

Sources: [Dimitri Fontaine](<https://devfeed.tech/sources/dimitri-fontaine.md>)

Topics: [SQL](<https://devfeed.tech/topics/sql.md>), [Declarative programming](<https://devfeed.tech/topics/declarative-programming.md>), [Python](<https://devfeed.tech/topics/python.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [compare](<https://devfeed.tech/tags/compare.md>), [declarative](<https://devfeed.tech/tags/declarative.md>), [python](<https://devfeed.tech/tags/python.md>), [sql](<https://devfeed.tech/tags/sql.md>)

### AI overview

The article compares SQL and Python implementations for finding the longest continuously rising sequence of stock-market days and selecting the top 10 records from a billion-row dataset. It argues that SQL's difficulty in these cases is related to its declarative model and the need to understand the data model and business requirements.

### Source excerpt

Today I want to react to an article that claims that Relational Algebra Is the Root of SQL Problems in which the author hand-waves the following position: SQL becomes more a hindrance to data manipulation than an efficient tool. SQL's greatest problem isn't in the implementation level, but at its theory foundation. The problem can't be solved by application optimization. Relational algebra isn't sophisticated enough for handling the complicated data manipulation scenarios. Then they go on to several arguments from authority to "prove" their point. My reading of the article is that SQL is very hard when you didn't care to learn it, as most technologies are. In this article, we're going to look at the simple examples provided where apparently SQL makes it so much harder to find a solution compared to writing some Java or C++ code. Contrary to the original article, we go as far as to actually writing both the SQL solution and a complete Python solution, so that we can compare.