NYI bytecode and some questions

  • From: John Abrahamsen <jhnabrhmsn@xxxxxxxxx>
  • To: luajit@xxxxxxxxxxxxx
  • Date: Tue, 18 Jun 2013 20:49:32 +0200

Hi all.
I'm doing a http(s)/web framework completely in Lua. All syscalls are
done directly via the FFI, this includes socket and epoll handling.
SSL support is also  in there :).
And its actually coming along nicely, obviously faster than Tornado on Pypy.

I've lately been running LuaJIT with -jdump.

What I keep seeing obviously when benchmarking the framework itself
(no processing in requests except push "Hello world" to socket) is
that the traces are aborted frequently because of NYI bytecode. What I
see most of the time is:

0004  . UGET     3   0      ; ffi
0005  . TGETS    3   3   0  ; "new"
0006  . KSTR     4   1      ; "struct epoll_event[?]"
0007  . MOV      5   2
0008  . CALL     3   2   3
0000  . . FUNCC               ; ffi.new
---- TRACE 6 abort epoll_ffi.lua:144 -- NYI: unsupported C type conversion


This is basically  a trace starting at the top of the event loop and
break at the end when the array for epoll_wait is allocated. Another
one that keeps popping up is bc 51:

0008  . . . TGETS    3   0   2  ; "io_loop"
0009  . . . MOV      4   3
0010  . . . TGETS    3   3   3  ; "add_callback"
0011  . . . FNEW     5   4      ; iostream.lua:353
---- TRACE 9 abort iostream.lua:363 -- NYI: bytecode 51

This is from creating lambda functions.

My questions are; should I care if they are not implemented?
Should I rewrite the framework to avoid lambdas? The API is mostly
callbacks based at the moment for convinience. Is there a way to avoid
the two aborts mentioned?

Otherwise a great piece of engineering and many thanks to Mike!

/John

Other related posts: