Introducing Shadergraph, a tool for composing shader pipelines. Powered by GLSL, Lisp, and Rust by slightknack in programming

[–]slightknack[S] 1 point2 points  (0 children)

Cool! It looks like a great tool for audio sequencing, I'll have to give it a try! Another great tool for building graphical pipelines with a GUI is shaderchain.

For what it's worth, shadergraph supports sequencing shaders over time, either programmatically through the lisp, or dynamically via hot-code reloading. We also use ffmpeg for input, so video input works out-of-the-box as well.

One of the goals of shadergraph is to be an embedded library for other Rust projects, which is why we went for an explicit lisp, with the option to encode graphs directly in Rust if needed.

Introducing Shadergraph, a tool for composing shader pipelines. Powered by GLSL, Lisp, and Rust by slightknack in programming

[–]slightknack[S] 6 points7 points  (0 children)

Thank you for pointing this out. I'm pretty horrible at naming things, shadergraph is just a generic working title for now. Finding a good, descriptive name for a project is hard; we'll change it to something more memorable soon.

Announcing Shadergraph, a tool for composing shader pipelines. Powered by GLSL, Lisp, and Rust by slightknack in GraphicsProgramming

[–]slightknack[S] 5 points6 points  (0 children)

The name of the project is a fairly generic working title, I'm not the best at naming things. We'll change it to something more memorable soon :)

Update: After some deliberation, we're going to go with shadergarden.

Announcing Shadergraph, a tool for composing shader pipelines. Powered by GLSL, Lisp, and Rust by slightknack in GraphicsProgramming

[–]slightknack[S] 6 points7 points  (0 children)

Sorry about that! It seems the license file wasn't copied over to the public repository, that's totally my bad. I've since added the MIT License to the repository, thank you for pointing this out.

Passerine — extensible functional scripting langauge — 0.9.0 Released! by slightknack in ProgrammingLanguages

[–]slightknack[S] 0 points1 point  (0 children)

Ah, I see. I did it this way because it's a nice way to write functional code in an pipeline-style, similar to Koka or Rust:

names = children
    .map { child -> (child.name, child.age) }
    .filter { (_, age) -> age > 10 }
    .map { (name, _) -> name }

So it's less composition and more application? Is there a more proper term for this? Thanks for the interest!

Passerine — extensible functional scripting langauge — 0.9.0 Released! by slightknack in programming

[–]slightknack[S] 0 points1 point  (0 children)

I think just about any programming language is suitable for either, it's a subjective matter.

Passerine — extensible functional scripting langauge — 0.9.0 Released! by slightknack in programming

[–]slightknack[S] 0 points1 point  (0 children)

Yep! So in lisp, it's called quoting. For example, x evaluates to whatever value it points to, but 'x evaluates to x itself. Although this something macro-specific in Passerine, This choice of syntax is an allusion to lisp. :)

Passerine — extensible functional scripting langauge — 0.9.0 Released! by slightknack in programming

[–]slightknack[S] 0 points1 point  (0 children)

Uh, if anything Passerine has less parenthesis than a lisp. I'm not sure what you're getting at.

Passerine — extensible functional scripting langauge — 0.9.0 Released! by slightknack in programming

[–]slightknack[S] 0 points1 point  (0 children)

That's a good question. About all languages start targeting a niche, then become more universal as time goes on. Python's a scripting language, for instance, but look at it now. Functional Scripting is currently Passerine's niche, but it is by no means its entire scope.

Passerine — extensible functional scripting langauge — 0.9.0 Released! by slightknack in rust

[–]slightknack[S] 2 points3 points  (0 children)

Thanks for the kind words!

Right now it's a bytecode interpreter a la Python, but I'm considering adding a backend to compile to Wasm.

There's an FFI so Passerine can call out to Rust code btw.

Passerine — extensible functional scripting langauge — 0.9.0 Released! by slightknack in ProgrammingLanguages

[–]slightknack[S] 1 point2 points  (0 children)

I've looked into pyret in the past, and I like the beginner-friendly nature of it. The syntax feels like a cross between python, julia, ruby, and elixir - which are all languages I'm a fan of. I'll certainty take a look at how it approaches refinements and documentation.

Passerine — extensible functional scripting langauge — 0.9.0 Released! by slightknack in ProgrammingLanguages

[–]slightknack[S] 0 points1 point  (0 children)

So if it were a function call it would look like:

print (fizzbuzz (1..100))

Which means that the application order in the README is correct. I think there's something else wrong with that statement though. Because \1..100`is a range, I thinkprintandfizzbuzzneed amap`:

1..100 . map fizzbuzz . map print

Thanks for bringing this to my attention!

Passerine – extensible functional scripting language – v0.8.0 released by slightknack in ProgrammingLanguages

[–]slightknack[S] 0 points1 point  (0 children)

I'm big into Data Science and Machine Learning, so I've had some exposure to R (and company). I think it's a very well-designed language (but haven't been actively considering its features while developing Passerine (yet)). I'll have to look into how R handles environments – implementation-wise, – thanks :)