Best way to handle short-living linear objects

55 views
Skip to first unread message

Russoul

unread,
Oct 20, 2017, 10:11:00 AM10/20/17
to ats-lang-users
Let's treat `list_vt(a,n)` as algebraic vector of dim 'n'. Then let's perform some operations on a bunch of them:

(*pseudocode*)
...
val a = $list_vt(1,0,0)
val b = $list_vt(0,1,0)
val c = a \cross b
val d = c * PI
...
val _ = free a
val _ = free b
val _ = free c
val _ = free d
(*end of code fragment*)

Cleaning(freeing) after simple algebraic operations in the above example is tedious. And I suppose it can become a real pain in math extensive code.
What is the way out ?

Steinway Wu

unread,
Oct 20, 2017, 10:21:27 AM10/20/17
to ats-lan...@googlegroups.com
I guess you can define \cross and * as functions that consume the linear lists and return a new one? 

Russoul

unread,
Oct 20, 2017, 10:29:19 AM10/20/17
to ats-lang-users
Yes, but that is not modular. What if I need the inputs later ? Then I'll have to copy them. Consuming the inputs is also a bit confusing.

пятница, 20 октября 2017 г., 17:21:27 UTC+3 пользователь Steinway Wu написал:

gmhwxi

unread,
Oct 20, 2017, 10:31:36 AM10/20/17
to ats-lang-users

This issue is related to the way library functions are implemented.
For instance, \cross may free both of its arguments.

A few years ago, I did a package for doing linear algebra:

https://github.com/githwxi/ATS-Postiats-contrib/tree/master/contrib/libfloats

And you may take a look at the function interface:

https://github.com/githwxi/ATS-Postiats-contrib/tree/master/contrib/libfloats/SATS

In this day and age of machine learning, I may need to revisit this package :)



On Friday, October 20, 2017 at 10:11:00 AM UTC-4, Russoul wrote:

gmhwxi

unread,
Oct 20, 2017, 10:33:10 AM10/20/17
to ats-lang-users

No, you don't. You can use reference counting. See the libfloats
package I posted in my previous message.
Reply all
Reply to author
Forward
0 new messages