<div dir="ltr">Hello,<div><br></div><div>I have a function definition</div><div><br></div><div><div>command batstemmer.stem(terms:bat[:oid,:str], stemmer_name:str):bat[:oid,:str]</div><div>address CMDbatstem</div><div>comment "Wrapper for snowball stemmer";</div></div><div><br></div><div>which internally uses the snowball stemmer (<a href="http://snowball.tartarus.org/">http://snowball.tartarus.org/</a>).</div><div><br></div><div><br></div><div>When the bat to be stemmed is large enough, mitosis will split it into chunks and call the function "stem" on each chunk, possibly in parallel.<br></div><div><br></div><div>Problem is, the snowball stemmer implementation appears to be thread-unsafe, which causes a SIGSEGV.</div><div><br></div><div>Indeed, using the no_mitosis_pipe solves the issue. However, this solution is suboptimal.</div><div><br></div><div>Another solution I found is to mark the mal signature as {unsafe}. This works, although it does something a bit silly: it splits the table into chunks, then repacks everything, and finally runs my function on the re-packed bat (basically wasting effort on a useless split + repack).</div><div><br></div><div>Now, my question is: is there a more focussed property to use? {unsafe} implies thread-unsafe, but it is actually stronger than that. For example, it also implies that there might be side-effects. Therefore, the result cannot be recycled. In my case, instead, the result is perfectly safe to be reused.</div><div><br></div><div>Thanks for any tip.</div><div><br></div><div>Roberto</div></div>