summaryrefslogtreecommitdiff
path: root/2023/06
diff options
context:
space:
mode:
Diffstat (limited to '2023/06')
-rw-r--r--2023/06/10/二零二三年六月十日/index.html4
-rw-r--r--2023/06/11/OCaml_News_20230611/index.html309
-rw-r--r--2023/06/17/发热及超高热危象/index.html2
3 files changed, 3 insertions, 312 deletions
diff --git a/2023/06/10/二零二三年六月十日/index.html b/2023/06/10/二零二三年六月十日/index.html
index 317f333f..4dd0ebaf 100644
--- a/2023/06/10/二零二三年六月十日/index.html
+++ b/2023/06/10/二零二三年六月十日/index.html
@@ -168,7 +168,7 @@
<div class="icon arrow-left"></div>
<div class="post-link">
- <a href="/2023/06/11/OCaml_News_20230611/">Prev</a>
+ <a href="/2023/06/17/%E5%8F%91%E7%83%AD%E5%8F%8A%E8%B6%85%E9%AB%98%E7%83%AD%E5%8D%B1%E8%B1%A1/">Prev</a>
</div>
</div>
@@ -176,7 +176,7 @@
<div class="icon arrow-right"></div>
<div class="post-link">
- <a href="/2023/05/31/OCaml_News_20230531/">Next</a>
+ <a href="/2023/04/25/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%9B%9B%E6%9C%88%E4%BA%8C%E5%8D%81%E4%BA%94%E6%97%A5/">Next</a>
</div>
</div>
diff --git a/2023/06/11/OCaml_News_20230611/index.html b/2023/06/11/OCaml_News_20230611/index.html
deleted file mode 100644
index 3fa81655..00000000
--- a/2023/06/11/OCaml_News_20230611/index.html
+++ /dev/null
@@ -1,309 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="UTF-8">
-<meta name="viewport"
- content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
-<meta http-equiv="X-UA-Compatible" content="ie=edge">
-
- <meta name="author" content="含暮秋">
-
-
- <meta name="subtitle" content="暮秋小屋">
-
-
- <meta name="description" content="不卑不亢的码农, 朴素的民谣诗人">
-
-
- <meta name="keywords" content="韩暮秋,MuqiuHan">
-
-
-
-
-<title>OCaml News 2023/6/11 | 暮秋小屋</title>
-
-
-
-
-
-<style>
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&family=Roboto+Mono&display=swap');
-</style>
-
-
-
- <!-- stylesheets list from _config.yml -->
-
- <link rel="stylesheet" href="/css/style.css">
-
-
-
-
-
- <!-- scripts list from _config.yml -->
-
- <script src="/js/frame.js"></script>
-
-
-
-
-
- <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
- <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
-
-
-
-
-
-
-
- <!-- hexo injector head_end start -->
-<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.css">
-
-<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/style.css">
-<!-- hexo injector head_end end --><meta name="generator" content="Hexo 6.3.0"></head>
- <body>
- <div class="mask-border">
- </div>
-
- <div class="wrapper">
-
- <div class="header">
- <div class="flex-container">
- <div class="header-inner">
- <div class="site-brand-container">
- <a href="/">
-
- 暮秋小屋
-
- </a>
- </div>
- <div id="menu-btn" class="menu-btn" onclick="toggleMenu()">
- Menu
- </div>
- <nav class="site-nav">
- <ul class="menu-list">
-
-
- <li class="menu-item">
- <a href="/">主页</a>
- </li>
-
-
-
- <li class="menu-item">
- <a href="/tags/Technique/">技术</a>
- </li>
-
-
-
- <li class="menu-item">
- <a href="/Projects">项目</a>
- </li>
-
-
-
- <li class="menu-item">
- <a href="/categories/gallery/">日记本</a>
- </li>
-
-
-
- <li class="menu-item">
- <a href="/about">关于</a>
- </li>
-
-
-
- </ul>
- </nav>
- </div>
- </div>
-</div>
-
-
- <div class="main">
- <div class="flex-container">
- <article id="post">
-
-
- <div class="post-head">
- <div class="post-info">
- <div class="tag-list">
-
-
- <span class="post-tag">
- <a href="/tags/OCaml/">
- OCaml
- </a>
- </span>
-
- <span class="post-tag">
- <a href="/tags/Technique/">
- Technique
- </a>
- </span>
-
-
- </div>
- <div class="post-title">
-
-
- OCaml News 2023/6/11
-
-
- </div>
- <span class="post-date">
- Jun 11, 2023
- </span>
- </div>
- <div class="post-img">
-
- <div class="h-line-primary"></div>
-
- </div>
-</div>
- <div class="post-content">
- <h1 id="二〇二三年五月三十一日-二〇二三年六月十一日"><a href="#二〇二三年五月三十一日-二〇二三年六月十一日" class="headerlink" title="二〇二三年五月三十一日 - 二〇二三年六月十一日"></a>二〇二三年五月三十一日 - 二〇二三年六月十一日</h1><h2 id="Lambda演算中的可计算性极限"><a href="#Lambda演算中的可计算性极限" class="headerlink" title="Lambda演算中的可计算性极限"></a>Lambda演算中的可计算性极限</h2><p>OCaml 的用户可能有兴趣阅读有关 lambda 演算的理论论文。</p>
-<p>“ <a target="_blank" rel="noopener" href="https://hbr.github.io/Lambda-Calculus/computability/text.html">Limits of Computability in Lambda Calculus</a>“ 这篇论文介绍了在lambda演算中有一些函数是不可计算的。</p>
-<p>详细讨论可以看<a target="_blank" rel="noopener" href="https://discuss.ocaml.org/t/limits-of-computability-in-lambda-calculus/12295">论坛原帖</a></p>
-<h2 id="OCaml-5-1-0-alpha2"><a href="#OCaml-5-1-0-alpha2" class="headerlink" title="OCaml 5.1.0~alpha2"></a>OCaml 5.1.0~alpha2</h2><p>随着 OCaml 5.1.0 持续稳定的工作进展,OCaml 5.1.0 的第二个 alpha 版本发布了, 这个版本修复了GC和Windows ABI的问题。<br>除此之外,类型系统兼容性得到增强,恢复支持 s390x&#x2F;IBM Z</p>
-<p>详细的更新可以查看 <a target="_blank" rel="noopener" href="https://discuss.ocaml.org/t/second-alpha-release-of-ocaml-5-1-0/12299">论坛原帖</a></p>
-<h2 id="OCaml中能否实现-constraint-不等"><a href="#OCaml中能否实现-constraint-不等" class="headerlink" title="OCaml中能否实现 constraint 不等"></a>OCaml中能否实现 constraint 不等</h2><p>OCaml提供了对类型定义添加约束的方法, 即<code>constraint</code>:</p>
-<figure class="highlight ocaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">module</span> <span class="type">A</span> = <span class="keyword">struct</span> <span class="keyword">type</span> t = <span class="built_in">int</span> <span class="keyword">end</span></span><br><span class="line"><span class="keyword">module</span> <span class="type">B</span> = <span class="keyword">struct</span> <span class="keyword">type</span> t = <span class="built_in">float</span> <span class="keyword">end</span></span><br><span class="line"></span><br><span class="line"><span class="comment">(** Error: This type constructor expands to type t but is used here with type float *)</span></span><br><span class="line"><span class="keyword">type</span> t = <span class="type">A</span>.t <span class="keyword">constraint</span> t = <span class="type">B</span>.t</span><br></pre></td></tr></table></figure>
-
-<p>能否实现判断两个类型是不兼容的呢? 比如: <code>type t = A.t constraint t &lt;&gt; B.t</code>。</p>
-<p>类型相关的理论在学了在学了呜呜,目前来看这不是个好的做法…,详细可以看<a target="_blank" rel="noopener" href="https://discuss.ocaml.org/t/type-inequality-constraints/12364#main-container">论坛原帖</a></p>
-<h2 id="在OCaml5的并行程序中使用全局哈希表是否安全?"><a href="#在OCaml5的并行程序中使用全局哈希表是否安全?" class="headerlink" title="在OCaml5的并行程序中使用全局哈希表是否安全?"></a>在OCaml5的并行程序中使用全局哈希表是否安全?</h2><p>这里指的应该是 <code>Stdlib.Hashtbl</code>。</p>
-<p>只能安全一点点,因为对哈希表访问没有同步,所以只是内存安全而不是线程安全。<br>文档指出,对哈希表的不同步访问是程序员的锅,要么使用锁保护表,要么用并发哈希表的不同实现。<br>在表没有涉及大小调整操作的情况下,共享哈希表是安全的。在调整大小的情况下,添加&#x2F;删除可能会与任何其他操作产生冲突。</p>
-<p><a target="_blank" rel="noopener" href="https://discuss.ocaml.org/t/is-it-safe-to-use-a-global-hash-table-in-an-ocaml-5-parallel-program/11144/1">查看论坛原帖</a></p>
-<h2 id="谈谈你心目中理想ML的样子吧!"><a href="#谈谈你心目中理想ML的样子吧!" class="headerlink" title="谈谈你心目中理想ML的样子吧!"></a>谈谈你心目中理想ML的样子吧!</h2><ul>
-<li>Haskell的类型系统和简洁 </li>
-<li>OCaml的模块系统和对象系统</li>
-<li>Rust的low level内存控制和借用以及并发检查</li>
-<li>Lisp的宏系统和REPL</li>
-<li>JetBrains相关IDE支持</li>
-<li>和x86_64汇编一样的编译速度</li>
-</ul>
-<p>有种许愿的美,🙏</p>
-<p><a target="_blank" rel="noopener" href="https://discuss.ocaml.org/t/whats-your-laundry-list-of-features-for-an-ideal-ml/10217/5">查看论坛上其他愿望</a></p>
-<h2 id="OOP-Visitors在Polymorphic情况下的类型错误"><a href="#OOP-Visitors在Polymorphic情况下的类型错误" class="headerlink" title="OOP Visitors在Polymorphic情况下的类型错误"></a>OOP Visitors在Polymorphic情况下的类型错误</h2><p>像Java里面:</p>
-<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> <span class="title class_">Tree</span> &#123;</span><br><span class="line"> <span class="keyword">public</span> &lt;B&gt; B <span class="title function_">accept</span><span class="params">(TreeVisitor&lt;B&gt; v)</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">interface</span> <span class="title class_">TreeVisitor</span>&lt;B&gt; &#123;</span><br><span class="line"> <span class="keyword">public</span> B <span class="title function_">visitLeaf</span><span class="params">(Leaf t)</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Leaf</span> <span class="keyword">implements</span> <span class="title class_">Tree</span> &#123;</span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">final</span> <span class="type">int</span> value;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">public</span> <span class="title function_">Leaf</span><span class="params">(<span class="type">int</span> value)</span> &#123;</span><br><span class="line"> <span class="built_in">this</span>.value = value;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">public</span> &lt;B&gt; B <span class="title function_">accept</span><span class="params">(TreeVisitor&lt;B&gt; v)</span> &#123;</span><br><span class="line"> <span class="keyword">return</span> v.visitLeaf(<span class="built_in">this</span>);</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
-
-<p>要是直接翻译成OCaml:</p>
-<figure class="highlight ocaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="keyword">virtual</span> tree =</span><br><span class="line"> <span class="keyword">object</span></span><br><span class="line"> <span class="keyword">method</span> <span class="keyword">virtual</span> accept : <span class="symbol">&#x27;a</span> . <span class="symbol">&#x27;a</span> tree_visitor -&gt; <span class="symbol">&#x27;a</span></span><br><span class="line"> <span class="keyword">end</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">and</span> <span class="keyword">virtual</span> [<span class="symbol">&#x27;a</span>] tree_visitor =</span><br><span class="line"> <span class="keyword">object</span></span><br><span class="line"> <span class="keyword">method</span> <span class="keyword">virtual</span> visit_leaf : (leaf -&gt; <span class="symbol">&#x27;a</span>)</span><br><span class="line"> <span class="keyword">end</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">and</span> leaf (i : <span class="built_in">int</span>) =</span><br><span class="line"> <span class="keyword">object</span> (self)</span><br><span class="line"> <span class="keyword">method</span> get = i</span><br><span class="line"></span><br><span class="line"> <span class="keyword">method</span> accept (v : <span class="symbol">&#x27;a</span> tree_visitor) : <span class="symbol">&#x27;a</span> =</span><br><span class="line"> v#visit_leaf (self :&gt; leaf)</span><br><span class="line"> <span class="keyword">end</span></span><br></pre></td></tr></table></figure>
-
-<p>是会报错滴:</p>
-<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">File &quot;visitor.ml&quot;, line 3, characters 28-54:</span><br><span class="line">3 | method virtual accept : &#x27;a . &#x27;a tree_visitor -&gt; &#x27;a</span><br><span class="line"> ^^^^^^^^^^^^^^^^^^^^^^^^^^</span><br><span class="line">Error: The universal type variable &#x27;a cannot be generalized:</span><br><span class="line"> it escapes its scope.</span><br></pre></td></tr></table></figure>
-
-<p>OCaml的类在定义时是单态的,比如:</p>
-<figure class="highlight ocaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> [<span class="symbol">&#x27;a</span>] c (x:<span class="symbol">&#x27;a</span>) = </span><br><span class="line"> <span class="keyword">object</span></span><br><span class="line"> <span class="keyword">method</span> x = x</span><br><span class="line"> <span class="keyword">end</span></span><br><span class="line"><span class="keyword">and</span> d = </span><br><span class="line"> <span class="keyword">object</span></span><br><span class="line"> <span class="keyword">method</span> strange = (<span class="keyword">new</span> c <span class="number">0</span>)#x</span><br><span class="line"> <span class="keyword">end</span></span><br></pre></td></tr></table></figure>
-
-<p>这里<code>c</code>是:</p>
-<figure class="highlight ocaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> [<span class="symbol">&#x27;a</span>] c : <span class="symbol">&#x27;a</span> -&gt; <span class="keyword">object</span> <span class="keyword">constraint</span> <span class="symbol">&#x27;a</span> = <span class="built_in">int</span> <span class="keyword">method</span> x : <span class="symbol">&#x27;a</span> <span class="keyword">end</span></span><br></pre></td></tr></table></figure>
-<p>因为在d里面 <code>new c 0</code> 定义了一个 <code>int c</code> 的对象。</p>
-<p>所以正确的写法应该是:</p>
-<figure class="highlight ocaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="keyword">virtual</span> [<span class="symbol">&#x27;a</span>, <span class="symbol">&#x27;leaf</span>, <span class="symbol">&#x27;node</span>, <span class="symbol">&#x27;empty</span>] open_tree_visitor = </span><br><span class="line"> <span class="keyword">object</span></span><br><span class="line"> <span class="keyword">method</span> <span class="keyword">virtual</span> visit_leaf : <span class="symbol">&#x27;leaf</span> -&gt; <span class="symbol">&#x27;a</span></span><br><span class="line"> <span class="keyword">method</span> <span class="keyword">virtual</span> visit_node : <span class="symbol">&#x27;node</span> -&gt; <span class="symbol">&#x27;a</span></span><br><span class="line"> <span class="keyword">method</span> <span class="keyword">virtual</span> visit_empty : <span class="symbol">&#x27;empty</span> -&gt; <span class="symbol">&#x27;a</span></span><br><span class="line"> <span class="keyword">end</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="keyword">virtual</span> tree = </span><br><span class="line"> <span class="keyword">object</span></span><br><span class="line"> <span class="keyword">method</span> <span class="keyword">virtual</span> accept : <span class="symbol">&#x27;a</span> .</span><br><span class="line"> (<span class="symbol">&#x27;a</span>, <span class="symbol">&#x27;leaf</span>, <span class="symbol">&#x27;node</span>, <span class="symbol">&#x27;empty</span>) open_tree_visitor -&gt; <span class="symbol">&#x27;a</span></span><br><span class="line"> <span class="keyword">end</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">and</span> leaf (i : <span class="built_in">int</span>) = </span><br><span class="line"> <span class="keyword">object</span> (self:<span class="symbol">&#x27;self</span>)</span><br><span class="line"> <span class="keyword">inherit</span> tree</span><br><span class="line"> <span class="keyword">method</span> get = i</span><br><span class="line"> <span class="keyword">method</span> accept v = v#visit_leaf (self :&gt; leaf)</span><br><span class="line"> <span class="keyword">end</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">and</span> node (x : tree) (y: tree) = </span><br><span class="line"> <span class="keyword">object</span> (self:<span class="symbol">&#x27;self</span>)</span><br><span class="line"> <span class="keyword">inherit</span> tree</span><br><span class="line"> <span class="keyword">method</span> left = x</span><br><span class="line"> <span class="keyword">method</span> right = y</span><br><span class="line"> <span class="keyword">method</span> accept v = v#visit_node (self :&gt; node)</span><br><span class="line"> <span class="keyword">end</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">and</span> empty = </span><br><span class="line"> <span class="keyword">object</span> (self:<span class="symbol">&#x27;self</span>)</span><br><span class="line"> <span class="keyword">inherit</span> tree</span><br><span class="line"> <span class="keyword">method</span> accept v = v#visit_empty (self :&gt; empty)</span><br><span class="line"> <span class="keyword">end</span></span><br></pre></td></tr></table></figure>
-
-<p><a target="_blank" rel="noopener" href="https://discuss.ocaml.org/t/type-errors-in-polymorphic-oop-visitors/12357">查看论坛原帖</a></p>
-<h2 id="进一步约束模块的接口"><a href="#进一步约束模块的接口" class="headerlink" title="进一步约束模块的接口"></a>进一步约束模块的接口</h2><blockquote>
-<p>基于dune,有一个模块<code>A.ml</code>它的接口是<code>A.mli</code>,但是当它在主模块中时,我想使用进一步约束过的的接口<code>A_sub.mli</code>,因为只有<code>A_Sub</code>的功能对用户有用。</p>
-</blockquote>
-<p>其实在library下面声明一个和library同名的 <code>xxx.ml</code>,在里面写 <code>module A = struct include A end</code> 就可以啦,很常见的做法。</p>
-<p>详细讨论可以<a target="_blank" rel="noopener" href="https://discuss.ocaml.org/t/export-wrapped-modules-with-a-restricted-interface/12361">查看论坛原帖</a></p>
-<h2 id="OCaml环不环保?"><a href="#OCaml环不环保?" class="headerlink" title="OCaml环不环保?"></a>OCaml环不环保?</h2><p><a target="_blank" rel="noopener" href="https://infra.ocaml.org/2023/05/30/emissions-monitoring.html">这篇文章</a>说道,对于在 ocaml.org 集群中监测的19台机器,<br>每周大约产生70公斤的二氧化碳当量, </p>
-<p>自 ocaml.org 重新设计以来, 社区一直致力于对环境影响负责。第一步是通过计算使用的能源总量来准确量化影响,为了确定未来所做的任何改善是否能减少二氧化碳排放量。</p>
-<p>为此,开发了一个用于获取各种碳强度API的HTTP客户端: <a target="_blank" rel="noopener" href="https://github.com/geocaml/carbon-intensity">carbon-intensity</a></p>
-<p>英国特定地区API的非常简单,使用只需要用户提供Eio的网络功能:</p>
-<figure class="highlight ocaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"># <span class="type">Eio_main</span>.run @@ <span class="keyword">fun</span> env -&gt;</span><br><span class="line"> <span class="type">Mirage_crypto_rng_eio</span>.run (<span class="keyword">module</span> <span class="type">Mirage_crypto_rng</span>.<span class="type">Fortuna</span>) env @@ <span class="keyword">fun</span> _ -&gt;</span><br><span class="line"> <span class="type">Carbon</span>.<span class="type">Gb</span>.get_intensity env#net</span><br><span class="line"> |&gt; <span class="type">Eio</span>.traceln <span class="string">&quot;%a&quot;</span> <span class="type">Carbon</span>.<span class="type">Gb</span>.<span class="type">Intensity</span>.pp;;</span><br><span class="line">+period: <span class="number">2022</span>-<span class="number">08</span>-<span class="number">28</span>T17:<span class="number">30</span>Z - <span class="number">2022</span>-<span class="number">08</span>-<span class="number">28</span>T18:<span class="number">00</span>Z</span><br><span class="line">+forecast: <span class="number">255</span> gCO2/kWh</span><br><span class="line">+actual: <span class="type">None</span></span><br><span class="line">+index: high</span><br><span class="line">+</span><br><span class="line">- : <span class="built_in">unit</span> = <span class="literal">()</span></span><br></pre></td></tr></table></figure>
-
-<p>某些API需要更多配置,例如法国的需要token:</p>
-<figure class="highlight ocaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"># <span class="type">Eio_main</span>.run @@ <span class="keyword">fun</span> env -&gt;</span><br><span class="line"> <span class="type">Mirage_crypto_rng_eio</span>.run (<span class="keyword">module</span> <span class="type">Mirage_crypto_rng</span>.<span class="type">Fortuna</span>) env @@ <span class="keyword">fun</span> _ -&gt;</span><br><span class="line"> <span class="keyword">let</span> token = <span class="type">Eio</span>.<span class="type">Path</span>.(load (env#fs / <span class="string">&quot;.co2-token&quot;</span>)) <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> t = <span class="type">Carbon</span>.<span class="type">Co2_signal</span>.v token <span class="keyword">in</span></span><br><span class="line"> <span class="type">Carbon</span>.<span class="type">Co2_signal</span>.get_intensity ~net:env#net ~country_code:<span class="type">`FR</span> t</span><br><span class="line"> |&gt; <span class="type">Eio</span>.traceln <span class="string">&quot;%a&quot;</span> <span class="type">Carbon</span>.<span class="type">Co2_signal</span>.<span class="type">Intensity</span>.pp;;</span><br><span class="line">+country: <span class="type">FR</span></span><br><span class="line">+datetime: <span class="number">2022</span>-<span class="number">08</span>-<span class="number">29</span>T11:<span class="number">00</span>:<span class="number">00.000</span>Z</span><br><span class="line">+intensity: <span class="number">99</span> gCO2/kWh</span><br><span class="line">+fossil fuel percentage: <span class="number">15.230000</span></span><br><span class="line">- : <span class="built_in">unit</span> = <span class="literal">()</span></span><br></pre></td></tr></table></figure>
-
-<p>更详细的可以看<a target="_blank" rel="noopener" href="https://discuss.ocaml.org/t/initial-emissions-monitoring-of-the-ocaml-org-infrastructure/12335">论坛原帖</a>, 以及论坛上<a target="_blank" rel="noopener" href="https://discuss.ocaml.org/t/ocaml-carbon-footprint/8580">关于carbon-intensity的帖子</a></p>
-<h2 id="float-of-int的细节"><a href="#float-of-int的细节" class="headerlink" title="float_of_int的细节"></a>float_of_int的细节</h2><p>试图弄清楚 <code>float_of_int</code> 在amd64和arm64上的行为, 生成的 Cmm 大概是<br><code>box_float (Cop(Cfloatofint (untag_int myfloat)))</code></p>
-<p>在 amd64 上,它被转换为序列:</p>
-<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">(** untag_int *)</span><br><span class="line">sarq $1, %rax</span><br><span class="line">cvtsi2sdq %rax, %xmm0</span><br></pre></td></tr></table></figure>
-
-<p>而在arm64上使用scvtf实现。</p>
-<p><a target="_blank" rel="noopener" href="https://discuss.ocaml.org/t/how-is-cfloatofint-translated/12342">论坛原帖</a></p>
-<h2 id="Debugging-Native-Code-in-OCaml!"><a href="#Debugging-Native-Code-in-OCaml!" class="headerlink" title="Debugging Native Code in OCaml!"></a>Debugging Native Code in OCaml!</h2><p><a target="_blank" rel="noopener" href="https://www.youtube.com/watch?v=OV19_FqAUCw">本视频</a>适用于:</p>
-<ul>
-<li>非 OCaml 开发人员对 OCaml 的工作原理感到好奇</li>
-<li>中级 OCaml 开发人员</li>
-</ul>
-<p>更多讨论可以看<a target="_blank" rel="noopener" href="https://discuss.ocaml.org/t/ann-debugging-native-code-in-second-ocaml-youtube-video/12315">论坛原帖</a></p>
-<h2 id="Outreachy-Summer-2023"><a href="#Outreachy-Summer-2023" class="headerlink" title="Outreachy Summer 2023"></a>Outreachy Summer 2023</h2><p>Outreachy是一项带薪远程实习计划,目的是促进开源和开放科学的多样性。Outreachy的实习是为那些在本国()技术行业面临代表性不足、歧视或系统性偏见的人提供的。</p>
-<p>关于今年Outreachy的信息可以看这个帖子: <a target="_blank" rel="noopener" href="https://discuss.ocaml.org/t/outreachy-summer-2023/11159/2">Outreachy Summer 2023</a><br>如果想加入,可以看: <a target="_blank" rel="noopener" href="https://discuss.ocaml.org/t/become-an-outreachy-mentor-support-the-growth-and-diversity-of-the-ocaml-community/8213">Become an Outreachy Mentor: support the growth and diversity of the OCaml community</a></p>
-<h2 id="一些生态"><a href="#一些生态" class="headerlink" title="一些生态"></a>一些生态</h2><ul>
-<li><a target="_blank" rel="noopener" href="https://github.com/c-cube/ocaml-minisat/">OCaml-Minisat github repo</a> minisat是一个小巧快速的SAT Solver, 这是其OCaml Bining</li>
-<li><a target="_blank" rel="noopener" href="https://github.com/ocaml/MPP-language-blender">MPP</a> 兼容OCaml5咯, mpp就是meta preprocesser</li>
-<li><a target="_blank" rel="noopener" href="https://github.com/mjambon/caml2html">caml2html</a>可以将OCaml源码文件转换成带高亮的HTML</li>
-<li><a target="_blank" rel="noopener" href="https://github.com/c-cube/ocaml-containers/releases/tag/v3.12">containers</a> 3.12发布了</li>
-<li><a target="_blank" rel="noopener" href="https://github.com/ocaml-multicore/multicoretests">multicoretests</a>是用于测试Multicore OCaml 的 PBT 测试套件和库</li>
-</ul>
-
-</div>
-
-<script>
- window.onload = detectors();
-</script>
- <div class="post-footer">
- <div class="h-line-primary"></div>
- <nav class="post-nav">
- <div class="prev-item">
-
- <div class="icon arrow-left"></div>
- <div class="post-link">
- <a href="/2023/06/17/%E5%8F%91%E7%83%AD%E5%8F%8A%E8%B6%85%E9%AB%98%E7%83%AD%E5%8D%B1%E8%B1%A1/">Prev</a>
- </div>
-
- </div>
- <div class="next-item">
-
- <div class="icon arrow-right"></div>
- <div class="post-link">
- <a href="/2023/06/10/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%85%AD%E6%9C%88%E5%8D%81%E6%97%A5/">Next</a>
- </div>
-
- </div>
- </nav>
-</div>
-
-
- <div class="post-comment">
-
-
-
-
-
-
-
-</div>
-
-
-</article>
- </div>
- </div>
-
- <div class="footer">
- <div class="flex-container">
- <div class="footer-text">
-
-
- |
-
-
- 希望路过的人可以添点柴火让这里暖和点
-
- </div>
- </div>
-</div>
-
- </div>
-
-
-
-
- </body>
-</html>
diff --git a/2023/06/17/发热及超高热危象/index.html b/2023/06/17/发热及超高热危象/index.html
index 2935f4ab..0f7ee0fa 100644
--- a/2023/06/17/发热及超高热危象/index.html
+++ b/2023/06/17/发热及超高热危象/index.html
@@ -299,7 +299,7 @@
<div class="icon arrow-right"></div>
<div class="post-link">
- <a href="/2023/06/11/OCaml_News_20230611/">Next</a>
+ <a href="/2023/06/10/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%85%AD%E6%9C%88%E5%8D%81%E6%97%A5/">Next</a>
</div>
</div>