Skip to content

Commit

Permalink
add minutes from 2020-06-25 collab summit meeting
Browse files Browse the repository at this point in the history
  • Loading branch information
hackmd-deploy committed Jun 26, 2020
1 parent 435acd1 commit f9bb0d9
Showing 1 changed file with 127 additions and 0 deletions.
127 changes: 127 additions & 0 deletions minutes/2020-06-25-openjs-collab-summit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
# Node.js Tooling Group Collaboration Session at OpenJS Collaborator's Summit, June 25th 2020

Tracking issue: https://github.com/nodejs/tooling/issues/74

## Participants
- Christopher Hiller (@boneskull)
- Benjamin Coe (@bcoe)
- Bryan English (@bengl)
- Tobias Koppers (@sokra)
- Trivikram Kamat (@trivikr)
- Dominykas Blyžė (@dominykas)
- Ian Sutherland (@iansu)
- Joe Sepi (@joesepi)
- Richard Lau (@richardlau)
- Ruy Adorno (@ruyadorno)
- Darcy Clarke (@darcyclarke)
- Jan Krems
- Stephen Belanger (@qard)
- Michael Dawson (@mhdawson)
- Ruben Bridgewater (@BridgeAR)
- Benjamin Gruenbaum (@benjamingr)

## Agenda Voting

We voted on these topics (as per the _x_'s).

- Potential topics of conversation (let’s pick 2 or 3 to discuss):
- ffi (foreign function interface) _xxx_
- Command line parsing. _xxxxx_
- `package.json` scripts with node (e.g., `node --require-module=rmdir -rf foo.js`). _xxxxx_
- Flaky test tracking?
- `execvp` _x_
- V8 caching for startup performance _xx_
- `cpFile` (copy recursive). _xxxx_
- [Recommendation for tooling config file location/format](https://github.com/nodejs/tooling/issues/71) _xx_

## Agenda

- Mission statement (what the heck is the tooling group?).
- npm scripts with node.
- command line parsing.
- cpFile.

## Notes

- Ben gives intro to group mission
- We take votes for topics

### Builtin node scripts, e.g., node --require-module=rmdir -rf foo.js

Ian: how would this work?

Chris: Node.js ships with some lightweight executable scripts that wrap useful builtin functions, e.g., rmdir mkdir
- For portability
- This is package-manager independent

Tobias: you could use `node -e \”fs.rmdir()\”`

Ben: `node -e` is gross

Ian: I still use userland rimraf because I need the binlink even though it’s available in fs with recursive option. Seems silly

Ben: good for those new to Node.js
- having to hunt down which 3p module to bring in is painful. There are many for any given task

Tobias: a standard interface for calling a node builtin function with a syntax for specifying arguments

Bryan gives example: `node -c fs mkdir recursive:true /foo/bar/mydir`
- POC: https://gist.github.com/dominykas/396b3279eceb3ad5ffeddacf30fd35e7
- ./xnif.js fs.mkdir ./new/dir --recursive=true

Ian/Ben: ties into command-line argument parsing; if we had the arg parser it’d help get this done

Tobias: this would be useful because I am a Windows user and people put linux nonsense in the `package.json` scripts

### Argument parsing

Ben: a minimal command-line argument parser
- Chris’ example implementation https://github.com/boneskull/dead-simple-testing-with-mocha/blob/master/03-actual-tests/bargs/src/index.js
- Dominykas another example: https://gist.github.com/dominykas/396b3279eceb3ad5ffeddacf30fd35e7 (this is for executing node internal functions - argument parsing here is made up on the fly)

(comment): There are many different ways to parse arguments, there’s no standard, etc.

Chris: There’s a set of features common to most every command-line tool in the node ecosystem; this common set is what we focus on
- Examples of usage: https://speakerdeck.com/boneskull/dead-simple-testing-with-mocha?slide=32

### cpFile

Ian: we have made some other fs functions “recursive” e.g., mkdir and rmdir, but being able to copy a file tree would be great

Bryan: might be tricky since fs.cpFile does not take an option. Maybe new function?

### FFI (Foreign Function Interface)

Bryan: there’s a lot of options for including native code in Node.js. NAPI, old style.
- There’s overhead; you have to convert from C++ objects to JS objects and back
- FFI would allow calling of native code from Node.js without a custom C++ wrapper
- There’s even more overhead here (performance?)
- New feature in V8: “fast api calls”
- There’s an open (?) PR to consume this to call hrtime which improves perf
- Do we want an FFI available in Node?

Michael: we discussed FFI during NAPI effort
- We believed that FFI would be useful, but it never got done
- It allows more interactivity with javascript
- May be easier to use for developers

Bryan: when you provide a function to the V8 “fast api calls” api you must provide the “fast” implementation and the “slow” implementation as well. You don’t get it for free
- Node provides access to the API, hopefully to avoid the “slow” implementation

Michael: can we make an API that auto-generates code and makes the adapter for you

Bryan: here are some experiments on this front: https://github.com/bengl/sbffi (the tcc branch is the closest to what I’m proposing, but the shared buffer part isn’t important)

Ben: we should get this on the agenda

Michael: may want to pull some NAPI team members

### Action Items

- Ian: make issue for cpFile
- Bryan: upsert an issue for FFI (including concrete use cases, etc.)
- Chris: import this doc into meeting minutes
- Darcy: when you should schedule these hacking sessions?
- Ben: my weeks tend to free up a bit on Thursdays and Fridays (could have my arm twisted into a Saturday, but this might limit people).

**We have a meeting every two weeks, please join: https://github.com/nodejs/tooling**

0 comments on commit f9bb0d9

Please sign in to comment.