Jay Foad: Difference between revisions

Jump to navigation Jump to search
433 bytes added ,  10:34, 4 May 2020
m
(12 intermediate revisions by 3 users not shown)
Line 1: Line 1:
'''Jay Foad''' is a software developer and programming language implementor. He worked at [[Dyalog Ltd.]] from April 2010 to May 2019 on the implementation of [[Dyalog APL]], and was appointed CTO in January 2016. Foad's contributions include a bytecode compiler for Dyalog APL and improvements in the language design and implementation.
'''Jay Maxwell Foad''' is a software developer and programming language implementor. He worked at [[Dyalog Ltd.]] from April 2010 to May 2019 on the implementation of [[Dyalog APL]], and was appointed CTO in January 2016. Foad's contributions include a bytecode compiler for Dyalog APL and improvements in the language design and implementation.


== 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.
Line 24: Line 24:


=== Dyalog user meetings ===
=== Dyalog user meetings ===
 
<div style="column-width:30em">
* [[Dyalog '10]] V13: An interpreter for Vanilla Siteswap
* [[Dyalog '11]] D11: "Focus on Performance"
* [[Dyalog '11]] D11: "Focus on Performance"
* [[Dyalog '11]] D07: [https://dyalog.tv/Dyalog13/?v=Bmx_yUKxVv0 "Parallel Language Features in Version 14.0"] (with [[Morten Kromberg]])
* [[Dyalog '13]] D07: [https://dyalog.tv/Dyalog13/?v=Bmx_yUKxVv0 "Parallel Language Features in Version 14.0"] (with [[Morten Kromberg]])
* [[Dyalog '13]] D10: [https://dyalog.tv/Dyalog13/?v=bDd5EMXvLDI "Reducing Interpreter Overhead"]
* [[Dyalog '13]] D10: [https://dyalog.tv/Dyalog13/?v=bDd5EMXvLDI "Reducing Interpreter Overhead"]
* [[Dyalog '15]] D04: [https://dyalog.tv/Dyalog15/?v=AJzY4DgUVws "Core Performance"] (with [[Roger Hui]])
* [[Dyalog '15]] D04: [https://dyalog.tv/Dyalog15/?v=AJzY4DgUVws "Core Performance"] (with [[Roger Hui]])
* [[Dyalog '15]] D15: "Compilation and Bytecode Execution" ([https://www.dyalog.com/user-meetings/uploads/conference/dyalog15/presentations/D15_Compilation_and_Bytecode_Execution.pdf slides])
* [[Dyalog '15]] D15: "Compilation and Bytecode Execution" ([https://www.dyalog.com/uploads/conference/dyalog15/presentations/D15_Compilation_and_Bytecode_Execution.pdf slides])
* [[Dyalog '16]] D03: [https://dyalog.tv/Dyalog16/?v=XPyUUbipPyk "Technical Road Map: Under The Covers"] (with [[Morten Kromberg]])
* [[Dyalog '16]] D03: [https://dyalog.tv/Dyalog16/?v=XPyUUbipPyk "Technical Road Map: Under The Covers"]
* [[Dyalog '16]] D08: [https://dyalog.tv/Dyalog16/?v=2AeONlTj1aY "Performance: The Neverending Story"] (with [[Roger Hui]])
* [[Dyalog '16]] D08: [https://dyalog.tv/Dyalog16/?v=2AeONlTj1aY "Performance: The Never Ending Story"] (with [[Roger Hui]])
* [[Dyalog '17]] D03: [https://dyalog.tv/Dyalog17/?v=WYueMAueemM "Technical Road Map: Under The Covers"] (with [[Morten Kromberg]])
* [[Dyalog '17]] D03: [https://dyalog.tv/Dyalog17/?v=WYueMAueemM "Technical Road Map: Under The Covers"]
* [[Dyalog '18]] D03: [https://dyalog.tv/Dyalog18/?v=HyIwBFL-xj4 "Technical Road Map: Under The Covers"] (with [[Morten Kromberg]])
* [[Dyalog '18]] D03: [https://dyalog.tv/Dyalog18/?v=HyIwBFL-xj4 "Technical Road Map: Under The Covers"]
</div>
=== Other talks ===
* Dyalog webinar: [https://dyalog.tv/Webinar/?v=Q_vgSN6rza0 Adventures in Advent of Code]
* Dyalog webinar: [https://dyalog.tv/Webinar/?v=8cbPLRAcC7M Total Array Ordering] (with [[Adám Brudzewsky]])


== References ==
== References ==


<references/>
<references/>
{{APL community}}
{{APL community}}{{DEFAULTSORT:Foad}}[[Category:People]][[Category:Dyalog Ltd. employees]][[Category:Designers]][[Category:Executives]][[Category:Implementers]]

Navigation menu