acm-header
Sign In

Communications of the ACM

Blogroll


Refine your search:
datePast Year
authorDaniel Lemire
bg-corner

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....

Compressing floating-point numbers quickly by converting them to brain floats
From Daniel Lemire's Blog

Compressing floating-point numbers quickly by converting them to brain floats

We sometimes have to work a large quantity of floating-point numbers. This volume can be detrimental to performance. Thus we often want to compress these numbers...

Parsing tiny and very large floating-point values: a programming-language comparison
From Daniel Lemire's Blog

Parsing tiny and very large floating-point values: a programming-language comparison

Most programming languages support floating-point numbers. You typically have the ability to turn a string into a floating-point number. E.g., “3.1416” could be...

Faster random integer generation with batching
From Daniel Lemire's Blog

Faster random integer generation with batching

We often generate random integers. Quite often these numbers must be within an interval: e.g., an integer between 0 and 100. One application is a random shuffle...
Sign In for Full Access
» Forgot Password? » Create an ACM Web Account