DEV Community

loading...
Cover image for A new syntax for Gwion!

A new syntax for Gwion!

Jérémie Astor
I'm a musician, developing [Gwion](https://github.com/fennecdjay/Gwion) for my compositional needs. Star it, you'll make my day :smile:
・2 min read

Syntax changes for Gwion

Check it here

I tried to address the syntax problems in Gwion.
Here's what I changed:

Declaration

Declarations needs a prefix

  • var
  • ref
  • nonnull
  • const
  • nonnull ref
  • const ref
  • const nonnull
  • const nonnull ref

This fixes the ambiguity of placement between const, nonnull and ref and makes it easy both for the reader and the parser to know when a variable is declared.

Also, there is no longer a need to use -> when declaring member types.

old syntax

class C {
  class D {}
}

C->D d;
Enter fullscreen mode Exit fullscreen mode

new syntax

class C {
  class D {}
}

#! with the new 'var' modifier
var C.D d;
Enter fullscreen mode Exit fullscreen mode

Acces Specifier

Attained consistency in placement.
Now it is always:
static or global or nothing
followed by
private or protect or nothing

Templates

  • improve template placement consistency: now always on the right.
  • change <~xxx~> to :[xxx]. shorter and can be packed Ptr:[:[int]Ptr] (before: <~<~int~>Ptr ~>Ptr with he space mandatory)

So now all template can be written xxx:[y,z]

new keyword: funcdef

to disambiguate with typedef used for type aliases.

Ability to fix functions

Inspired by a similar feature in haskell, you can now write

#! Automatic conversion to pointer for the first argument
#! default of value 1 for the second argument
fun int add(Ptr:[int] i, int j : 1) {
  return j +=> *i;
}

#! declare a variable
var int i;

#! traditionnal
<<< add(i,1)     >>>;

#! chuck style
<<< (i,1) => add >>>;

#! infix
<<< i @add 1     >>>;

#! prefix
<<< ($add) i     >>>;

#! postfix
<<< i $add       >>>;
Enter fullscreen mode Exit fullscreen mode

Conclusion

I think that's all (well that and the usual bug fix here and there).

In my opinion, this is a huge improvement, but it's now up to you to tell me if there is something wrong, if you like it, whatever...

If nobody sees a problem with it, I'll merge next week.

Discussion (2)

Collapse
pinei profile image
Aldinei Lopes Bastos

Hi
What is Gwion?

Collapse
fennecdjay profile image
Jérémie Astor Author

Sorry I missed your reply.
Gwion is a programming language aimed at music making.
I started it because at some point the language I used for some of my shows/projects (chuck) was not performant enough. I also felt it like things like generics or function pointers so I added them.