www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.announce - Ocean preview finally open sourced

reply Leandro Lucarella <leandro.lucarella sociomantic.com> writes:
Hello again Dland! I'm happy to finally announce the open 
sourcing of our Ocean base library, just it time to keep our word 
and make it in June ;-)

https://github.com/sociomantic-tsunami/ocean

To quote the README:

---
Ocean is a general purpose library, compatible with both D1 and 
D2, with a focus
on supporting the development of high-performance, real-time 
applications. This
focus has led to several noteworthy design choices:

* Ocean is not cross-platform. The only supported platform is 
Linux.
* Ocean assumes a single-threaded environment. Fiber-based 
multi-tasking is
   favoured, internally.
* Ocean aims to minimise use of the D garbage collector. GC 
collect cycles
   can be very disruptive to real-time applications, so Ocean 
favours a model of
   allocating resources once then reusing them, wherever possible.

Ocean began life as an extension of Tango, some elements of which 
were
eventually merged into Ocean.
---

Please consider this as a very early release, this is why we are 
"branding" it as a "preview". This is basically because, despite 
being working on the open sourcing full steam since DConf ended, 
we couldn't manage to set up all the infrastructure to be able to 
put all our development efforts in the public repo yet. So 
unfortunately the main development will still happen inside 
Sociomantic for this first phase (we'll only synchronize 
releases). When this will switch finally happens will depend on 
how much work it would imply to build a public infrastructure 
(mainly for automatic testing), and honestly, what's the 
community reception (we understand it might not be all that 
tempting being a D1 project that gets automatically converted to 
D2, thus not very idiomatic D2 :).

Anyway, the main big step is done. You can take a look at the 
code, use it or steal parts of it if you find them useful 
(although please have a look at the licensing terms, even when 
all our code is Boost, there is code inherited from Tango that 
isn't), criticize it, and if you are really nice, fill issues and 
make pull requests!

Also, in the near future we plan to write a blog post explaining 
a bit more about what Ocean is about, we'll let you know when 
it's ready, but we didn't want to delay the release for it :-)

Thank you!
Jun 30 2016
next sibling parent Stefan Koch <uplink.coder googlemail.com> writes:
On Thursday, 30 June 2016 at 16:45:43 UTC, Leandro Lucarella 
wrote:
 Hello again Dland! I'm happy to finally announce the open 
 sourcing of our Ocean base library, just it time to keep our 
 word and make it in June ;-)

 [...]
I like the structTable :)
Jun 30 2016
prev sibling next sibling parent reply Chris <wendlec tcd.ie> writes:
How much would it take to make it cross platform (Windows, Mac). 
Unfortunately, we still have to cater for those two outliers :)
Jun 30 2016
parent reply Leandro Lucarella <llucax gmail.com> writes:
On Thursday, 30 June 2016 at 20:59:42 UTC, Chris wrote:
 How much would it take to make it cross platform (Windows, 
 Mac). Unfortunately, we still have to cater for those two 
 outliers :)
I'd say some parts should work out of the box (there many things that are completely OS agnostic, like containers, cache, bindings to other libraries like PCRE, etc.), and some other it would be quite some work (for example all the I/O is tied to epoll, there is one class to work with direct I/O that's super Linux specific, etc.).
Jun 30 2016
parent reply Chris <wendlec tcd.ie> writes:
On Thursday, 30 June 2016 at 21:20:16 UTC, Leandro Lucarella 
wrote:
 I'd say some parts should work out of the box (there many 
 things that are completely OS agnostic, like containers, cache, 
 bindings to other libraries like PCRE, etc.), and some other it 
 would be quite some work (for example all the I/O is tied to 
 epoll, there is one class to work with direct I/O that's super 
 Linux specific, etc.).
Hm. I'd have to see what works. I can't afford to be stuck to one OS.
Jun 30 2016
parent reply Leandro Lucarella <leandro.lucarella sociomantic.com> writes:
On Thursday, 30 June 2016 at 21:32:47 UTC, Chris wrote:
 On Thursday, 30 June 2016 at 21:20:16 UTC, Leandro Lucarella 
 wrote:
 I'd say some parts should work out of the box (there many 
 things that are completely OS agnostic, like containers, 
 cache, bindings to other libraries like PCRE, etc.), and some 
 other it would be quite some work (for example all the I/O is 
 tied to epoll, there is one class to work with direct I/O 
 that's super Linux specific, etc.).
Hm. I'd have to see what works. I can't afford to be stuck to one OS.
Maybe in some future we might want to do some sort of separation between the more algorithmic stuff and the more platform-dependent stuff, because we actually spent quite some time and effort in removing some Tango's abstractions. It is a very conscious design decision to remove as many abstraction layers as possible, and for the platform-dependent part, we definitely don't want to go back. We need to work very closely to the OS facilities, so abstractions are plain noise and source of inefficiency for us :) But if there is interest, I don't discard the splitting idea in some future.
Jul 01 2016
parent reply Chris <wendlec tcd.ie> writes:
On Friday, 1 July 2016 at 08:54:27 UTC, Leandro Lucarella wrote:

 Maybe in some future we might want to do some sort of 
 separation between the more algorithmic stuff and the more 
 platform-dependent stuff, because we actually spent quite some 
 time and effort in removing some Tango's abstractions. It is a 
 very conscious design decision to remove as many abstraction 
 layers as possible, and for the platform-dependent part, we 
 definitely don't want to go back. We need to work very closely 
 to the OS facilities, so abstractions are plain noise and 
 source of inefficiency for us :)

 But if there is interest, I don't discard the splitting idea in 
 some future.
It'd be great, if there was some sort of separation so that users know exactly what to use for cross-platform development and what not. Docs or some sort of a cheat sheet would be nice too. In this way users can see, if Ocean contains something interesting for the task at hand. There's less of a chance of adoption, if you have to go through the source code to see what it does.
Jul 01 2016
parent Leandro Lucarella <leandro.lucarella sociomantic.com> writes:
On Friday, 1 July 2016 at 09:13:46 UTC, Chris wrote:
 On Friday, 1 July 2016 at 08:54:27 UTC, Leandro Lucarella wrote:
 But if there is interest, I don't discard the splitting idea 
 in some future.
It'd be great, if there was some sort of separation so that users know exactly what to use for cross-platform development and what not. Docs or some sort of a cheat sheet would be nice too. In this way users can see, if Ocean contains something interesting for the task at hand. There's less of a chance of adoption, if you have to go through the source code to see what it does.
Yes, the library is fairly well documented but one of our big debts is to build the documentation. Unfortunately the project lacked document generation for basically all its life, so even when some sort of DDoc-ish format is used, it not strictly DDoc because it was never actually generated, so when we start generating the docs we'll need to do a lot of cleanup and fixing. But generating Docs is another thing that is high in our TODO list.
Jul 01 2016
prev sibling next sibling parent reply Ola Fosheim =?UTF-8?B?R3LDuHN0YWQ=?= writes:
On Thursday, 30 June 2016 at 16:45:43 UTC, Leandro Lucarella 
wrote:
 (although please have a look at the licensing terms, even when 
 all our code is Boost, there is code inherited from Tango that 
 isn't), criticize it, and if you are really nice, fill issues 
 and make pull requests!
I find the licensing a bit confusing. For instance https://github.com/sociomantic-tsunami/ocean/blob/v2.x.x/src/ocean/math/Probability.d Lists the licensing as: Tango 3 BSD Clause + Academic Free License v3.0. But the original work Cephes seems to carry this ad-hoc license: https://github.com/jeremybarnes/cephes/blob/master/readme « Some software in this archive may be from the book _Methods and Programs for Mathematical Functions_ (Prentice-Hall or Simon & Schuster International, 1989) or from the Cephes Mathematical Library, a commercial product. In either event, it is copyrighted by the author. What you see here may be used freely but it comes with no support or guarantee. The two known misprints in the book are repaired here in the source listings for the gamma function and the incomplete beta integral. » Maybe it would be a good idea to sort out the code that is pure Boost, or obtain a boost license where the authors are known, because complicated licensing is a hindrance even if the "spirit" is the same across the licenses.
Jul 01 2016
parent reply Leandro Lucarella <leandro.lucarella sociomantic.com> writes:
On Friday, 1 July 2016 at 09:43:53 UTC, Ola Fosheim Grøstad wrote:
 On Thursday, 30 June 2016 at 16:45:43 UTC, Leandro Lucarella 
 wrote:
 (although please have a look at the licensing terms, even when 
 all our code is Boost, there is code inherited from Tango that 
 isn't), criticize it, and if you are really nice, fill issues 
 and make pull requests!
I find the licensing a bit confusing. For instance https://github.com/sociomantic-tsunami/ocean/blob/v2.x.x/src/ocean/math/Probability.d Lists the licensing as: Tango 3 BSD Clause + Academic Free License v3.0. But the original work Cephes seems to carry this ad-hoc license: https://github.com/jeremybarnes/cephes/blob/master/readme
Oh, well. Sorting out the license(s) were one of the major pains and time consuming tasks we had to do to opensource this, and apparently despite our best efforts there are stuff that we didn't see. This comes from Tango, so we kept the original Tango license. I would assume Tango people did a check on this, and had some sort of permission to change the license, but I will try to contact the author to make sure this is the case. If not, then we'll probably remove that module (we removed a lot of Tango modules because of dubious origin/license already). https://github.com/sociomantic-tsunami/ocean/issues/2
 «
 Some software in this archive may be from the book _Methods and
 Programs for Mathematical Functions_ (Prentice-Hall or Simon & 
 Schuster
 International, 1989) or from the Cephes Mathematical Library, a
 commercial product. In either event, it is copyrighted by the 
 author.
 What you see here may be used freely but it comes with no 
 support or
 guarantee.

 The two known misprints in the book are repaired here in the
 source listings for the gamma function and the incomplete beta
 integral.
 »

 Maybe it would be a good idea to sort out the code that is pure 
 Boost, or obtain a boost license where the authors are known, 
 because complicated licensing is a hindrance even if the 
 "spirit" is the same across the licenses.
We know that, and again, the license was by far the biggest nightmare of the open sourcing effort. Honestly we don't have the time to take on this, but this is an area where external contributions would be extremely helpful. Anyone can contact the original authors and ask for permission (although to make sure we probably need to check the full Tango history to see all the people that actually contributed, sometimes the Authors section is quite bogus).
Jul 01 2016
next sibling parent Ola Fosheim =?UTF-8?B?R3LDuHN0YWQ=?= writes:
On Friday, 1 July 2016 at 10:31:59 UTC, Leandro Lucarella wrote:
 Oh, well. Sorting out the license(s) were one of the major 
 pains and time consuming tasks we had to do to opensource this, 
 and apparently despite our best efforts there are stuff that we 
 didn't see.
*nods* I was only looking at a few random filenames that sounded interesting just to get an idea of what it covered and what it could be useful for :-).
 We know that, and again, the license was by far the biggest 
 nightmare of the open sourcing effort.
Yes, this is often an issue when internal frameworks are open sourced. Non-boost licenses might be less problematic for people who just run the executables on their own servers than for people who release binaries/source.
Jul 01 2016
prev sibling parent Jacob Carlborg <doob me.com> writes:
On 01/07/16 12:31, Leandro Lucarella wrote:

 We know that, and again, the license was by far the biggest nightmare of
 the open sourcing effort. Honestly we don't have the time to take on
 this, but this is an area where external contributions would be
 extremely helpful. Anyone can contact the original authors and ask for
 permission (although to make sure we probably need to check the full
 Tango history to see all the people that actually contributed, sometimes
 the Authors section is quite bogus).
Walter, or someone, already asked the authors of Tango to re-license it. They said no, I don't recall if not all authors could be tracked down or if it was plain no. -- /Jacob Carlborg
Jul 01 2016
prev sibling parent reply Andrea Fontana <nospam example.com> writes:
On Thursday, 30 June 2016 at 16:45:43 UTC, Leandro Lucarella 
wrote:
 Hello again Dland! I'm happy to finally announce the open 
 sourcing of our Ocean base library, just it time to keep our 
 word and make it in June ;-)
https://github.com/sociomantic-tsunami/ocean/blob/v2.x.x/src/ocean/math/random/engines/CMWC.d I always hoped to see a CMWC implementation in phobos. If it was default (pseudo-)random implementation I guess it will break all benchmark on random-related tests...
Jul 04 2016
parent Ola Fosheim =?UTF-8?B?R3LDuHN0YWQ=?= writes:
On Monday, 4 July 2016 at 08:34:15 UTC, Andrea Fontana wrote:
 On Thursday, 30 June 2016 at 16:45:43 UTC, Leandro Lucarella 
 wrote:
 Hello again Dland! I'm happy to finally announce the open 
 sourcing of our Ocean base library, just it time to keep our 
 word and make it in June ;-)
https://github.com/sociomantic-tsunami/ocean/blob/v2.x.x/src/ocean/math/random/engines/CMWC.d I always hoped to see a CMWC implementation in phobos. If it was default (pseudo-)random implementation I guess it will break all benchmark on random-related tests...
Well, it is simple. You can probably implement it in less than an hour and put Boost on it: https://en.wikipedia.org/wiki/Multiply-with-carry#Complementary-multiply-with-carry_generators
Jul 04 2016