Try   HackMD

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 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

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

(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

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