记录一些 golang,和对应 rust 中不好(性能)的写法,持续更新中。


true or false

1
2
3
4
5
6
7
8
// bad case: S1008
func SomethingIsTrue(some string) bool {
	if some == "" {
		return false
	}

	return true
}
1
2
3
func good(some string) bool {
	return some != ""
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
"".BadCase STEXT nosplit size=76 args=0x10 locals=0x10 funcid=0x0
	0x0000 00000 (main.go:6)	TEXT	"".BadCase(SB), NOSPLIT|ABIInternal, $16-16
	0x0000 00000 (main.go:6)	SUBQ	$16, SP
	0x0004 00004 (main.go:6)	MOVQ	BP, 8(SP)
	0x0009 00009 (main.go:6)	LEAQ	8(SP), BP
	0x000e 00014 (main.go:6)	FUNCDATA	$0, gclocals·1a65e721a2ccc325b382662e7ffee780(SB)
	0x000e 00014 (main.go:6)	FUNCDATA	$1, gclocals·69c1753bd5f81501d95132d08af04464(SB)
	0x000e 00014 (main.go:6)	FUNCDATA	$5, "".BadCase.arginfo1(SB)
	0x000e 00014 (main.go:6)	MOVQ	AX, "".returnPrivateZoneId+24(SP)
	0x0013 00019 (main.go:6)	MOVQ	BX, "".returnPrivateZoneId+32(SP)
	0x0018 00024 (main.go:6)	MOVB	$0, "".~r1+7(SP)
	0x001d 00029 (main.go:7)	CMPQ	"".returnPrivateZoneId+32(SP), $0
	0x0023 00035 (main.go:7)	JEQ	39
	0x0025 00037 (main.go:7)	JMP	56
	0x0027 00039 (main.go:8)	MOVB	$0, "".~r1+7(SP)
	0x002c 00044 (main.go:8)	XORL	AX, AX
	0x002e 00046 (main.go:8)	MOVQ	8(SP), BP
	0x0033 00051 (main.go:8)	ADDQ	$16, SP
	0x0037 00055 (main.go:8)	RET
	0x0038 00056 (main.go:10)	MOVB	$1, "".~r1+7(SP)
	0x003d 00061 (main.go:10)	MOVL	$1, AX
	0x0042 00066 (main.go:10)	MOVQ	8(SP), BP
	0x0047 00071 (main.go:10)	ADDQ	$16, SP
	0x004b 00075 (main.go:10)	RET
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
"".Good STEXT nosplit size=52 args=0x10 locals=0x10 funcid=0x0
	0x0000 00000 (main.go:13)	TEXT	"".Good(SB), NOSPLIT|ABIInternal, $16-16
	0x0000 00000 (main.go:13)	SUBQ	$16, SP
	0x0004 00004 (main.go:13)	MOVQ	BP, 8(SP)
	0x0009 00009 (main.go:13)	LEAQ	8(SP), BP
	0x000e 00014 (main.go:13)	FUNCDATA	$0, gclocals·1a65e721a2ccc325b382662e7ffee780(SB)
	0x000e 00014 (main.go:13)	FUNCDATA	$1, gclocals·69c1753bd5f81501d95132d08af04464(SB)
	0x000e 00014 (main.go:13)	FUNCDATA	$5, "".Good.arginfo1(SB)
	0x000e 00014 (main.go:13)	MOVQ	AX, "".returnPrivateZoneId+24(SP)
	0x0013 00019 (main.go:13)	MOVQ	BX, "".returnPrivateZoneId+32(SP)
	0x0018 00024 (main.go:13)	MOVB	$0, "".~r1+7(SP)
	0x001d 00029 (main.go:14)	CMPQ	"".returnPrivateZoneId+32(SP), $0
	0x0023 00035 (main.go:14)	SETNE	AL
	0x0026 00038 (main.go:14)	MOVB	AL, "".~r1+7(SP)
	0x002a 00042 (main.go:14)	MOVQ	8(SP), BP
	0x002f 00047 (main.go:14)	ADDQ	$16, SP
	0x0033 00051 (main.go:14)	RET
1
2
3
4
5
6
fn bad_case(some: String) -> bool {
    if some != "" {
        return false;
    }
    return true;
}
1
2
3
fn good(some: String) -> bool {
    return some != "";
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
00000001000034a0 <__ZN7badcase8bad_case17h935baceb22cd8f50E>:
1000034a0: 55                          	pushq	%rbp
1000034a1: 48 89 e5                    	movq	%rsp, %rbp
1000034a4: 48 83 ec 20                 	subq	$32, %rsp
1000034a8: 48 89 7d e0                 	movq	%rdi, -32(%rbp)
1000034ac: 48 8d 35 d5 cb 03 00        	leaq	248789(%rip), %rsi  # 100040088 <dyld_stub_binder+0x100040088>
1000034b3: e8 88 0a 00 00              	callq	0x100003f40 <__ZN77_$LT$alloc..string..String$u20$as$u20$core..cmp..PartialEq$LT$$RF$str$GT$$GT$2ne17hb7c84616573dd96bE>
1000034b8: 88 45 ee                    	movb	%al, -18(%rbp)
1000034bb: eb 00                       	jmp	0x1000034bd <__ZN7badcase8bad_case17h935baceb22cd8f50E+0x1d>
1000034bd: 8a 45 ee                    	movb	-18(%rbp), %al
1000034c0: a8 01                       	testb	$1, %al
1000034c2: 75 2a                       	jne	0x1000034ee <__ZN7badcase8bad_case17h935baceb22cd8f50E+0x4e>
1000034c4: eb 22                       	jmp	0x1000034e8 <__ZN7badcase8bad_case17h935baceb22cd8f50E+0x48>
1000034c6: 48 8b 7d e0                 	movq	-32(%rbp), %rdi
1000034ca: e8 61 0b 00 00              	callq	0x100004030 <__ZN4core3ptr42drop_in_place$LT$alloc..string..String$GT$17ha9e3822061a093a2E>
1000034cf: eb 0e                       	jmp	0x1000034df <__ZN7badcase8bad_case17h935baceb22cd8f50E+0x3f>
1000034d1: 48 89 c1                    	movq	%rax, %rcx
1000034d4: 89 d0                       	movl	%edx, %eax
1000034d6: 48 89 4d f0                 	movq	%rcx, -16(%rbp)
1000034da: 89 45 f8                    	movl	%eax, -8(%rbp)
1000034dd: eb e7                       	jmp	0x1000034c6 <__ZN7badcase8bad_case17h935baceb22cd8f50E+0x26>
1000034df: 48 8b 7d f0                 	movq	-16(%rbp), %rdi
1000034e3: e8 ae 7d 03 00              	callq	0x10003b296 <dyld_stub_binder+0x10003b296>
1000034e8: c6 45 ef 01                 	movb	$1, -17(%rbp)
1000034ec: eb 04                       	jmp	0x1000034f2 <__ZN7badcase8bad_case17h935baceb22cd8f50E+0x52>
1000034ee: c6 45 ef 00                 	movb	$0, -17(%rbp)
1000034f2: 48 8b 7d e0                 	movq	-32(%rbp), %rdi
1000034f6: e8 35 0b 00 00              	callq	0x100004030 <__ZN4core3ptr42drop_in_place$LT$alloc..string..String$GT$17ha9e3822061a093a2E>
1000034fb: 8a 45 ef                    	movb	-17(%rbp), %al
1000034fe: 24 01                       	andb	$1, %al
100003500: 0f b6 c0                    	movzbl	%al, %eax
100003503: 48 83 c4 20                 	addq	$32, %rsp
100003507: 5d                          	popq	%rbp
100003508: c3                          	retq
100003509: 0f 1f 80 00 00 00 00        	nopl	(%rax)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
0000000100003510 <__ZN7badcase4good17h6db31dacbc8577fdE>:
100003510: 55                          	pushq	%rbp
100003511: 48 89 e5                    	movq	%rsp, %rbp
100003514: 48 83 ec 20                 	subq	$32, %rsp
100003518: 48 89 7d e0                 	movq	%rdi, -32(%rbp)
10000351c: 48 8d 35 65 cb 03 00        	leaq	248677(%rip), %rsi  # 100040088 <dyld_stub_binder+0x100040088>
100003523: e8 18 0a 00 00              	callq	0x100003f40 <__ZN77_$LT$alloc..string..String$u20$as$u20$core..cmp..PartialEq$LT$$RF$str$GT$$GT$2ne17hb7c84616573dd96bE>
100003528: 88 45 ef                    	movb	%al, -17(%rbp)
10000352b: eb 00                       	jmp	0x10000352d <__ZN7badcase4good17h6db31dacbc8577fdE+0x1d>
10000352d: 48 8b 7d e0                 	movq	-32(%rbp), %rdi
100003531: e8 fa 0a 00 00              	callq	0x100004030 <__ZN4core3ptr42drop_in_place$LT$alloc..string..String$GT$17ha9e3822061a093a2E>
100003536: eb 22                       	jmp	0x10000355a <__ZN7badcase4good17h6db31dacbc8577fdE+0x4a>
100003538: 48 8b 7d e0                 	movq	-32(%rbp), %rdi
10000353c: e8 ef 0a 00 00              	callq	0x100004030 <__ZN4core3ptr42drop_in_place$LT$alloc..string..String$GT$17ha9e3822061a093a2E>
100003541: eb 0e                       	jmp	0x100003551 <__ZN7badcase4good17h6db31dacbc8577fdE+0x41>
100003543: 48 89 c1                    	movq	%rax, %rcx
100003546: 89 d0                       	movl	%edx, %eax
100003548: 48 89 4d f0                 	movq	%rcx, -16(%rbp)
10000354c: 89 45 f8                    	movl	%eax, -8(%rbp)
10000354f: eb e7                       	jmp	0x100003538 <__ZN7badcase4good17h6db31dacbc8577fdE+0x28>
100003551: 48 8b 7d f0                 	movq	-16(%rbp), %rdi
100003555: e8 3c 7d 03 00              	callq	0x10003b296 <dyld_stub_binder+0x10003b296>
10000355a: 8a 45 ef                    	movb	-17(%rbp), %al
10000355d: 24 01                       	andb	$1, %al
10000355f: 0f b6 c0                    	movzbl	%al, %eax
100003562: 48 83 c4 20                 	addq	$32, %rsp
100003566: 5d                          	popq	%rbp
100003567: c3                          	retq
100003568: 0f 1f 84 00 00 00 00 00     	nopl	(%rax,%rax)