acm-header
Sign In

Communications of the ACM

Blogroll


bg-corner

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

Reflection-based JSON in C++ at Gigabytes per Second
From Daniel Lemire's Blog

Reflection-based JSON in C++ at Gigabytes per Second

JSON (JavaScript Object Notation) is a popular format for storing and transmitting data. It uses human-readable text to represent structured data in the form of...

Converting ASCII strings to lower case at crazy speeds with AVX-512
From Daniel Lemire's Blog

Converting ASCII strings to lower case at crazy speeds with AVX-512

AMD Zen 4 and Zen 5, as well as server-side recent Intel processors, support an advanced set of instructions called AVX-512. They are powerful SIMD (Single Instruction...

Evolution of iPhone storage capacity
From Daniel Lemire's Blog

Evolution of iPhone storage capacity

People who should know better often underestimate how fast our storage capacity has grown. We have been able to get 1 TB of storage on iPhones for the last three...

Storage costs are plummeting
From Daniel Lemire's Blog

Storage costs are plummeting

Storage costs are plummeting like a skydiver in freefall—between 10 and 100 times cheaper with each passing decade. Meanwhile, the programmer population is growing...

How big are your docker images?
From Daniel Lemire's Blog

How big are your docker images?

Docker is a standard to deploy software on the cloud. Developers start with an existing image and add their own code before deploying their systems. How big are...

How much of your binary executable is just ASCII text?
From Daniel Lemire's Blog

How much of your binary executable is just ASCII text?

We sometimes use binary executable which can span megabytes. I wondered: how much text is contained in these binary files? To find out, I wrote a Python scriptContinue...
Sign In for Full Access
» Forgot Password? » Create an ACM Web Account