# syntax

Syntax is the set of rules governing the structure and ordering of characters in correctly structured programming or markup code.

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

## Waiting for PostgreSQL 19 - Add support for EXCEPT TABLE in ALTER PUBLICATION.

DevFeed: [Waiting for PostgreSQL 19 - Add support for EXCEPT TABLE in ALTER PUBLICATION.](<https://devfeed.tech/articles/waiting-for-postgresql-19-add-support-for-except-table-in-alter-publication-33683.md>)

Original publisher: [Read original article](<https://www.depesz.com/2026/03/26/waiting-for-postgresql-19-add-support-for-except-table-in-alter-publication/>)

Author: depesz

Published: 2026-03-26T11:46:24Z

Content type: article

Language: en

Sources: [select \* from depesz;](<https://devfeed.tech/sources/select-from-depesz.md>)

Topics: [PostgreSQL](<https://devfeed.tech/topics/postgresql.md>), [syntax](<https://devfeed.tech/topics/syntax.md>)

Tags: [alter](<https://devfeed.tech/tags/alter.md>), [commit](<https://devfeed.tech/tags/commit.md>), [except](<https://devfeed.tech/tags/except.md>), [logical](<https://devfeed.tech/tags/logical.md>), [pg19](<https://devfeed.tech/tags/pg19.md>), [postgresql](<https://devfeed.tech/tags/postgresql.md>), [publication](<https://devfeed.tech/tags/publication.md>), [replication](<https://devfeed.tech/tags/replication.md>), [table](<https://devfeed.tech/tags/table.md>), [uncategorized](<https://devfeed.tech/tags/uncategorized.md>), [waiting](<https://devfeed.tech/tags/waiting.md>)

### AI overview

This article discusses a PostgreSQL 19 patch adding EXCEPT TABLE support to ALTER PUBLICATION. The change allows modifying a publication's table exclusion list, though the example notes that specifying an exclusion for one publication replaced its previous exclusion list.

### Source excerpt

On 20th of March 2026, Amit Kapila committed patch: Add support for EXCEPT TABLE in ALTER PUBLICATION. Following commit fd366065e0, which added EXCEPT TABLE support to CREATE PUBLICATION, this commit extends ALTER PUBLICATION to allow modifying the exclusion list. New Syntax: ALTER PUBLICATION name SET publication_all_object [, ... ] where publication_all_object is ... Continue reading "Waiting for PostgreSQL 19 - Add support for EXCEPT TABLE in ALTER PUBLICATION."

## What Happens to an SQL Query?

DevFeed: [What Happens to an SQL Query?](<https://devfeed.tech/articles/what-happens-to-an-sql-query-34693.md>)

Original publisher: [Read original article](<https://newsletter.systemdesigncodex.com/p/what-happens-to-an-sql-query>)

Author: Saurabh Dashora

Published: 2026-03-04T03:14:28Z

Content type: tutorial

Language: en

Sources: [System Design Codex](<https://devfeed.tech/sources/system-design-codex.md>)

Topics: [SQL](<https://devfeed.tech/topics/sql.md>), [Databases](<https://devfeed.tech/topics/databases.md>), [Parser](<https://devfeed.tech/topics/parser.md>), [syntax](<https://devfeed.tech/topics/syntax.md>)

Tags: [database](<https://devfeed.tech/tags/database.md>), [diagram](<https://devfeed.tech/tags/diagram.md>), [errors](<https://devfeed.tech/tags/errors.md>), [execution](<https://devfeed.tech/tags/execution.md>), [locks](<https://devfeed.tech/tags/locks.md>), [rollback](<https://devfeed.tech/tags/rollback.md>), [sql](<https://devfeed.tech/tags/sql.md>), [syntax](<https://devfeed.tech/tags/syntax.md>)

### AI overview

This tutorial explains how an SQL query moves through a database. It covers transport and access checks, parsing and optimization into an execution plan, execution through the storage engine, and supporting components such as transactions, locks, buffering, and recovery.

### Source excerpt

The Journey Through the DB

## Parsing: How Ruby Understands Your Code

DevFeed: [Parsing: How Ruby Understands Your Code](<https://devfeed.tech/articles/parsing-how-ruby-understands-your-code-31806.md>)

Original publisher: [Read original article](<https://patshaughnessy.net/2025/10/27/parsing-how-ruby-understands-your-code>)

Author: Pat Shaughnessy

Published: 2025-10-27T00:00:00Z

Content type: article

Language: en

Sources: [Pat Shaughnessy](<https://devfeed.tech/sources/pat-shaughnessy.md>)

Topics: [Parsing](<https://devfeed.tech/topics/parsing.md>), [Ruby](<https://devfeed.tech/topics/ruby.md>), [Parser](<https://devfeed.tech/topics/parser.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [tokenization](<https://devfeed.tech/topics/tokenization.md>), [Code](<https://devfeed.tech/topics/code.md>), [Algorithm](<https://devfeed.tech/topics/algorithm.md>)

Tags: [algorithm](<https://devfeed.tech/tags/algorithm.md>), [code](<https://devfeed.tech/tags/code.md>), [parsing](<https://devfeed.tech/tags/parsing.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [tokenization](<https://devfeed.tech/tags/tokenization.md>), [updating-ruby-under-a-microscope](<https://devfeed.tech/tags/updating-ruby-under-a-microscope.md>)

### AI overview

This excerpt explains how Ruby parses source code after tokenization. It describes syntax matching, recursive parsing of subexpressions, and syntax errors when no pattern matches.

### Source excerpt

I've started working on a new edition of Ruby Under a Microscope that covers Ruby 3.x. I'm working on this in my spare time, so it will take a while. Leave a comment or drop me a line and I'll email you when it's finished. Update

## A Lean Syntax Primer

DevFeed: [A Lean Syntax Primer](<https://devfeed.tech/articles/a-lean-syntax-primer-36158.md>)

Original publisher: [Read original article](<https://overreacted.io/a-lean-syntax-primer/>)

Published: 2025-09-02T00:00:00Z

Content type: tutorial

Language: en

Sources: [Dan Abramov](<https://devfeed.tech/sources/dan-abramov.md>)

Topics: [Lean](<https://devfeed.tech/topics/lean.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [learn](<https://devfeed.tech/tags/learn.md>), [programming](<https://devfeed.tech/tags/programming.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [types](<https://devfeed.tech/tags/types.md>)

### AI overview

An opinionated introduction to Lean syntax covering definitions, assignment and comparison syntax, type inference, explicit type annotations, natural numbers, integers, and running code in the online playground or VS Code. It also introduces the distinction between executing Lean code and proving facts about it.

### Source excerpt

Programming with proofs.

## clamp / median / range

DevFeed: [clamp / median / range](<https://devfeed.tech/articles/clamp-median-range-36218.md>)

Original publisher: [Read original article](<https://dotat.at/@/2025-07-02-cmp.html>)

Published: 2025-07-02T01:33:08Z

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>), [Code](<https://devfeed.tech/topics/code.md>), [function](<https://devfeed.tech/topics/function.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [iteration](<https://devfeed.tech/topics/iteration.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [comparison](<https://devfeed.tech/tags/comparison.md>), [function](<https://devfeed.tech/tags/function.md>), [languages](<https://devfeed.tech/tags/languages.md>), [sequence](<https://devfeed.tech/tags/sequence.md>), [syntax](<https://devfeed.tech/tags/syntax.md>)

### AI overview

The article explores stylistic conventions for comparison operators, including chained comparisons, ordering values from least to greatest, and arranging clamp arguments to match that order. It then considers median-of-three implementations that are insensitive to argument order and proposes a speculative range syntax for pattern matching, iteration, and slicing.

### Source excerpt

Here are a few tangentially-related ideas vaguely near the theme of comparison operators. comparison style clamp style clamp is median clamp in range range style style clash? comparison style Some languages such as BCPL, Icon, Python have chained comparison operators, like if min <= x <= max: ... In languages without chained comparison, I like to write comparisons as if they were chained, like, if min <= x && x <= max { // ... } A rule of thumb is to prefer less than (or equal) operators and avoid greater than. In a sequence of comparisons, order values from (expected) least to greatest. clamp style The clamp() function ensures a value is between some min and max, def clamp(min, x, max): if x < min: return min if max < x: return max return x I like to order its arguments matching the expected order of the values, following my rule of thumb for comparisons - and the description of what clamp() does. (I used this flavour of clamp() in my article about GCRA.) But I seem to be unusual in this preference, based on a few examples I have seen recently. clamp is median Last month, Fabian Giesen pointed out a way to resolve this difference of opinion: A function that returns the median of three values is equivalent to a clamp() function that doesn't care about the order of its arguments. This version is written so that it returns NaN if any of its arguments is NaN. (When an argument is NaN, both of its comparisons will be false.) fn med3(a: f64, b: f64, c: f64) -> f64 { match (a <= b, b <= c, c <= a) { (false, false, false) => f64::NAN, (false, false, true) => b, // a > b > c (false, true, false) => a, // c > a > b (false, true, true) => c, // b <= c <= a (true, false, false) => c, // b > c > a (true, false, true) => a, // c <= a <= b (true, true, false) => b, // a <= b <= c (true, true, true) => b, // a == b == c } } When two of its arguments are constant, med3() should compile to the same code as a simple clamp(); but med3()'s misuse-resistance comes at a small cost when t

## Suppressions of Suppressions

DevFeed: [Suppressions of Suppressions](<https://devfeed.tech/articles/suppressions-of-suppressions-36196.md>)

Original publisher: [Read original article](<https://overreacted.io/suppressions-of-suppressions/>)

Published: 2025-06-11T00:00:00Z

Content type: article

Language: en

Sources: [Dan Abramov](<https://devfeed.tech/sources/dan-abramov.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [ci](<https://devfeed.tech/topics/ci.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [ci](<https://devfeed.tech/tags/ci.md>), [code](<https://devfeed.tech/tags/code.md>), [false-positives](<https://devfeed.tech/tags/false-positives.md>), [lint](<https://devfeed.tech/tags/lint.md>), [linter](<https://devfeed.tech/tags/linter.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [rules](<https://devfeed.tech/tags/rules.md>)

### AI overview

The article examines lint-rule suppressions: they can handle false positives and gradual rule adoption, but suppressing certain rules may cause serious problems. It proposes a lint rule that prevents suppression of selected other rules and notes that this protection can itself be suppressed.

### Source excerpt

I heard you like linting.

## KotlinConf 2025 Announcements

DevFeed: [KotlinConf 2025 Announcements](<https://devfeed.tech/articles/kotlinconf-2025-announcements-39349.md>)

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

Published: 2025-06-03T00:00:00Z

Content type: article

Language: en

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

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [destructuring](<https://devfeed.tech/topics/destructuring.md>), [exceptions](<https://devfeed.tech/topics/exceptions.md>), [union types](<https://devfeed.tech/topics/union-types.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [Safe-Call Operator](<https://devfeed.tech/topics/safe-call-operator.md>)

Tags: [announcements](<https://devfeed.tech/tags/announcements.md>), [destructuring](<https://devfeed.tech/tags/destructuring.md>), [exceptions](<https://devfeed.tech/tags/exceptions.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlinconf](<https://devfeed.tech/tags/kotlinconf.md>), [new-features](<https://devfeed.tech/tags/new-features.md>), [safe-call-operator](<https://devfeed.tech/tags/safe-call-operator.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [union-types](<https://devfeed.tech/tags/union-types.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

The article summarizes announcements from KotlinConf 2025, including K2 becoming stable, upcoming name-based destructuring, and rich errors with language-level support for result-or-error types and related operators.

### Source excerpt

The greatest announcements from KotlinConf 2025.

## Making the most of GitHub Code Search

DevFeed: [Making the most of GitHub Code Search](<https://devfeed.tech/articles/making-the-most-of-github-code-search-37174.md>)

Original publisher: [Read original article](<https://arkadiuszchmura.com/posts/making-the-most-of-github-code-search/>)

Published: 2023-09-30T00:00:00Z

Content type: tutorial

Language: en

Sources: [Arkadiusz Chmura](<https://devfeed.tech/sources/arkadiusz-chmura.md>)

Topics: [code search](<https://devfeed.tech/topics/code-search.md>), [GitHub](<https://devfeed.tech/topics/github.md>), [Code](<https://devfeed.tech/topics/code.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [Sorting](<https://devfeed.tech/topics/sorting.md>)

Tags: [code-search](<https://devfeed.tech/tags/code-search.md>), [github](<https://devfeed.tech/tags/github.md>), [regular-expressions](<https://devfeed.tech/tags/regular-expressions.md>), [repositories](<https://devfeed.tech/tags/repositories.md>), [search](<https://devfeed.tech/tags/search.md>), [sorting](<https://devfeed.tech/tags/sorting.md>), [syntax](<https://devfeed.tech/tags/syntax.md>)

### AI overview

A practical guide to GitHub Code Search, covering exact-string searches, Boolean expressions, regular expressions, qualifiers, result limits, sorting behavior, and indexing limitations. It also presents the tool as useful for code exploration and learning.

### Source excerpt

The new search engine offers powerful code searching mechanisms we can leverage for quickly finding the code we need, as well as for exploration and learning.

## Using Python AST to resolve dependencies

DevFeed: [Using Python AST to resolve dependencies](<https://devfeed.tech/articles/using-python-ast-to-resolve-dependencies-39624.md>)

Original publisher: [Read original article](<https://www.gauravsarma.com/posts/2023-06-30_Using-Python-AST-to-resolve-dependencies-c849bd184020>)

Published: 2023-06-30T00:00:00Z

Content type: tutorial

Language: en

Sources: [Gaurav Sarma's Blog](<https://devfeed.tech/sources/gaurav-sarma-s-blog.md>)

Topics: [Python](<https://devfeed.tech/topics/python.md>), [Parsing](<https://devfeed.tech/topics/parsing.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [modules](<https://devfeed.tech/topics/modules.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [ast](<https://devfeed.tech/tags/ast.md>), [code](<https://devfeed.tech/tags/code.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [import](<https://devfeed.tech/tags/import.md>), [modules](<https://devfeed.tech/tags/modules.md>), [object](<https://devfeed.tech/tags/object.md>), [python](<https://devfeed.tech/tags/python.md>), [python-dependencies](<https://devfeed.tech/tags/python-dependencies.md>), [repository](<https://devfeed.tech/tags/repository.md>), [resolver](<https://devfeed.tech/tags/resolver.md>), [startup](<https://devfeed.tech/tags/startup.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [tokens](<https://devfeed.tech/tags/tokens.md>), [trees](<https://devfeed.tech/tags/trees.md>), [unit-tests](<https://devfeed.tech/tags/unit-tests.md>)

### AI overview

This tutorial explains how to use Python's Abstract Syntax Trees to resolve dependencies among objects imported across modules in a complex repository. It proposes recursively analyzing imports and copying required object code and dependencies into a destination folder.

### Source excerpt

This article covers how to resolve python dependencies using Python's Abstract Syntax Trees (AST). There are different and maybe better ways to understand the scope of your python dependencies...

## Learning Zig - Day 3

DevFeed: [Learning Zig - Day 3](<https://devfeed.tech/articles/learning-zig-day-3-38542.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/learning-zig--day-3/>)

Author: Harsh Shandilya

Published: 2021-05-16T06:30:00Z

Content type: tutorial

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [Zig](<https://devfeed.tech/topics/zig.md>), [Learning](<https://devfeed.tech/topics/learning.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [type coercion](<https://devfeed.tech/topics/type-coercion.md>), [Code](<https://devfeed.tech/topics/code.md>), [Rust](<https://devfeed.tech/topics/rust.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [enums](<https://devfeed.tech/tags/enums.md>), [learn](<https://devfeed.tech/tags/learn.md>), [learning](<https://devfeed.tech/tags/learning.md>), [pointers](<https://devfeed.tech/tags/pointers.md>), [sealed-classes](<https://devfeed.tech/tags/sealed-classes.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [type-coercion](<https://devfeed.tech/tags/type-coercion.md>), [zig](<https://devfeed.tech/tags/zig.md>)

### AI overview

A personal learning log covering the remaining basics of ZigLearn chapter 1. The author discusses Zig pointers, enums, structs, unions, type coercion, floats, and optionals, often comparing Zig's syntax and behavior with Rust and Kotlin.

### Source excerpt

Finishing up the basics

## Learning Zig - Day 2

DevFeed: [Learning Zig - Day 2](<https://devfeed.tech/articles/learning-zig-day-2-38541.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/learning-zig--day-2/>)

Author: Harsh Shandilya

Published: 2021-05-15T06:30:00Z

Content type: tutorial

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [Zig](<https://devfeed.tech/topics/zig.md>), [Code](<https://devfeed.tech/topics/code.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [test](<https://devfeed.tech/topics/test.md>), [formatting](<https://devfeed.tech/topics/formatting.md>)

Tags: [array](<https://devfeed.tech/tags/array.md>), [getting-started](<https://devfeed.tech/tags/getting-started.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [learn](<https://devfeed.tech/tags/learn.md>), [learning](<https://devfeed.tech/tags/learning.md>), [rust](<https://devfeed.tech/tags/rust.md>), [testing](<https://devfeed.tech/tags/testing.md>), [zig](<https://devfeed.tech/tags/zig.md>)

### AI overview

A second-day learning journal about Zig covers rebuilding a Rust library, using ziglearn.org, and early observations about Zig's defaults, arrays, testing, and defer feature. The author compares several behaviors with Rust and notes unresolved questions about formatting and diagnostics.

### Source excerpt

Onwards in our quest to learn Zig

## Contextual Symbols in Math

DevFeed: [Contextual Symbols in Math](<https://devfeed.tech/articles/contextual-symbols-in-math-40435.md>)

Original publisher: [Read original article](<https://www.jeremykun.com/2020/05/22/contextual-symbols-in-math/>)

Published: 2020-05-22T12:36:07Z

Content type: opinion

Language: en

Sources: [Jeremy Kun](<https://devfeed.tech/sources/jeremy-kun.md>)

Topics: [context](<https://devfeed.tech/topics/context.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [math](<https://devfeed.tech/topics/math.md>)

Tags: [context](<https://devfeed.tech/tags/context.md>), [function](<https://devfeed.tech/tags/function.md>), [graph](<https://devfeed.tech/tags/graph.md>), [math](<https://devfeed.tech/tags/math.md>), [meaning](<https://devfeed.tech/tags/meaning.md>), [semantic](<https://devfeed.tech/tags/semantic.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [variable](<https://devfeed.tech/tags/variable.md>)

### AI overview

The article explains how context helps readers interpret mathematical notation, including symbols, variable names, capitalization, adjacent letters, and associations between Latin and Greek letters.

### Source excerpt

In my book I discuss the importance of context in reading and writing mathematics. An early step in becoming comfortable with math is deciphering the syntax of mathematical expressions. Another is in connecting the symbols to their semantic meanings. Embedded in these is the subproblem of knowing what to call the commonly used symbols. The more abstract you go, the more exotic the symbols tend to get. Wikipedia has an excellent list for deciphering those symbols that have a typically well-understood meaning, like $ \otimes$ and $ \mathbb{Q}$.

## A Working Mathematician's Guide to Parsing

DevFeed: [A Working Mathematician's Guide to Parsing](<https://devfeed.tech/articles/a-working-mathematician-s-guide-to-parsing-40428.md>)

Original publisher: [Read original article](<https://www.jeremykun.com/2019/04/20/a-working-mathematicians-guide-to-parsing/>)

Published: 2019-04-20T17:51:51Z

Content type: tutorial

Language: en

Sources: [Jeremy Kun](<https://devfeed.tech/sources/jeremy-kun.md>)

Topics: [Parsing](<https://devfeed.tech/topics/parsing.md>), [LaTeX](<https://devfeed.tech/topics/latex.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Code](<https://devfeed.tech/topics/code.md>), [syntax](<https://devfeed.tech/topics/syntax.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [guide](<https://devfeed.tech/tags/guide.md>), [latex](<https://devfeed.tech/tags/latex.md>), [parsing](<https://devfeed.tech/tags/parsing.md>), [programming](<https://devfeed.tech/tags/programming.md>), [regular-expressions](<https://devfeed.tech/tags/regular-expressions.md>), [syntax](<https://devfeed.tech/tags/syntax.md>)

### AI overview

This tutorial explains how to convert LaTeX math delimiters for a blog platform when simple find-and-replace is insufficient. It introduces text manipulation approaches, including regular expressions and a program built from scratch, using basic Python or Perl tools.

### Source excerpt

Our hero, a mathematician, is writing notes in LaTeX and needs to convert it to a format that her blog platform accepts. She's used to using dollar sign delimiters for math mode, but her blog requires \( \) and \[ \]. Find-and-replace fails because it doesn't know about which dollar sign is the start and which is the end. She knows there's some computer stuff out there that could help, but she doesn't have the damn time to sort through it all.

## Let's Build A Simple Interpreter. Part 13: Semantic Analysis.

DevFeed: [Let's Build A Simple Interpreter. Part 13: Semantic Analysis.](<https://devfeed.tech/articles/let-s-build-a-simple-interpreter-part-13-semantic-analysis-33316.md>)

Original publisher: [Read original article](<https://ruslanspivak.com/lsbasi-part13/>)

Author: Ruslan Spivak

Published: 2017-04-27T05:00:00Z

Content type: tutorial

Language: en

Sources: [Ruslan Spivak](<https://devfeed.tech/sources/ruslan-spivak.md>)

Topics: [syntax](<https://devfeed.tech/topics/syntax.md>), [Parsing](<https://devfeed.tech/topics/parsing.md>), [Parser](<https://devfeed.tech/topics/parser.md>), [compilers](<https://devfeed.tech/topics/compilers.md>), [context](<https://devfeed.tech/topics/context.md>)

Tags: [blog](<https://devfeed.tech/tags/blog.md>), [compilers](<https://devfeed.tech/tags/compilers.md>), [errors](<https://devfeed.tech/tags/errors.md>), [parsing](<https://devfeed.tech/tags/parsing.md>), [separate](<https://devfeed.tech/tags/separate.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [types](<https://devfeed.tech/tags/types.md>)

### AI overview

This tutorial explains semantic analysis in interpreters and compilers. It shows why grammatically correct Pascal programs can still contain errors, and how an abstract syntax tree, symbol table, and separate semantic-analysis phase can detect issues such as using undeclared variables.

### Source excerpt

Anything worth doing is worth overdoing. Before doing a deep dive into the topic of scopes, I'd like to make a "quick" detour and talk in more detail about symbols, symbol tables, and semantic analysis. In the spirit of "Anything worth doing is worth overdoing", I hope you'll ...

## Let's Build A Simple Interpreter. Part 12.

DevFeed: [Let's Build A Simple Interpreter. Part 12.](<https://devfeed.tech/articles/let-s-build-a-simple-interpreter-part-12-33315.md>)

Original publisher: [Read original article](<https://ruslanspivak.com/lsbasi-part12/>)

Author: Ruslan Spivak

Published: 2016-12-01T21:20:00Z

Content type: tutorial

Language: en

Sources: [Ruslan Spivak](<https://devfeed.tech/sources/ruslan-spivak.md>)

Topics: [Parsing](<https://devfeed.tech/topics/parsing.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [Code](<https://devfeed.tech/topics/code.md>), [identifier](<https://devfeed.tech/topics/identifier.md>)

Tags: [blog](<https://devfeed.tech/tags/blog.md>), [code](<https://devfeed.tech/tags/code.md>), [identifier](<https://devfeed.tech/tags/identifier.md>), [lexer](<https://devfeed.tech/tags/lexer.md>), [syntax](<https://devfeed.tech/tags/syntax.md>)

### AI overview

Part 12 of a tutorial series explains how to extend a simple interpreter to parse Pascal procedure declarations. It covers procedure syntax, nested declarations, grammar updates, syntax diagrams, and lexer changes for a PROCEDURE token.

### Source excerpt

"Be not afraid of going slowly; be afraid only of standing still." - Chinese proverb. Hello, and welcome back! Today we are going to take a few more baby steps and learn how to parse Pascal procedure declarations. What is a procedure declaration? A procedure declaration is a language construct that ...

## Let's Build A Simple Interpreter. Part 11.

DevFeed: [Let's Build A Simple Interpreter. Part 11.](<https://devfeed.tech/articles/let-s-build-a-simple-interpreter-part-11-33314.md>)

Original publisher: [Read original article](<https://ruslanspivak.com/lsbasi-part11/>)

Author: Ruslan Spivak

Published: 2016-09-21T01:15:00Z

Content type: tutorial

Language: en

Sources: [Ruslan Spivak](<https://devfeed.tech/sources/ruslan-spivak.md>)

Topics: [Parsing](<https://devfeed.tech/topics/parsing.md>), [Parser](<https://devfeed.tech/topics/parser.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [blog](<https://devfeed.tech/tags/blog.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [lexer](<https://devfeed.tech/tags/lexer.md>), [parsing](<https://devfeed.tech/tags/parsing.md>), [recursive-descent-parser](<https://devfeed.tech/tags/recursive-descent-parser.md>), [tokens](<https://devfeed.tech/tags/tokens.md>)

### AI overview

Part 11 recaps how to build an interpreter by performing lexical analysis, parsing, grammar mapping, recursive-descent parsing, AST construction and traversal, and interpretation of a complete Pascal program. It previews nested procedures and functions, semantic analysis, and control flow.

### Source excerpt

I was sitting in my room the other day and thinking about how much we had covered, and I thought I would recap what we've learned so far and what lies ahead of us. Up until now we've learned: How to break sentences into tokens. The process is ...

## Union syntax

DevFeed: [Union syntax](<https://devfeed.tech/articles/union-syntax-38898.md>)

Original publisher: [Read original article](<http://neopythonic.blogspot.com/2016/05/union-syntax.html>)

Author: Guido van Rossum (noreply@blogger.com)

Published: 2016-05-18T18:55:00Z

Content type: opinion

Language: en

Sources: [Guido van Rossum](<https://devfeed.tech/sources/guido-van-rossum.md>)

Topics: [Python](<https://devfeed.tech/topics/python.md>), [union types](<https://devfeed.tech/topics/union-types.md>), [syntax](<https://devfeed.tech/topics/syntax.md>)

Tags: [python](<https://devfeed.tech/tags/python.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [types](<https://devfeed.tech/tags/types.md>), [union](<https://devfeed.tech/tags/union.md>)

### AI overview

The article explains why PEP 484 uses Union[X, Y, Z] for expressing union types in Python. It argues that alternatives such as X|Y|Z, {X, Y, Z}, and (X, Y, Z) would create compatibility or semantic confusion, while Union[] works with existing Python versions and type-checking behavior.

### Source excerpt

Union syntax (I'm trying to do this as a quick post in response to some questions I received on this topic. I realize this will probably reopen the whole discussion about the best syntax for types, but sorry folks, PEP 484 was accepted nearly a year ago, after many months of discussions and hundreds of messages. It's unlikely that any idea you can think of here would be new. This post just explains the rationale of one particular decision and tries to put it in some context.) I've heard some grumbling about the union syntax in PEP 484: Union[X, Y, Z] (where X, Y and Z are arbitrary type expressions). In the past people have suggested X|Y|Z for this, or (X, Y, Z) or {X, Y, Z}. Why did we go with the admittedly clunkier Union[X, Y, Z]? First of all, despite all the attention drawn to it, unions are actually a pretty minor feature, and you shouldn't be using them much. So you also shouldn't care that much. Why not X|Y|Z? This won't fly because we want compatibility with versions of Python 3 that were already frozen (see below). We want to be able to express e.g. a union of int and str, which under this notation would be written as int|str. But for that to fly we'd have to modify the builtin 'type' class to implement __or__ -- and that wouldn't fly on already-frozen Python versions. Supporting X|Y only for types (like List) imported from the typing module and some other notation for builtin types would only sow confusion. So X|Y|Z is out. Why not {X, Y, Z}? That's the set with elements X, Y and Z, using the builtin set notation. We can usefully consider types to be sets of values, and this makes a union a set of values too (that's why it's called union :-). However, {X, Y, Z} confuses the set of types with the set of values, which I consider a mortal sin. This would just cause endless confusion. This notation would also confuse things when taking the union of several classes that overlap, e.g. if we have classes B and C, where C inherits from B, then the union of B and

## ES6 IIFE with fat arrow functions

DevFeed: [ES6 IIFE with fat arrow functions](<https://devfeed.tech/articles/es6-iife-with-fat-arrow-functions-32301.md>)

Original publisher: [Read original article](<https://jack.ofspades.com/es6-iife-with-fat-arrow-functions/>)

Author: Jack Tarantino

Published: 2015-11-29T17:45:39Z

Content type: tutorial

Language: en

Sources: [Jacopo Tarantino](<https://devfeed.tech/sources/jacopo-tarantino.md>)

Topics: [es6](<https://devfeed.tech/topics/es6.md>), [es2015](<https://devfeed.tech/topics/es2015.md>), [function](<https://devfeed.tech/topics/function.md>), [syntax](<https://devfeed.tech/topics/syntax.md>)

Tags: [best-practices](<https://devfeed.tech/tags/best-practices.md>), [closure](<https://devfeed.tech/tags/closure.md>), [context](<https://devfeed.tech/tags/context.md>), [es2015](<https://devfeed.tech/tags/es2015.md>), [es6](<https://devfeed.tech/tags/es6.md>), [function](<https://devfeed.tech/tags/function.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [syntax](<https://devfeed.tech/tags/syntax.md>)

### AI overview

This tutorial explains how to write Immediately Invoked Function Expressions (IIFEs) in ES6 using fat arrow functions. It compares shorter syntax options, notes differences in function context, and describes a compact form for creating closures that cannot accept arguments.

### Source excerpt

Writing Immediately Invoked Function Expressions or IIFEs in ES6(Also known as ES2015 now) just got a lot easier with the introduction of fat arrow functions. (global => { const MY_CONSTANT = 'api key or something' let counter = 0 let some_array = [1,2,34,5,6,7] counter = some_array.

## Customizing Android Studio themes with Material Theme UI and ChroMATERIAL

DevFeed: [Customizing Android Studio themes with Material Theme UI and ChroMATERIAL](<https://devfeed.tech/articles/making-android-studio-pretty-38372.md>)

Original publisher: [Read original article](<https://meedamian.com/post/deuglifying-android-studio/>)

Author: hi@meedamian.com (Damian Mee)

Published: 2015-11-20T00:00:00Z

Content type: tutorial

Language: en

Sources: [Damian Mee | Blog | Portfolio | About](<https://devfeed.tech/sources/damian-mee-blog-portfolio-about.md>)

Topics: [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [GUI](<https://devfeed.tech/topics/gui.md>), [syntax](<https://devfeed.tech/topics/syntax.md>)

Tags: [android-studio](<https://devfeed.tech/tags/android-studio.md>), [gui](<https://devfeed.tech/tags/gui.md>), [plugins](<https://devfeed.tech/tags/plugins.md>), [syntax](<https://devfeed.tech/tags/syntax.md>)

### AI overview

A tutorial for restoring and customizing Android Studio's GUI, syntax, and LogCat color themes. It explains how to install Material Theme UI and ChroMATERIAL, then apply and adjust a color scheme.

### Source excerpt

Today, during a glorious transition from 1.5 rc1 to 1.5 Android Studio decided to keep all of my settings completely intact, with the honorable exception of GUI and syntax themes and LogCat colors, which were just gone. Being me, I had not the slightest recollection on how the previous combo have gotten into my editor and I had to search for everything again. Not particularly enjoying the process of rediscovery, I decided to keep it stashed somewhere, both for the future me and maybe for some curious souls that happen to bump onto my blog.

## Let's Build A Simple Interpreter. Part 6.

DevFeed: [Let's Build A Simple Interpreter. Part 6.](<https://devfeed.tech/articles/let-s-build-a-simple-interpreter-part-6-33327.md>)

Original publisher: [Read original article](<https://ruslanspivak.com/lsbasi-part6/>)

Author: Ruslan Spivak

Published: 2015-11-02T12:00:00Z

Content type: tutorial

Language: en

Sources: [Ruslan Spivak](<https://devfeed.tech/sources/ruslan-spivak.md>)

Topics: [Parsing](<https://devfeed.tech/topics/parsing.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [blog](<https://devfeed.tech/tags/blog.md>), [code](<https://devfeed.tech/tags/code.md>), [expression](<https://devfeed.tech/tags/expression.md>), [lexer](<https://devfeed.tech/tags/lexer.md>), [recursion](<https://devfeed.tech/tags/recursion.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [tokens](<https://devfeed.tech/tags/tokens.md>)

### AI overview

This tutorial extends an arithmetic-expression grammar to support parenthesized expressions with arbitrarily deep nesting. It updates the lexer and interpreter to evaluate expressions containing integers and arithmetic operators.

### Source excerpt

Today is the day :) "Why?" you might ask. The reason is that today we're wrapping up our discussion of arithmetic expressions (well, almost) by adding parenthesized expressions to our grammar and implementing an interpreter that will be able to evaluate parenthesized expressions with arbitrarily deep nesting, like the expression ...

## Avoid naming a constraint directly when using ON CONFLICT DO UPDATE

DevFeed: [Avoid naming a constraint directly when using ON CONFLICT DO UPDATE](<https://devfeed.tech/articles/avoid-naming-a-constraint-directly-when-using-on-conflict-do-update-33652.md>)

Original publisher: [Read original article](<https://pgeoghegan.blogspot.com/2015/10/avoid-naming-constraint-directly-when.html>)

Author: Peter Geoghegan (noreply@blogger.com)

Published: 2015-10-02T18:36:00Z

Content type: article

Language: en

Sources: [Peter Geoghegan's blog](<https://devfeed.tech/sources/peter-geoghegan-s-blog.md>)

Topics: [PostgreSQL](<https://devfeed.tech/topics/postgresql.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [ordering](<https://devfeed.tech/topics/ordering.md>)

Tags: [concurrently](<https://devfeed.tech/tags/concurrently.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [indexes](<https://devfeed.tech/tags/indexes.md>), [postgresql](<https://devfeed.tech/tags/postgresql.md>), [syntax](<https://devfeed.tech/tags/syntax.md>)

### AI overview

The article explains PostgreSQL 9.5's UPSERT syntax and recommends using unique index inference with ON CONFLICT DO UPDATE instead of naming a constraint directly. It describes how inference selects arbiter indexes and handles variations such as column ordering, partial-index predicates, and multiple equivalent unique indexes.

### Source excerpt

PostgreSQL 9.5 will have support for a feature that is popularly known as "UPSERT" - the ability to either insert or update a row according to whether an existing row with the same key exists. If such a row already exists, the implementation should update it. If not, a new row should be inserted. This is supported by way of a new high level syntax (a clause that extends the INSERT statement) that more or less relieves the application developer from having to give any thought to race conditions. This common operation for client applications is set to become far simpler and far less error-prone than legacy ad-hoc approaches to UPSERT involving subtransactions. When we worked on UPSERT, many edge-cases were carefully considered. A technique called "unique index inference" allows DML statement authors to be very explicit about what condition they want to take the alternative (UPDATE or NOTHING) path on. That alternative path can only be taken in the event of a would-be duplicate violation in an "arbiter" unique index (for the DO NOTHING variant, a would-be exclusion violation is also a possible reason to take the alternative NOTHING path). The ability to write UPSERT statements explicitly and safely while also having lots of flexibility is an important differentiator for PostgreSQL's UPSERT in my view. As the 9.5 INSERT documentation explains, the inference syntax contains one or more column_name_index (columns) and/or expression_index expressions (expressions), and perhaps an optional index_predicate (for partial unique indexes, which are technically not constraints at all). This is internally used to figure out which of any available unique indexes ought to be considered as an arbiter of taking the alternative path. If none can be found, the optimizer raises an error. The inference syntax is very flexible, and very tolerant of variations in column ordering, whether or not a partial unique index predicate is satisfied, and several other things. It can infer multiple un

## Let's Build A Simple Interpreter. Part 4.

DevFeed: [Let's Build A Simple Interpreter. Part 4.](<https://devfeed.tech/articles/let-s-build-a-simple-interpreter-part-4-33325.md>)

Original publisher: [Read original article](<https://ruslanspivak.com/lsbasi-part4/>)

Author: Ruslan Spivak

Published: 2015-09-11T11:00:00Z

Content type: tutorial

Language: en

Sources: [Ruslan Spivak](<https://devfeed.tech/sources/ruslan-spivak.md>)

Topics: [Parser](<https://devfeed.tech/topics/parser.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Parsing](<https://devfeed.tech/topics/parsing.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [generators](<https://devfeed.tech/topics/generators.md>)

Tags: [blog](<https://devfeed.tech/tags/blog.md>), [bnf](<https://devfeed.tech/tags/bnf.md>), [code](<https://devfeed.tech/tags/code.md>), [generators](<https://devfeed.tech/tags/generators.md>), [programming](<https://devfeed.tech/tags/programming.md>), [syntax](<https://devfeed.tech/tags/syntax.md>)

### AI overview

Part 4 of a series on building a simple interpreter. It explains how to parse and interpret arithmetic expressions containing multiplication and division, including integer division, and introduces context-free grammars and modified EBNF notation for specifying programming-language syntax.

### Source excerpt

Have you been passively learning the material in these articles or have you been actively practicing it? I hope you've been actively practicing it. I really do :) Remember what Confucius said? "I hear and I forget." "I see and I remember." "I do and I understand." In the previous ...

## Let's Build A Simple Interpreter. Part 3.

DevFeed: [Let's Build A Simple Interpreter. Part 3.](<https://devfeed.tech/articles/let-s-build-a-simple-interpreter-part-3-33324.md>)

Original publisher: [Read original article](<https://ruslanspivak.com/lsbasi-part3/>)

Author: Ruslan Spivak

Published: 2015-08-12T11:00:00Z

Content type: tutorial

Language: en

Sources: [Ruslan Spivak](<https://devfeed.tech/sources/ruslan-spivak.md>)

Topics: [Parser](<https://devfeed.tech/topics/parser.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [blog](<https://devfeed.tech/tags/blog.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [parsing](<https://devfeed.tech/tags/parsing.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [syntax](<https://devfeed.tech/tags/syntax.md>)

### AI overview

Part 3 of a series on building a simple interpreter explains how to parse and interpret arithmetic expressions containing any number of plus or minus operators. It introduces syntax diagrams as visual representations of programming-language grammar and shows how they can guide parser implementation.

### Source excerpt

I woke up this morning and I thought to myself: "Why do we find it so difficult to learn a new skill?" I don't think it's just because of the hard work. I think that one of the reasons might be that we spend a lot of time ...

## Why Clojure's Simplicity Can Make It Accessible and Practical

DevFeed: [Why Clojure's Simplicity Can Make It Accessible and Practical](<https://devfeed.tech/articles/clojure-is-still-not-for-geniuses-32104.md>)

Original publisher: [Read original article](<https://adambard.com/blog/clojure-is-not-even-for-clever-people/>)

Published: 2014-11-24T00:00:00Z

Content type: opinion

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Clojure](<https://devfeed.tech/topics/clojure.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [clojure](<https://devfeed.tech/tags/clojure.md>), [essay](<https://devfeed.tech/tags/essay.md>), [language](<https://devfeed.tech/tags/language.md>), [languages](<https://devfeed.tech/tags/languages.md>), [practical](<https://devfeed.tech/tags/practical.md>), [simplicity](<https://devfeed.tech/tags/simplicity.md>)

### AI overview

This essay argues that Clojure's regular syntax and emphasis on simplicity can make the language easier to read, write, and understand. It focuses on accessibility and practical use rather than advanced Lisp concepts, and includes a brief syntax primer.

### Source excerpt

The inspiration for the article I wrote last week entitled Clojure is not for geniuses was inspired by Tommy Hall's talk at Euroclojure 2014, wherein he made an offhand joke about preferring Clojure for its minimal syntax, as he possesses a small brain (both his blog and his head suggest this assertion is false). I had intended to bring this up with the original article, but got sidetracked talking about immutable things and never got back around to it. Here I'd like to address that, along with some discussion that arose in various forums after the first article.

[Next page](<https://devfeed.tech/topics/syntax.md?cursor=WyIyMDE0LTExLTI0VDAwOjAwOjAwKzAwOjAwIiwgIjZlMWU5Mzc2LTEzOTktNGE2Zi05Y2I0LTk0MmJlMTI1NzUxMiJd>)