超级长的函数名对性能有没有影响?

这里的“长”指的是超级长的那种,比如超过60个字符的函数名。

这些很长的函数名会不会对Emacs的性能造成影响?以及给函数命名的时候应该长点好还是短点好?

https://github.com/emacs-mirror/emacs/blob/ab871981125393d89202932284eda6e507bfc6fd/src/lread.c

Lisp_Object
oblookup (Lisp_Object obarray, register const char *ptr, ptrdiff_t size, ptrdiff_t size_byte)
{
  size_t hash;
  size_t obsize;
  register Lisp_Object tail;
  Lisp_Object bucket, tem;

  obarray = check_obarray (obarray);
  /* This is sometimes needed in the middle of GC.  */
  obsize = gc_asize (obarray);
  hash = hash_string (ptr, size_byte) % obsize;
  bucket = AREF (obarray, hash);
  oblookup_last_bucket_number = hash;
  if (EQ (bucket, make_fixnum (0)))
    ;
  else if (!SYMBOLP (bucket))
    error ("Bad data in guts of obarray"); /* Like CADR error message.  */
  else
    for (tail = bucket; ; XSETSYMBOL (tail, XSYMBOL (tail)->u.s.next))
      {
	if (SBYTES (SYMBOL_NAME (tail)) == size_byte
	    && SCHARS (SYMBOL_NAME (tail)) == size
	    && !memcmp (SDATA (SYMBOL_NAME (tail)), ptr, size_byte))
	  return tail;
	else if (XSYMBOL (tail)->u.s.next == 0)
	  break;
      }
  XSETINT (tem, hash);
  return tem;
}

bucket hash

你应该知道了吧

感谢…………

没懂,上面代码说明了啥?

obarry lookup 只和加載速度有关,而且对 I/O 操作讲這点性能影响微不足道的。

已经加載好的 symbol 都不过是指針,symbol name 的长度对函数运行性能沒影响,就是会占点內存罢了,而且想省这点內存还不如把 Emacs 所有的 dostring 删了有效。

整天想性能,咋不去造 CPU,对 CPU 管线设计细节不了解的话写的代碼可是会有性能损失的啊。

1 个赞

:joy:

这个嘛,虽然有些我也觉得没必要想,但是 @ReimuXMX 开心就好

就是因为没本事造才要想啊……