Slava Chernoy

Software Engineer

About

Backend software engineer with focus on building infrastructure and distributed systems.

Interests
  • Distributed Systems
  • Infrastructure
Education
  • MSc in Computer Science, 2011

    Technion -- Israel Institute of Technology

Recent Posts

From Oberon to Go: A Short Family Tree

A compact overview of the Oberon family of languages and how their ideas lead to Go. The lineage runs from Pascal and Modula-2 through Oberon and its variants to Go, with shared emphasis on simplicity, strong typing, and clear semantics.

Oberon (1986) — Niklaus Wirth & Jurg Gutknecht

  • Evolved from Pascal and Modula-2; designed for simplicity and efficiency.
  • Strong typing, modular programming, integrated development environment.
  • Used in software and hardware (e.g. Ceres workstation); part of Project Oberon at ETH Zurich.

Oberon-2 (1991) — Hanspeter Mössenböck

  • Extension of Oberon with object-oriented features.
  • Type-bound procedures, read-only export of variables and methods.
  • Improved type safety and reusability.

Modula-3 (1988) — Luca Cardelli, James Donahue, Greg Nelson, Paul Rovner, Andrew Birrell

  • Evolution of Modula-2: simplicity, safety, systems programming.
  • Garbage collection, exception handling, strong type system with modules.
  • Concurrency and generic programming.

Active Oberon (1997) — Jurg Gutknecht

  • Extends Oberon with active objects and concurrency.
  • Combines object-oriented and system-programming features.
  • Runtime and language support for concurrent processes.

Zonnon (2005) — Jurg Gutknecht

  • Draws on Oberon, Active Oberon, and Modula-2.
  • Component-oriented programming, concurrency and parallelism.
  • Refined syntax and semantics.

Oberon-07 (2007) — Niklaus Wirth

  • Simplified, modernized Oberon.
  • Removed deprecated features; clearer syntax and safer semantics.
  • Streamlined compiler and language report.

Component Pascal (1997)

  • Clemens Szyperski: Component Pascal at Oberon Microsystems (1991–1997); component-based software; author of Component Software: Beyond Object-Oriented Programming.
  • K. John Gough: Co-developed Gardens Point Component Pascal for .NET.

Derived from Oberon-2 with stronger object-oriented and component-oriented features; designed for component-based software engineering and .NET integration (Gardens Point).

Solving a Three-Variable Recursion via Generating Functions

This post extends the generating-function technique from the two-variable recursion to a three-variable case. I originally wrote this as an answer to a Math Stack Exchange question; here it is adapted for the blog with clearer exposition and code.

The Problem

We want to solve the recurrence

$a_{n,m,k} = 2a_{n-1,m-1,k-1} + a_{n-1,m-1,k}$ $ + a_{n,m-1,k-1} + a_{n-1,m,k-1}$

where $m$, $n$, $k$ are nonnegative integers, with boundary conditions:

  • $a_{0,0,0} = a_{0,1,0} = a_{1,0,0} = a_{0,0,1} = 1$
  • $a_{n,0,0} = a_{0,n,0} = a_{0,0,n} = 0$ for any $n > 1$
  • $a_{n,m,k}$ is symmetric in $n$, $m$, $k$

A subtlety: $a_{1,0,1}$ is not defined by the recurrence alone, since it would require values like $a_{0,-1,0}$. We take $a_{n,m,k} = 0$ whenever any subscript is negative.