IppClub / IppClub/YueScript

[use case] Yuescript as a Single Page Application embeddable language?

Open
#180 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Lua
Stars
613
Forks
45
PR merge metrics
No merged PRs in 30d

Description

Hi and thanks for this language! I just discover it yesterday and it's pretty much the response to something I was looking for. I will explain myself in detail here and given that discussions are not yet enabled in this repository, I'll make my comment in the "issues" part, but this is more a conversation on speculative design and the role that Yuescript can play there, to see if can be implemented in practice. If discussions are enabled, I will continue this talk over there (in the "questions" or "ideas" tabs, that are usually available then).

I'm a user of TiddlyWiki, an extensible wiki engine self contained in a single HTML file and I use it for my personal bliki (blog + wiki), my TTRPG group games or research project like one related with the linguistic revitalizing in 4 indigenous communities in the Colombian Amazonas.

And while TiddlyWiki (TW) is a pretty extensible and versatile tool for projects like this, when you start to stretch its usage, you find its limits. To deal with them, we have created TiddlyWikiPharo, a tool that allow us to replicate and import the data model from TiddlyWiki inside the Pharo/GToolkit computing environment, to create interactive documents about how to migrate from Hugo to TiddlyWiki or from WordPress to TiddlyWiki or how to store and visualize the evolution of a wiki (in Spanish). All those use case are possible because we are extending and manipulating TW externally from Pharo/GToolkit, that is where I do almost all of my coding, without dealing too much with the idiosyncrasies of JavaScript and using TW's custom filters and operators language just in the "right amount".

But I would like to extend TiddlyWiki also from inside, without failing into the JS insanity and while keeping the TW's advantages that put it apart from other wiki engines, regarding high malleability, small footprint, the possibility to work offline and a gentle learning curve between being a wiki creator content wiki of creator and functionality.

And given Lua's high embeddability, including the existence of the Fengari JS port of Lua, I made a proposal of a speculative piped Lua variant that would extend TiddlyWiki, with a syntax like the following one (tiddler is TW's name for the unit of content, functionality and/or interface):

tiddlers()
  |> tagged("member")
  |> ramdomized()
  |> template("MemberTemplate")

This is where I imagine that Yuescript could play a role, as already has the proposed syntax and now I wonder:

  1. Could I use Fengari instead of WASM to embed Yuescript in a web page?
  2. Can I call Lua functionality inside Yuescript (and vice-versa), similarly to what is possible with Fennel?
  3. Out of curiosity:
    • Can the example given above be written as a one liner in Yuescript?
    • Have you thought in using Yuescript as a language to program Neovim extensions, again in a similar way to how Fennel is being used?

In this lazy early-year holidays I will slowly familiarize myself with Fengari and Yuescript, and I would like to start implementing something similar to the pipe operator example in Pluto language:

local { http, json } = require "pluto:*"
http.request("https://httpbin.org/get")
|> json.decode
|> dumpvar
|> print
--> {
-->     ["args"] = {},
-->     ["headers"] = {
-->         ["Host"] = string(11) "httpbin.org",
-->         ["User-Agent"] = string(56) "Mozilla/5.0 (compatible; Soup Library; +https://soup.do)",
-->         ["X-Amzn-Trace-Id"] = string(40) "Root=1-65e05b66-6aa8b7c94e7580774a804c24",
-->         ["Accept-Encoding"] = string(13) "deflate, gzip",
-->     },
-->     ["origin"] = string(13) "1.2.3.4",
-->     ["url"] = string(23) "https://httpbin.org/get",
--> }

How can I make something similar using Yuescript?

Thanks in advance any constructive talk and ideas to come,

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the Yuescript, Fengari, and Pluto pipe-operator references named in the issue. Determine whether the proposed browser embedding, Lua interoperability, one-line pipeline syntax, and Neovim extension use are feasible. Done means a decided scope with documented examples or a concrete implementation plan.

Written by the indexing model from the issue text.

Assessment

Tech stack
lua
Domain
compilers, web-dev
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.