acm-header
Sign In

Communications of the ACM

Blogroll


Refine your search:
datePast Year
authorDaniel Lemire
bg-corner

Programmer time and the pitfalls of wasteful work
From Daniel Lemire's Blog

Programmer time and the pitfalls of wasteful work

Programmer time is precious. This realization should shape our approach to software development, focusing our efforts on tasks that genuinely contribute to theContinue...

Regular expressions can blow up!
From Daniel Lemire's Blog

Regular expressions can blow up!

Regular expressions, often abbreviated as regex, are a powerful tool for pattern matching within text. For example, the expression \d*\.?\d+ would match a positive...

Checking whether an ARM NEON register is zero
From Daniel Lemire's Blog

Checking whether an ARM NEON register is zero

Your phone probably runs on 64-bit ARM processors. These processors are ubiquitous: they power the Nintendo Switch, they power cloud servers at both Amazon AWSContinue...

JavaScript hashing speed comparison: MD5 versus SHA-256
From Daniel Lemire's Blog

JavaScript hashing speed comparison: MD5 versus SHA-256

Hashing algorithms convert input data into a fixed-size string of characters, known as a hash value or digest. These algorithms are one-way functions, meaning the...

Counting the digits of 64-bit integers
From Daniel Lemire's Blog

Counting the digits of 64-bit integers

Given an integer in software, you may want to know how many decimal digits it needs. For example, the integer 100 requires 3 digits, the integer 9999 requires 4...

How does your URL parser handle Unicode?
From Daniel Lemire's Blog

How does your URL parser handle Unicode?

Most strings today in software are Unicode strings. It means that you can include mathematical symbols, emojis and so forth. There are many different versions of...

Efficient In-Place UTF-16 Unicode Correction with ARM NEON
From Daniel Lemire's Blog

Efficient In-Place UTF-16 Unicode Correction with ARM NEON

Modern-day text in software can be expected to be Unicode. Unicode is stored in two formats: UTF-8 and UTF-16. UTF-16 is an encoding system used by several platforms...

Simpler and faster parsing code with std::views::split
From Daniel Lemire's Blog

Simpler and faster parsing code with std::views::split

Parsing text files is often confusing irrespective of your programming language. It can also be surprising slow. As an example, let us consider the following problem...

Accessing the attributes of a struct in C++ as array elements?
From Daniel Lemire's Blog

Accessing the attributes of a struct in C++ as array elements?

In C++, it might be reasonable to represent a URL using a class or a struct made of several strings, like so: struct basic { std::string protocol; std::string username...

Data structures as jigs for programmers (Go edition)
From Daniel Lemire's Blog

Data structures as jigs for programmers (Go edition)

A data structure in programming is a specific way of organizing and storing data in a computer so that it can be accessed and used efficiently. In woodworking or...

Parsing floats at over a gigabyte per second in C#
From Daniel Lemire's Blog

Parsing floats at over a gigabyte per second in C#

A few years ago, we wrote csFastFloat, a C# library to parse floating-point numbers faster. Given the string “3.1416”, it computes the binary value 3.1416. TheContinue...

Graduate degrees are overrated
From Daniel Lemire's Blog

Graduate degrees are overrated

Though I have many brilliant graduate students, I love working with undergraduate students. And I am not at all sure that you should favor people with graduateContinue...

Having fun with modern C++
From Daniel Lemire's Blog

Having fun with modern C++

Recent versions of the C++ language (C++20 and C++23) may allow you to change drastically how you program in C++. I want to provide some fun examples. Thanks to...

How fast can you parse a CSV file in C#?
From Daniel Lemire's Blog

How fast can you parse a CSV file in C#?

We often store large datasets using comma-separated-value (CSV) files. The format is simple enough, each line of a text file is made of several values separated...

Table lookups are efficient
From Daniel Lemire's Blog

Table lookups are efficient

When optimizing small functions, I often rely on a table lookup: I replace the actual computation with table of precomputed values. It is often surprisingly efficient...

From software to reality?
From Daniel Lemire's Blog

From software to reality?

Both the Physics and Chemistry Nobel prizes were awarded to computer scientists in 2024. Computer scientists are emerging as leading figures in the natural sciences...

Geoffrey Hinton, the Godfather of Deep Learning, wins Nobel Prize in Physics!
From Daniel Lemire's Blog

Geoffrey Hinton, the Godfather of Deep Learning, wins Nobel Prize in Physics!

So… in 2024, the Physics Nobel prize was awarded to a Computer Scientist. Is Physics out of ideas? The Nobel Committee just gave a Physics award to a COMPUTER SCIENTIST...

Iterating through matched characters in modern C++: views::filter and coroutine
From Daniel Lemire's Blog

Iterating through matched characters in modern C++: views::filter and coroutine

Consider the following problem. You want to iterate through the characters of a strings and find only those matching some criteria. For example, you might wantContinue...

It is never too later to write your own C/C++ command-line utilities
From Daniel Lemire's Blog

It is never too later to write your own C/C++ command-line utilities

Recently, I received an email from an engineer at a prominent company who shared how he managed to save his employer tens of thousands of dollars annually by developing...

Replace strings by views when you can
From Daniel Lemire's Blog

Replace strings by views when you can

C++ programmers tend to represent strings using the std::string class. Though the implementation might vary, each instance of an std::string might use 32 bytes....
Sign In for Full Access
» Forgot Password? » Create an ACM Web Account