Jay Foad: Difference between revisions

Jump to navigation Jump to search
60 bytes added ,  08:55, 10 January 2020
m
no edit summary
mNo edit summary
Line 3: Line 3:
== Career ==
== Career ==


Before joining Dyalog and learning APL, Foad worked for ten years at [[wikipedia:Tao Group|Tao Group]]. His responsibilities as Senior Developer included maintaining a [[wikipedia:Just-in-time compilation|JIT]] compiler for [[wikipedia:Java (programming language)|Java]]. Foad was hired by [[Dyalog Ltd.]] on 26 April, 2010 as Software Developer, with the goal of speeding up APL's implementation. He expressed interest in applying JIT compilation to APL. His bytecode compiler for Dyalog was first released in [[Dyalog APL 14.0|version 14.0]].<ref>Dyalog Ltd. [http://www.dyalog.com/dyalogue-newsletters.htm?nl=17&a=117 "May We Introduce Jay Foad"].</ref>
Before joining Dyalog and learning APL, Foad worked for ten years at [[wikipedia:Tao Group|Tao Group]]. His responsibilities as Senior Developer included maintaining a [[wikipedia:Just-in-time compilation|JIT]] compiler for [[wikipedia:Java (programming language)|Java]]. Foad was hired by [[Dyalog Ltd.]] on 26 April, 2010 as Software Developer, with the goal of speeding up APL's implementation. He expressed interest in applying JIT compilation to APL. His bytecode compiler for Dyalog was first released in [[Dyalog APL 14.0|version 14.0]].<ref>[[Dyalog Ltd.]] [http://www.dyalog.com/dyalogue-newsletters.htm?nl=17&a=117 "May We Introduce Jay Foad"].</ref>


Foad was promoted to Dyalog CTO in January 2016, replacing [[Morten Kromberg]], who took the role of CXO.<ref>Kromberg, Morten. [https://www.dyalog.com/blog/2016/01/ "Happy New Year from the CXO!"]</ref><ref>Foad, Jay. [https://www.dyalog.com/blog/2016/02/a-message-from-the-cto/ "A message from the CTO"].</ref> By this time Foad had begun participating not only in the implementation of Dyalog APL but in its design as well, working with [[John Scholes]] and [[Roger Hui]] in this capacity.
Foad was promoted to Dyalog CTO in January 2016, replacing [[Morten Kromberg]], who took the role of CXO.<ref>[[Morten Kromberg|Kromberg, Morten]]. [https://www.dyalog.com/blog/2016/01/ "Happy New Year from the CXO!"]</ref><ref>Foad, Jay. [https://www.dyalog.com/blog/2016/02/a-message-from-the-cto/ "A message from the CTO"].</ref> By this time Foad had begun participating not only in the implementation of Dyalog APL but in its design as well, working with [[John Scholes]] and [[Roger Hui]] in this capacity.


Foad left Dyalog on 29 May, 2019 to work on GPU compiler technology for [[wikipedia:Advanced Micro Devices|AMD]].<ref name="goodbye">Foad, Jay. [https://www.dyalog.com/blog/2019/05/goodbye/ "Goodbye"].</ref>
Foad left Dyalog on 29 May, 2019 to work on GPU compiler technology for [[wikipedia:Advanced Micro Devices|AMD]].<ref name="goodbye">Foad, Jay. [https://www.dyalog.com/blog/2019/05/goodbye/ "Goodbye"].</ref>
Line 11: Line 11:
== Contributions ==
== Contributions ==


Foad's bytecode compiler (invoked with <source lang=apl inline>400⌶</source>) for Dyalog was included in [[Dyalog APL 14.0|version 14.0]] and on, although work on the compiler almost entirely stopped by [[Dyalog APL 17.0|version 17.0]]. On leaving Dyalog Foad remarked that he no longer thought his purely compiled approach was the best method for APL, and expressed enthusiasm for hybrid interpreter-compiler techniques.<ref name="goodbye"></ref> He also did significant work on Dyalog's interpreter, in particular optimising [[Maximum]], [[Minimum]], and [[Plus]] [[Reduce|reductions]] using [[vector instructions]] on x86 and POWER platforms. He also developed a technique for transposing [[Boolean]] matrices with multiple-of-8 dimensions, which was later extended to arbitrary dimensions by [[Marshall Lochbaum]] with help from Foad.<ref>Lochbaum, Marshall. [https://dyalog.tv/Dyalog17/?v=2KnrDmZov4U "Moving Bits Faster in Dyalog 16.0"].</ref> Foad worked not only on speeding up particular functions but also optimising the interpreter as a whole, for instance implementing special code for [[scalar function]]s with all arguments scalar, rewriting Dyalog's workspace compactor with a faster algorithm, and changing Dyalog's [[stranding]] implementation from an <math>O(n^2)</math> to a linear-time algorithm. Foad did significant work on Dyalog's [[decimal float]] implementation, and was the primary developer involved in switching from [[wikipedia:Densely packed decimal|DPD]] to the faster [[wikipedia:Binary integer decimal|BID]] format on platforms other than POWER (which has hardware DPD support).
Foad's bytecode compiler (invoked with <source lang=apl inline>400⌶</source>) for Dyalog was included in [[Dyalog APL 14.0|version 14.0]] and on, although work on the compiler almost entirely stopped by [[Dyalog APL 17.0|version 17.0]]. On leaving Dyalog Foad remarked that he no longer thought his purely compiled approach was the best method for APL, and expressed enthusiasm for hybrid interpreter-compiler techniques.<ref name="goodbye"></ref> He also did significant work on Dyalog's interpreter, in particular optimising [[Maximum]], [[Minimum]], and [[Plus]] [[Reduce|reductions]] using [[vector instructions]] on x86 and POWER platforms. He also developed a technique for transposing [[Boolean]] matrices with multiple-of-8 dimensions, which was later extended to arbitrary dimensions by [[Marshall Lochbaum]] with help from Foad.<ref>[[Marshall Lochbaum|Lochbaum, Marshall]]. [https://dyalog.tv/Dyalog17/?v=2KnrDmZov4U "Moving Bits Faster in Dyalog 16.0"].</ref> Foad worked not only on speeding up particular functions but also optimising the interpreter as a whole, for instance implementing special code for [[scalar function]]s with all arguments scalar, rewriting Dyalog's workspace compactor with a faster algorithm, and changing Dyalog's [[stranding]] implementation from an <math>O(n^2)</math> to a linear-time algorithm. Foad did significant work on Dyalog's [[decimal float]] implementation, and was the primary developer involved in switching from [[wikipedia:Densely packed decimal|DPD]] to the faster [[wikipedia:Binary integer decimal|BID]] format on platforms other than POWER (which has hardware DPD support).


With [[John Scholes]], Foad defined the [[identity element]] for [[Catenate]] in Dyalog and more generally [[Catenate]] [[reduction]] of an [[empty array]], a model based on but distinct from [[NARS2000]]'s. He was involved in the design of the [[At operator]], [[Where]], [[Interval Index]], and [[Nest]], and defined [[shy result]]s for [[system function]]s that previously lacked any result (as no-result functions are difficult to use in [[dfn]]s). Foad was involved in designing several extensions to Dyalog primitives, including high-rank [[Unique]] in [[Dyalog APL 17.0]] and the decision to allow duplicate left argument cells in [[Interval Index]] in [[Dyalog APL 17.1|17.1]].
With [[John Scholes]], Foad defined the [[identity element]] for [[Catenate]] in Dyalog and more generally [[Catenate]] [[reduction]] of an [[empty array]], a model based on but distinct from [[NARS2000]]'s. He was involved in the design of the [[At operator]], [[Where]], [[Interval Index]], and [[Nest]], and defined [[shy result]]s for [[system function]]s that previously lacked any result (as no-result functions are difficult to use in [[dfn]]s). Foad was involved in designing several extensions to Dyalog primitives, including high-rank [[Unique]] in [[Dyalog APL 17.0]] and the decision to allow duplicate left argument cells in [[Interval Index]] in [[Dyalog APL 17.1|17.1]].


Foad was involved in the design of Dyalog's [[total array order]] along with [[Roger Hui]] and [[Adám Brudzewsky]], and the development of [[tolerant hashing]] for real and [[complex]] vector searches.<ref>Hui, Roger. [https://www.jsoftware.com/papers/Hashing.htm "Hashing for Tolerant Index-Of"].</ref> He implemented [[hashed array]]s using <source lang=apl inline>1500⌶</source> after participating in their design. With [[Marshall Lochbaum]], he worked on the design of [[magic array]]s, a Dyalog APL feature which is still under development.
Foad was involved in the design of Dyalog's [[total array order]] along with [[Roger Hui]] and [[Adám Brudzewsky]], and the development of [[tolerant hashing]] for real and [[complex]] vector searches.<ref>[[Roger Hui|Hui, Roger]]. [https://www.jsoftware.com/papers/Hashing.htm "Hashing for Tolerant Index-Of"].</ref> He implemented [[hashed array]]s using <source lang=apl inline>1500⌶</source> after participating in their design. With [[Marshall Lochbaum]], he worked on the design of [[magic array]]s, a Dyalog APL feature which is still under development.


Foad helped improve testing while at Dyalog, including the use of [[wikipedia:Fuzzing|fuzz testing]] to identify crashes in obscure statements.
Foad helped improve testing while at Dyalog, including the use of [[wikipedia:Fuzzing|fuzz testing]] to identify crashes in obscure statements.

Navigation menu