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

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

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

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.

Wim boosted

An image of Comet NEOWISE as photographed from the ISS.

Wim boosted
Wim boosted

I am extraordinarily pleased to announce a new release of my refactoring source-to-source compiler for FORTRAN 77! So happy!

github.com/wimvanderbauwhede/R
#coding
#compiler


I am a computing scientist at the University of Glasgow in Scotland and my specific interests are compilers for acceleration of scientific code, parallel and heterogeneous programming, GPUs and specifically FPGAs.

FediScience.org

Fediscience is the social network for scientists.