<!doctype html><html lang="en" class="no-js"><head><meta charset="utf-8"> <!-- begin SEO --><title>Blog posts - François Garillot</title><meta property="og:locale" content="en-US"><meta property="og:site_name" content="François Garillot"><meta property="og:title" content="Blog posts"><link rel="canonical" href="https://www.garillot.net/year-archive/"><meta property="og:url" content="https://www.garillot.net/year-archive/"><meta property="og:description" content="Blog posts by François Garillot on cryptography, Rust, distributed systems, formal methods, and performance engineering."><meta name="twitter:site" content="@huitseeker"><meta name="twitter:title" content="Blog posts"><meta name="twitter:description" content="Blog posts by François Garillot on cryptography, Rust, distributed systems, formal methods, and performance engineering."><meta name="twitter:url" content="https://www.garillot.net/year-archive/"><meta name="twitter:card" content="summary"><meta name="twitter:image" content="https://www.garillot.net/images/profile.png"> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "Organization", "url": "https://www.garillot.net", "logo": "https://www.garillot.net/images/profile.png" } </script> <script type="application/ld+json"> { "@context" : "http://schema.org", "@type" : "Person", "name" : "François Garillot", "url" : "https://www.garillot.net", "sameAs" : ["https://github.com/huitseeker","https://twitter.com/huitseeker","https://www.linkedin.com/in/huitseeker","https://scholar.google.com/citations?user=RKI2kaQAAAAJ&hl=en","https://orcid.org/0000-0002-6991-2011"] } </script> <!-- end SEO --><link href="https://www.garillot.net/feed.xml" type="application/atom+xml" rel="alternate" title="François Garillot Feed"> <!-- http://t.co/dKP3o1e --><meta name="HandheldFriendly" content="True"><meta name="MobileOptimized" content="320"><meta name="viewport" content="width=device-width, initial-scale=1.0"> <script> document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js '; </script> <!-- For all browsers --><link rel="stylesheet" href="https://www.garillot.net/assets/css/main.css"><meta http-equiv="cleartype" content="on"> <!-- start custom head snippets --><link rel="apple-touch-icon" sizes="57x57" href="https://www.garillot.net/images/apple-touch-icon-57x57.png?v=M44lzPylqQ"><link rel="apple-touch-icon" sizes="60x60" href="https://www.garillot.net/images/apple-touch-icon-60x60.png?v=M44lzPylqQ"><link rel="apple-touch-icon" sizes="72x72" href="https://www.garillot.net/images/apple-touch-icon-72x72.png?v=M44lzPylqQ"><link rel="apple-touch-icon" sizes="76x76" href="https://www.garillot.net/images/apple-touch-icon-76x76.png?v=M44lzPylqQ"><link rel="apple-touch-icon" sizes="114x114" href="https://www.garillot.net/images/apple-touch-icon-114x114.png?v=M44lzPylqQ"><link rel="apple-touch-icon" sizes="120x120" href="https://www.garillot.net/images/apple-touch-icon-120x120.png?v=M44lzPylqQ"><link rel="apple-touch-icon" sizes="144x144" href="https://www.garillot.net/images/apple-touch-icon-144x144.png?v=M44lzPylqQ"><link rel="apple-touch-icon" sizes="152x152" href="https://www.garillot.net/images/apple-touch-icon-152x152.png?v=M44lzPylqQ"><link rel="apple-touch-icon" sizes="180x180" href="https://www.garillot.net/images/apple-touch-icon-180x180.png?v=M44lzPylqQ"><link rel="icon" type="image/png" href="https://www.garillot.net/images/favicon-32x32.png?v=M44lzPylqQ" sizes="32x32"><link rel="icon" type="image/png" href="https://www.garillot.net/images/android-chrome-192x192.png?v=M44lzPylqQ" sizes="192x192"><link rel="icon" type="image/png" href="https://www.garillot.net/images/favicon-96x96.png?v=M44lzPylqQ" sizes="96x96"><link rel="icon" type="image/png" href="https://www.garillot.net/images/favicon-16x16.png?v=M44lzPylqQ" sizes="16x16"><link rel="manifest" href="https://www.garillot.net/images/manifest.json?v=M44lzPylqQ"><link rel="mask-icon" href="https://www.garillot.net/images/safari-pinned-tab.svg?v=M44lzPylqQ" color="#000000"><link rel="shortcut icon" href="/images/favicon.ico?v=M44lzPylqQ"><meta name="msapplication-TileColor" content="#000000"><meta name="msapplication-TileImage" content="https://www.garillot.net/images/mstile-144x144.png?v=M44lzPylqQ"><meta name="msapplication-config" content="https://www.garillot.net/images/browserconfig.xml?v=M44lzPylqQ"><meta name="theme-color" content="#ffffff"><link rel="stylesheet" href="https://www.garillot.net/assets/css/academicons.css"/> <script type="text/x-mathjax-config"> MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: "all" } } }); </script> <script type="text/x-mathjax-config"> MathJax.Hub.Config({ tex2jax: { inlineMath: [ ['$','$'], ["\\(","\\)"] ], processEscapes: true } }); </script> <script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/latest.js?config=TeX-MML-AM_CHTML' async></script> <!-- end custom head snippets --></head><body> <!--[if lt IE 9]><div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div><![endif]--><div class="masthead"><div class="masthead__inner-wrap"><div class="masthead__menu"><nav id="site-nav" class="greedy-nav"> <button><div class="navicon"></div></button><ul class="visible-links"><li class="masthead__menu-item masthead__menu-item--lg"><a href="https://www.garillot.net/">François Garillot</a></li><li class="masthead__menu-item"><a href="https://www.garillot.net/about/">About</a></li><li class="masthead__menu-item"><a href="https://www.garillot.net/publications/">Publications</a></li><li class="masthead__menu-item"><a href="https://www.garillot.net/talks/">Talks</a></li><li class="masthead__menu-item"><a href="https://www.garillot.net/year-archive/">Blog</a></li></ul><ul class="hidden-links hidden"></ul></nav></div></div></div><nav class="breadcrumbs"><ol itemscope itemtype="http://schema.org/BreadcrumbList"><li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"> <a href="https://www.garillot.net/" itemprop="item"><span itemprop="name">Home</span></a><meta itemprop="position" content="1" /></li><span class="sep">/</span><li class="current">Blog posts</li></ol></nav><div id="main" role="main"><div class="sidebar sticky"><div itemscope itemtype="http://schema.org/Person"><div class="author__avatar"> <img src="https://www.garillot.net/images/profile.png" class="author__avatar" alt="François Garillot"></div><div class="author__content"><h3 class="author__name">François Garillot</h3><p class="author__bio">Lead engineer at Miden since 2025, working on zero-knowledge systems.</p></div><div class="author__urls-wrapper"> <button class="btn btn--inverse">Follow</button><ul class="author__urls social-icons"><li><i class="fa fa-fw fa-map-marker" aria-hidden="true"></i> Montreal</li><li><i class="fa fa-fw fa-map-marker" aria-hidden="true"></i> Miden</li><li><a href="https://twitter.com/huitseeker"><i class="fab fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter</a></li><li><a href="https://www.linkedin.com/in/huitseeker"><i class="fab fa-fw fa-linkedin" aria-hidden="true"></i> LinkedIn</a></li><li><a href="https://github.com/huitseeker"><i class="fab fa-fw fa-github" aria-hidden="true"></i> Github</a></li><li><a href="https://www.stackoverflow.com/users/47978/francois-g"><i class="fab fa-fw fa-stack-overflow" aria-hidden="true"></i> Stackoverflow</a></li><li><a href="https://scholar.google.com/citations?user=RKI2kaQAAAAJ&hl=en"><i class="fas fa-fw fa-graduation-cap"></i> Google Scholar</a></li><li><a href="https://orcid.org/0000-0002-6991-2011"><i class="ai ai-orcid-square ai-fw"></i> ORCID</a></li></ul></div></div></div><div class="archive"><h1 class="page__title">Blog posts</h1><h2 id="2025" class="archive__subtitle">2025</h2><div class="list__item"><article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"><h2 class="archive__item-title" itemprop="headline"> <a href="https://www.garillot.net/posts/2025/04/drilling-down-texray/" rel="permalink">Drilling down on Rust Performance Bottlenecks with tokio-tracing and texray </a></h2><p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 10 minute read</p><p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Published:</strong> <time datetime="2025-04-28T00:00:00-07:00">April 28, 2025</time></p><p class="archive__item-excerpt" itemprop="description"><p>When a Rust program feels sluggish, adding instrumentation can shine a light on <em>where</em> the time is going. In this post, we’ll walk through a guided journey of using Tokio’s <code class="language-plaintext highlighter-rouge">tracing</code> framework and the <code class="language-plaintext highlighter-rouge">tracing-texray</code> tool to drill into performance issues. We assume you’re familiar with the basics of <code class="language-plaintext highlighter-rouge">tokio-tracing</code> (if not, see the <a href="https://tokio.rs/tokio/topics/tracing#:~:text=In%20asynchronous%20systems%20like%20Tokio%2C,tracing">Tokio tracing introduction</a> for spans and events fundamentals). Our journey will start with a simple sequential task, then ramp up to parallel execution and illustrate how to maintain insight at each step.</p></p></article></div><div class="list__item"><article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"><h2 class="archive__item-title" itemprop="headline"> <a href="https://www.garillot.net/posts/2025/03/bcb-promises-challenges/" rel="permalink">Byzantine-Consistent Broadcast- A Promising Yet Challenging Frontier in Digital Asset Transfers </a></h2><p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 7 minute read</p><p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Published:</strong> <time datetime="2025-03-31T00:00:00-07:00">March 31, 2025</time></p><p class="archive__item-excerpt" itemprop="description"><p>Digital asset transfer systems are at a crossroads. An idea that first captured attention between 2020 and 2022—Byzantine Consistent Broadcast (BCB)—is now experiencing a revival with projects like <a href="https://arxiv.org/abs/2501.14931">Pod</a> and <a href="https://cdn.prod.website-files.com/66e2c06b9d2650e91a88b6b1/6706852b548dcdb6540a9c92_litepaper.pdf">Delta</a>. In this post, we to show that while BCB can unlock incredible performance through parallel state execution, it also introduces important challenges, especially around expressivity and the scalability of reads. The goal is to explain why this approach is both exciting and demanding.</p></p></article></div><h2 id="2017" class="archive__subtitle">2017</h2><div class="list__item"><article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"><h2 class="archive__item-title" itemprop="headline"> <a href="https://www.garillot.net/posts/2017/07/psa-mvn-nexus/" rel="permalink">PSA: maven central and sonatype are slow </a></h2><p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> less than 1 minute read</p><p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Published:</strong> <time datetime="2017-07-27T00:00:00-07:00">July 27, 2017</time></p><p class="archive__item-excerpt" itemprop="description"><p>Most of the public maven repositories for downloading java artifacts (notably maven-central, and sonatype) are slow. Besides, build tools do not have a perfect track record of resolving dependencies from these repositories in an efficient manner.</p></p></article></div><h2 id="2016" class="archive__subtitle">2016</h2><div class="list__item"><article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"><h2 class="archive__item-title" itemprop="headline"> <a href="https://www.garillot.net/posts/2016/06/june-roundup-deep-learning/" rel="permalink">A June 2016 roundup of distributed Deep Learning projects on Apache Spark </a></h2><p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 1 minute read</p><p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Published:</strong> <time datetime="2016-06-28T00:00:00-07:00">June 28, 2016</time></p><p class="archive__item-excerpt" itemprop="description"><p>Here’s a quick roundup of distributed deep learning efforts running on Apache Spark. This will only list active(-ish) projects rather than academic experiments (of which there are too many to list) There’s roughly two approaches:</p></p></article></div><div class="list__item"><article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"><h2 class="archive__item-title" itemprop="headline"> <a href="https://www.garillot.net/posts/2016/05/may-roundup-time-series/" rel="permalink">May 2016 time series storage roundup </a></h2><p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 1 minute read</p><p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Published:</strong> <time datetime="2016-05-09T00:00:00-07:00">May 09, 2016</time></p><p class="archive__item-excerpt" itemprop="description"><p>A recent slew of blogs and articles have been shedding new insight on time series storage. I thought I’d list some of the zeitgeist.</p></p></article></div><h2 id="2015" class="archive__subtitle">2015</h2><div class="list__item"><article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"><h2 class="archive__item-title" itemprop="headline"> <a href="https://www.garillot.net/posts/2015/07/another-update-streaming" rel="permalink">Another update on streaming work </a></h2><p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 2 minute read</p><p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Published:</strong> <time datetime="2015-07-15T00:00:00-07:00">July 15, 2015</time></p><p class="archive__item-excerpt" itemprop="description"><p>This is an update on my <a href="/posts/2015/07/update-streaming">previous post</a> about work by <a href="http://www.typesafe.com/">Typesafe</a> to add resiliency to <a href="https://spark.apache.org/streaming/">Spark Streaming</a>.</p></p></article></div><div class="list__item"><article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"><h2 class="archive__item-title" itemprop="headline"> <a href="https://www.garillot.net/posts/2015/07/update-streaming/" rel="permalink">A quick update on Spark Streaming work </a></h2><p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 3 minute read</p><p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Published:</strong> <time datetime="2015-07-10T00:00:00-07:00">July 10, 2015</time></p><p class="archive__item-excerpt" itemprop="description"><p>Since I was asked a few times here at <a href="http://scaladays.org/">Scala Days</a>, I thought I’d write an update on how some of our work on making Spark Streaming more resilient is going. Naturally, all of this is open-source, otherwise I wouldn’t be writing this.</p></p></article></div><h2 id="2014" class="archive__subtitle">2014</h2><div class="list__item"><article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"><h2 class="archive__item-title" itemprop="headline"> <a href="https://www.garillot.net/posts/2014/11/diving-deep-end" rel="permalink">Diving In The Deep End of The Big Data Pool: Talk Abstract </a></h2><p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 1 minute read</p><p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Published:</strong> <time datetime="2014-11-19T00:00:00-08:00">November 19, 2014</time></p><p class="archive__item-excerpt" itemprop="description"><p>This is the Abstract for my Ignite talk at the <a href="http://strataconf.com/strataeu2014/public/content/home">Strata+Hadoop Barcelona</a> conference, on Wed Nov 19th, 2014 (at <a href="http://www.ccib.es/">CCIB</a>, room 116, 5:30PM). I haven’t found any place where O’Reilly would publish that abstract, and I thought some people would want a peek at what I’d talk about.</p></p></article></div><div class="list__item"><article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"><h2 class="archive__item-title" itemprop="headline"> <a href="https://www.garillot.net/posts/2014/11/xen-imac" rel="permalink">Installing Xen on an Apple iMac </a></h2><p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 3 minute read</p><p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Published:</strong> <time datetime="2014-11-13T00:00:00-08:00">November 13, 2014</time></p><p class="archive__item-excerpt" itemprop="description"><h2 id="introduction"><strong>Introduction</strong></h2></p></article></div><div class="list__item"><article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"><h2 class="archive__item-title" itemprop="headline"> <a href="https://www.garillot.net/posts/2014/07/option-monad-transformer" rel="permalink">A question about the Option Monad Transformer </a></h2><p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 8 minute read</p><p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Published:</strong> <time datetime="2014-07-14T00:00:00-07:00">July 14, 2014</time></p><p class="archive__item-excerpt" itemprop="description"><p>I’ve recently heard the following suprisingly general question:</p></p></article></div><h2 id="2013" class="archive__subtitle">2013</h2><div class="list__item"><article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"><h2 class="archive__item-title" itemprop="headline"> <a href="https://www.garillot.net/posts/2013/10/look-ma" rel="permalink">Look, Ma, no queues! </a></h2><p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 4 minute read</p><p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Published:</strong> <time datetime="2013-10-23T00:00:00-07:00">October 23, 2013</time></p><p class="archive__item-excerpt" itemprop="description"><p>A very classic, if a bit overrated exercise, is to print a tree in width-first order. Also called level-order, it means you print your binary tree row-by-row, with the nodes of depth <code class="language-plaintext highlighter-rouge">d</code>, leftmost first, before the nodes of depth <code class="language-plaintext highlighter-rouge">d+1</code>.</p></p></article></div><div class="list__item"><article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"><h2 class="archive__item-title" itemprop="headline"> <a href="https://www.garillot.net/posts/2013/02/ramdisk-life" rel="permalink">How a Ramdisk saved my life </a></h2><p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 5 minute read</p><p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Published:</strong> <time datetime="2013-02-15T00:00:00-08:00">February 15, 2013</time></p><p class="archive__item-excerpt" itemprop="description"><p>… or how the devil finds work for idle hands.</p></p></article></div><h2 id="2012" class="archive__subtitle">2012</h2><div class="list__item"><article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"><h2 class="archive__item-title" itemprop="headline"> <a href="https://www.garillot.net/posts/2012/01/freshman-CS-in-Scala" rel="permalink">Every freshman CS question in ±80 lines of Scala </a></h2><p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 14 minute read</p><p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Published:</strong> <time datetime="2012-01-12T00:00:00-08:00">January 12, 2012</time></p><p class="archive__item-excerpt" itemprop="description"><p>This post is about writing a single program that returns the stream representing any recursive sequence of order $k$, which $i$th term <code class="language-plaintext highlighter-rouge">a[i] = f(a[i-1], a[i-2], ... a[i-k])</code>, for all $k$, <strong>in Scala</strong>. It explains things very slowly: If the meaning of the previous sentence is already 100% clear to you, you can easily skip the next 2 paragraphs.</p></p></article></div><h2 id="2011" class="archive__subtitle">2011</h2><div class="list__item"><article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"><h2 class="archive__item-title" itemprop="headline"> <a href="https://www.garillot.net/posts/2011/08/certifying-RSA-correct" rel="permalink">Certifying RSA correct for breakfast </a></h2><p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 7 minute read</p><p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Published:</strong> <time datetime="2011-08-27T00:00:00-07:00">August 27, 2011</time></p><p class="archive__item-excerpt" itemprop="description"><p>Reasoning on <em>the correctness</em> of the <a href="http://en.wikipedia.org/wiki/RSA">RSA</a> cryptosystem is much easier with a little bit of algebra: this is a perfect example of a case where the ``practical’’ applications of proof assistants can be helped with libraries dealing with abstract algebra, including <a href="http://ssr.msr-inria.inria.fr">SSReflect</a>. The proof we are going to build in the present post is based on a stock SSReflect version 1.3pl1, and is available <a href="https://github.com/huitseeker/thesis-spikes/blob/RSA/spikes/RSA.v">on github</a>. It can be compared with the <a href="http://coq.inria.fr/pylons/pylons/contribs/view/RSA/trunk">RSA contribution</a> to <a href="http://coq.inria.fr/">Coq</a>, made on the basis of the standard library (note this is not a <a href="http://en.wikipedia.org/wiki/Code_golf">code golf</a>, but rather a tentative to demonstrate that a big mathematical library helps).</p></p></article></div><div class="list__item"><article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"><h2 class="archive__item-title" itemprop="headline"> <a href="https://www.garillot.net/posts/2011/08/recursive-merge-sort-python" rel="permalink">How do you make a recursive merge sort more efficient in Python? </a></h2><p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 5 minute read</p><p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Published:</strong> <time datetime="2011-08-17T00:00:00-07:00">August 17, 2011</time></p><p class="archive__item-excerpt" itemprop="description"><p>This is re-worked from an excerpt of an answer of mine (<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup>) to an <a href="http://stackoverflow.com/questions/7063697/why-is-my-mergesort-so-slow-in-python/7064487#7064487">SO question</a> that made me discover some interesting things about Python : turns out it’s not easy to make recursion faster by doing tail call elimination, even by hand. (<sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">2</a></sup>)</p><div class="footnotes" role="doc-endnotes"><ol><li id="fn:1" role="doc-endnote"><p>Initially fraught with errors, and therefore duly ill-scored. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p></li><li id="fn:2" role="doc-endnote"><p>This has also benefited <em>a lot</em> of a discussion with Carey Underwood <a href="http://blog.garillot.net/post/9048852162/how-do-you-make-a-recursive-merge-sort-more-efficient#disqus_thread">below</a> and in <a href="http://www.reddit.com/r/Python/comments/jm2kz/tail_call_elimination_by_hand_in_python_efficient/">a reddit thread</a> on this post. Many thanks ! <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p></li></ol></div></p></article></div><div class="list__item"><article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"><h2 class="archive__item-title" itemprop="headline"> <a href="https://www.garillot.net/posts/2011/08/lightweight-profiling" rel="permalink">Ligtweight profiling for your Coq hacks </a></h2><p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 3 minute read</p><p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Published:</strong> <time datetime="2011-08-11T00:00:00-07:00">August 11, 2011</time></p><p class="archive__item-excerpt" itemprop="description"><p>Let’s suppose we want to hack a few functions in the Coq compiler. The classic situation is that we have the base implementation of our function as it stands, and an optimized version for which we want to check it <em>really</em> improves things.</p></p></article></div></div></div><div class="page__footer"><footer> <!-- start custom footer snippets --> <!-- end custom footer snippets --><div class="page__footer-follow"><ul class="social-icons"><li><strong>Follow:</strong></li><li><a href="https://twitter.com/huitseeker"><i class="fab fa-twitter-square" aria-hidden="true"></i> Twitter</a></li><li><a href="http://github.com/huitseeker"><i class="fab fa-github" aria-hidden="true"></i> GitHub</a></li><li><a href="https://www.garillot.net/feed.xml"><i class="fa fa-fw fa-rss-square" aria-hidden="true"></i> Feed</a></li></ul></div><div class="page__footer-copyright">&copy; 2026 François Garillot.</div></footer></div><script src="https://www.garillot.net/assets/js/main.min.js"></script> <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', '', 'auto'); ga('send', 'pageview'); </script></body></html>
