ErlangVM supports an incredible ecosystem. Here is my first
impression of it: dead simple semantics, one of the best modern
toolings, the best model for concurrent programming.
Being an intern
manager is good way to exercise your skills for project management and
get a taste of the management role. This post shares my experience as an intern manager on planning and managing software projects.
ThreadPoolExecutor introduces threads to run tasks. There are
two important executors based on ThreadPoolExecutor:
IOThreadPoolExecutor for IO bound tasks, and CPUThreadPoolExecutor for
CPU bound tasks. They respond to loads differently.
How is folly::Promise implemented such that Promise::setValue can safely pass data to the associated future even if the promise is destroyed immediately after calling setValue?
There are times when we need to work with async C libraries
in our C++ programs. we can follow a simple two-step conversion to
build a thin async layer on top of the library to avoid callback hell
in the program.
Executor is an important concept in folly that bridges many
constructs. In this post, we explore what an Executor is, and many
derivatives that extend the Executor family.
On Linux, we can give each thread a name so debugging
multi-thread program is easier. pthread_setname_np is the call to
name a thread. It's as easy as that. In this post, however, I want to
write more details about the implementation.
The folly::fibers provides a set of constructs for
cooperative context switch. In this post, we explains in detail how
tasks are scheduled and executed in FiberManager.
Folly implements fibers using boost fcontext. To
understand folly::fibers, we'll need to understand boost
fcontext first. This post explores how boost implements
non-preemptive control transfers.
It is easy to write language package in Atom. The lack of official document was the major blocker for me when I wrote the package for Pollen. In this post, I'll cover my process of creating the package for Pollen.
When writing C programs, I used to declare function prototypes without fully specifying their parameters. This is a bad engineering practice. Writting a code generator helps me realize how bad it could be from the perspective of compilers. Here are my notes on how a compiler may generate bizarre code from this practice.
Sometimes you want to create a minor mode that sticks across
various major-mode changes in a buffer, and you don't want it to be
global minor mode (after all, why should your minor mode globally
affect other modes). Emacs already provides symbol properties for
situations like this.
Given an nonjudgemental mind that focuses on present, with an attitude
of enjoying and welcoming challenges, life must be as colorful as it
is supposed to be.