When should you use XS?

你离开我真会死。 提交于 2019-12-11 03:14:58

问题


I am writing up a talk on XS and I need to know when the community thinks it is proper to reach for XS.


回答1:


I can think of at least three reasons to use XS:

  1. You have a C library you want to access in Perl 5
  2. You have a block of code that is provably slowing down your program and it would be faster if written in C
  3. You need access to something only available in XS

Reason 1 is obvious and should need no explaination.

When you really need reason 2 is less obvious. Often you are better off looking at how the code is structured. You should only invoke reason 2 if you have profiled your code and have a benchmark and test suite to prove that the XS code is faster and correct.

Reason 3 is a dangerous reason. It is rare that you actually need to look into Perl's guts to do something, but there is at least one valid case.




回答2:


In a few cases, better memory management is another reason for using XS. For example, if you have a very large block of objects of some similar type, this can be managed more efficiently through XS. KinoSearch uses this for tokens, for example, where start and end offsets in a large string can be managed more effectively through XS than as a huge pool of scalars. PDL also has a memory management aspect to it, as well as speed.

There are proposals to integrate some of this approach into core Perl in the long term, initially because it offers a chance to make sharing data in threading better: see: http://openparallel.com/2011/07/05/a-new-hope-for-efficient-safe-data-sharing-between-threads-in-perl/.



来源:https://stackoverflow.com/questions/6684351/when-should-you-use-xs

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!