Wim boosted

omg
"Orkestra Obsolete play Blue Monday using 1930s instruments - BBC Arts"
youtube.com/watch?v=cHLbaOLWjp
realized just how different and impossible to recreate current music is to anything heard in history

@meisam That is apparently still a work in progress, see here: github.com/MoarVM/MoarVM/tree/

This will eventually allow you to link the VM into your C code.

Wim boosted

Raku's junctions reconstructed in #Haskell, and then again in Raku. A sneak preview:

data JType = Any | All | One | None
data Junction a = Junction JType [a]

(鈥慨) :: (a -> b) -> Junction a -> Junction b
(锟) :: Junction (b -> c) -> b -> Junction c
(锟慨) :: Junction (b -> c) -> Junction b -> Junction (Junction c)

so :: Junction Bool -> Bool

#rakulang

Wim boosted

I wrote two new articles, both dealing with junctions in raku.
Junctions are these cool quantum superposition data types that result in auto-threaded computations.

But there is something odd about them, and that is the topic of my first article:

"The strange case of the greedy junction"

gist.github.com/wimvanderbauwh

Show thread

@meisam But my purpose was to explain functional programming, the use of Raku is incidental.

In the past months I have written a series of blog posts on functional programming with a particular (but by no means exclusive) focus on the Raku programming language. If you're curious about functional programming, I think this series might be a good if maybe somewhat challenging and idiosyncratic introduction. It starts with the very basics but covers some more advanced concepts further on.

The suggested reading order would be:

@VictorVenema I asked Alice, the octodon.social admin, but she has just patched the source code. She said though that the glitch-soc for of mastodon (github.com/glitch-soc/mastodon) will let you do this more easily.

@VictorVenema I meant octodon.social. If you like, I can ask the admin how it is done.

@VictorVenema Octodon has a feature where if you use a CW, you can use >1000 characters (close on 2000 iirc). Without CW, it's 500.

Wim boosted

"A theory of functionality is presently being developed, where traditional ideas of data structures are being reformulated in such a way that a structure is now seen as a functional operator missing some if its arguments. For instance, an integer is akin to a for-loop missing its body, a boolean is akin to a conditional missing its pair of branches, etc."

(from
Corrado Boehm and Alessandro Berarducci: Automatic Synthesis of Typed Lambda-Programs on Term Algebras
Theoretical Computer Science, 1985, v39, pp. 135--154. )

Wim boosted

Type Safety in Fortran 

I'd like to share something I worked out today about type safety in Fortran. It is part of a paper I'm working on and I am quite pleased about it. So you get a sneak preview.

It is not very widely known that venerable old Fortran has higher-order functions. You know, these fancy things functional programming languages have? It also has subtyping and polymorphic functions, but that's another story.

The issue with the higher order functions is how they are typed. When a function f1(x) with type

f1 : t1 -> t2

is passed as argument to a function f2(f), the type of f2 is:

f2 : t2 -> t3

So the type of the argument(s) of f1 is not considered. Which means that we can easily write unsafe code:

t3 function f2(f)
t2 :: f,y
t1 :: x
t4 :: z
logical :: c
...
if (c) then
y = f(x)
else
y = f(z,x)
end if
end function

The f(z,x) call, while patently wrong, will pass silently.

That's a bit not good, but fortunately all is not lost: algebraic data types to the rescue. This is a kind of type used by many functional programming languages, and it allows you to say something like "this type of thingy can either be A or B or C etc". In particular, I am going to use an algebraic data type where every type alternative is a function type, something like

datatype F12 = F1 t1 -> t2 | F2 t4 ->t1 ->t2

Fortran does not have such a type. But with a little trickery we can achieve the same effect.

Fortran requires us to explicitly declare which functions will be used as arguments in code unit. So we can look all functions so declared in a code unit, and make a list of their type signatures:

F12 = [ t1 -> t2 , t4 ->t1 ->t2 ]

The index in this list is a unique identifier for that type, F12[1] refers to the first type, F12[2] to the second.

And now we can do this:

t3 function f2(idx,f)
integer :: idx
t2 :: f,y
t1 :: x
t4 :: z
logical :: c
...
if (c) then
if (idx==1) then
y = f(x)
else
error('Type error!')
end if
else
if (idx==2) then
y = f(z,x)
else
error('Type error!')
end if
end if
end function

And so our higher-order functions are type safe at run time. In practice, the "we" is a refactoring compiler, so the programmer does not need to do anything.

Wim boosted

shameless self promotion of my new paper 

Our new article is finally published!

'What鈥檚 Wrong with Digital Stewardship: Evaluating the Organization of Digital Preservation Programs from Practitioners鈥 Perspectives"

Basically we (Peggy, Shira, Karl, Julia, and I) asked ~25 digital preservation practitioners about their workplace and the fields' downward workplace satisfaction trend and analyzed their answers.

Article (open access): elischolar.library.yale.edu/jc

Data (mostly open except the interview transcripts themselves, participant protection): data.qdr.syr.edu/dataset.xhtml

What's the context here? What timescale approximates "permanent"? (It reads like a reply so I guess I'm missing some context)

Wim boosted

I wrote another article in what is inadvertently becoming a small series on "typed functional programming in Raku":

"Function Types", starring Raku but with a supporting cast of Python, Rust, Haskell, C and even Fortran.

wimvanderbauwhede.github.io/ar

#rakulang #programming

@datenteiler Thank you. I have been on Fedi for a long time though, on other instances. My main is on Octodon.
FediScience looks like a nice initiative so I created an account here too.

Wim boosted

In case you missed it earlier, I wrote an introduction to functional programming in wonderful Raku and serviceable Python.

wimvanderbauwhede.github.io/ar

#programming
#rakulang
#python

@PCI_Archaeology That is correct, it needs to be installed on the server, I was addressing this to Victor, sorry if that wasn't clear.

@VictorVenema

Wim boosted

We now have 55 users. Thanks for everyone helping to promote .

If you look at my first Toots you will find some tips and tricks to survive in this new jungle.

Show more
FediScience.org

Fediscience is the social network for scientists.