小编Joh*_*lén的帖子

`fun`和`function`关键字有什么区别?

有时我会看到类似的代码

let (alt : recognizer -> recognizer -> recognizer) =
  fun a b p -> union  (a p) (b p)
Run Code Online (Sandbox Code Playgroud)

或者像:

let hd = function
    Cons(x,xf) -> x
  | Nil -> raise Empty
Run Code Online (Sandbox Code Playgroud)

fun和之间有什么区别function

f# ocaml

36
推荐指数
3
解决办法
2万
查看次数

是否有System.Diagnostics.Debug类的TextWriter接口?

我经常对System.Diagnostics.Debug.Write/WriteLine方法感到沮丧.我想使用TextWriter类中熟悉的Write/WriteLine方法,所以我经常写

Debug.WriteLine("# entries {0} for connection {1}", countOfEntries, connection);
Run Code Online (Sandbox Code Playgroud)

这会导致编译器错误.我最终写作了

Debug.WriteLine(string.Format("# entries {0} for connection {1}", 
    countOfEntries, connection));
Run Code Online (Sandbox Code Playgroud)

这真的很尴尬.

CLR是否有一个派生自TextWriter的类"包装"System.Debug,还是应该自己滚动?

.net c#

29
推荐指数
3
解决办法
6586
查看次数

ia32/ia64上的ADC和ADCX指令有什么区别?

当我遇到ADCX以前不知道的指令时,我正在浏览英特尔软件开发人员手册; 它的编码是66 0F 38 F6.它似乎几乎与ADC指令相同,所以为什么你会在以下时间使用ADCX:

  • 它仅在现代CPU中受支持
  • 指令编码占用更多空间(4个字节对1个ADC)

是否有其他副作用或特殊情况ADCX证明有利于ADC?必须有一些很好的理由将其添加到指令库中.

x86 assembly

15
推荐指数
2
解决办法
2174
查看次数

当经典MacOS进入程序时68000堆栈上有什么?

我试图了解旧的经典Mac应用程序的切入点.我已经反汇编了第一个CODE资源(不是CODE#0,它是跳转表).代码引用堆栈外的一些变量:0004(A7)处的一个字,一个从000C开始的长字数组(A7),其长度是0004(A7)处的值,以及超出该数组的最后一个长字似乎是一个指向字符串的指针.

长字的数组看起来像字符串乍一看,所以它看起来像我们处理(int argc,char**argv)情况,除了"argv"数组在堆栈框架中内联.

当程序首次被Mac OS调用时,程序应该在其堆栈/寄存器上期待什么?

macos assembly 68000 calling-convention

13
推荐指数
2
解决办法
563
查看次数

如何在CLR和JVM中实现Object.GetHashCode()?

我一直在思考这个问题:如何Object.GetHashCode在CLR或Java中实现?此方法的合同是,如果在同一对象实例上调用它,它应始终返回相同的值.

请注意,我在谈论GetHashCode()的默认实现.派生类不需要覆盖此方法.如果他们选择不这样做,它们本质上将具有引用语义:在哈希表和c中使用时,默认情况下等于"指针相等".这意味着,不知何故,运行时必须在整个生命周期内为对象提供一个常量哈希码.

如果我正在运行的机器是32位,并且如果对象实例从未在内存中移动,理论上可以返回对象的地址,重新解释为Int32.这样会很好,因为所有不同的对象都有不同的地址,因此会有不同的哈希码.

然而,这种方法存在缺陷,其中包括:

  • 如果垃圾收集器将对象移动到内存中,则其地址会发生变化,因此违反协议的哈希码也会导致哈希码在对象的生命周期内应该是相同的.

  • 在64位系统上,对象的地址太宽,无法容纳Int32.

  • 由于托管对象倾向于与2的某个偶数幂对齐,因此最下面的位始终为零.当哈希码用于索引到哈希表时,这可能导致错误的分发模式.

在.NET中,System.Object由一个同步块和一个类型句柄组成,所以哈希码不能在实例本身中缓存.不知何故,运行时能够提供持久的哈希码.怎么样?Java,Mono和其他运行时如何做到这一点?

clr mono jvm low-level

12
推荐指数
1
解决办法
933
查看次数

当Python yield语句没有表达式时会发生什么?

我是一名C#程序员,试图理解一些Python代码.有问题的代码是生成器函数,如下所示:

def func():
    oldValue = curValue
    yield
    curValue = oldValue
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,这将生成一个包含一个成员的可迭代序列.但是,yield声明后没有表达.什么是这种无表达式的陈述应该产生什么?有没有使用这种编码方式的Python习语?

python yield generator

8
推荐指数
1
解决办法
432
查看次数

PowerPC指令`bcctr`的目的是什么?

我是PowerPC架构的新手,我正在看一些带有bcctr指令的反汇编代码.尽管手册指定了bcctr指令的工作原理,但它并没有解释它通常用于什么.你能想出这些用途的例子,并详细说明ctr寄存器的用途吗?我最好的猜测是它用于间接分支(例如,实现对函数指针或vtable的调用),但"减少ctr寄存器然后分支到ctr"的目的对我来说根本不清楚.寄存器作为计数器和目标地址的双重用途尤其令人困惑.

assembly powerpc

7
推荐指数
1
解决办法
2921
查看次数

您是如何调整单元测试以应对不断变化的需求的?

我有一个项目,我一直在使用TDD和单元测试作为"软件vises".本质上,我将需求转换为测试,以验证代码是否符合要求.我很少需要返回并编辑单元测试,而不是重点:只应修改"真实"代码.目前,有900个单元测试.

现在黄金所有者已经改变了一些要求.由于前者的要求在现有的单元测试中是如此彻底的编码,似乎改变它们以符合新的要求将会引起灾难.您如何调整单元测试套件来处理这种变化?

unit-testing

6
推荐指数
2
解决办法
515
查看次数

使用.htaccess文件创建用户友好的URL

我在同一个目录中的两个PHP文件posts.phppostdetails.php.该posts.php页面列出了所有帖子,并postdetails.phppostid设置时显示帖子:postdetails.php?id=3

我想在没有的情况下使postspostdetails页面可访问,.php并且还添加一个尾随正斜杠,如:

代替 www.domain.com/posts.php

我有:

www.domain.com/posts/

我用过这个:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
Run Code Online (Sandbox Code Playgroud)

现在我可以posts.php按照我想要的方式访问,如:www.domain.com/posts/

但现在所有帖子都显示链接为 www.domain.com/posts/postdetails.php?id=NUMBER

问题是我希望他们也喜欢他们在posts子目录中,但我似乎无法使其工作.

我也想改变id,以slug

所以,我有类似的东西,postdetails.php?slug=this-is-a-post并将它改编为www.domain.com/posts/this-is-a-post/

我正在使用此功能来创建我的slu ..

function createSlug($str)
{
    if($str !== mb_convert_encoding( mb_convert_encoding($str, 'UTF-32', 'UTF-8'), 'UTF-8', 'UTF-32') )
        $str …
Run Code Online (Sandbox Code Playgroud)

php .htaccess url-rewriting

6
推荐指数
1
解决办法
4942
查看次数

字节序列0x40 0x55应该如何被x86-64仿真器解释?

我正在使用模拟器,我遇到的其中一个二进制可执行文件在过程开始时具有以下顺序

40 55
Run Code Online (Sandbox Code Playgroud)

40是REX前缀,但实际上没有设置任何REX位.英特尔软件开发人员手册的第2.2.1.7节规定,隐式引用堆栈指针的指令将具有64位宽度.由于55push ?bp指令,似乎简单55就足以生成一个push rbp.那么为什么40前缀呢?

assembly x86-64

6
推荐指数
1
解决办法
663
查看次数