
最近看到 go 的源码库,比如 bytes 库
Count()函数如下:
func Count(s, sep []byte) int { if len(sep) == 1 && cpu.X86.HasPOPCNT { return countByte(s, sep[0]) } return countGeneric(s, sep) } 然后看了下 countByte 库写法是下面这样:
func countByte(s []byte, c byte) int 库函数为什么可以这么写呢?没有实体?不应该语法报错吗?怎么执行呢? 来位好心人解释下吧!
1 mornlight 2018 年 5 月 3 日 |
2 imcj 2018 年 5 月 4 日 如果你仔细看看各种语言实现,你会发现很多函数只有定义没有实现。这是因为实现在另外一个盒子里面。 countByte 是由.s 文件实现,根据 google 的搜索,.s 是由 c 编译器编译。 就好像 SYSCALL_CANCEL 由内核实现,c 代码里面是没有这个“函数”的实现的。 go 实现了自举,但是并没有完全抛弃 c。 |
4 dndx 2018 年 5 月 4 日 |
5 jy02201949 2018 年 5 月 4 日 如果楼主去看 python 库源码也会得出同样的结论 |
6 misaka19000 2018 年 5 月 4 日 看代码看的不仔细啊,允悲~~ |
7 ylcc 2018 年 5 月 4 日 那看 python 源码就会认为有一大堆没实现的了。。。 |
8 thincamel 2018 年 5 月 4 日 妈蛋的,学的汇编都还给先生了... |
11 natscat 2018 年 5 月 4 日 汇编实现的 runtime 里面一堆 |