Skip to main content

VirtusLab's Articles

Backend Engineering|Jul 17, 2019

Implementing a server for the Language Server Protocol

In this article, we explain how to implement a Language Server Protocol server to decouple code presentation from language logic, using Metals and Scala. It walks through adding a simple document highlight feature. 

Implementing a server for the Language Server Protocol cover
Backend Engineering|Jan 30, 2019

On the missing package private — or why Java is better than Kotlin in this regard

Kotlin lacks Java’s package-private visibility, exposing everything by default unless explicitly marked, which can bloat APIs and hinder encapsulation. The author praises Java’s manifest-based modular exports for making visibility decisions more conscious and centralized.

On the missing package private cover
Scala|Nov 21, 2018

OOP vs. FP. The pursuit of extensibility part #1

VirtusLab compares object‑oriented and functional programming through the Expression Problem, showing how each paradigm handles extensibility differently. The article highlights how FP easily adds new operations, while OOP easily adds new data forms.

OOP vs FP cover
Backend Engineering|Oct 28, 2015

Arrows, Monads and Kleisli — part 1

A general abstraction extends functions into composable building blocks, enabling the expression of business logic as data flows. This shift transforms side‑effecting, exception‑ridden code into clean, purely functional pipelines.

Arrows Monads and Kleisli part 1 cover