Jay Foad: Difference between revisions

From APL Wiki
Jump to navigation Jump to search
(→‎Dyalog user meetings: fix broken link)
m (Comma needed here.)
 
(11 intermediate revisions by 2 users not shown)
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>[[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).
Foad's bytecode compiler (invoked with <syntaxhighlight lang=apl inline>400⌶</syntaxhighlight>) 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>[[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 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 <syntaxhighlight lang=apl inline>1500⌶</syntaxhighlight> after participating in their design.


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 '10]] V13: An interpreter for Vanilla Siteswap
* [[Dyalog '11]] D11: "Focus on Performance"
* [[Dyalog '11]] D11: "Focus on Performance"
Line 32: Line 32:
* [[Dyalog '15]] D15: "Compilation and Bytecode Execution" ([https://www.dyalog.com/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"]
* [[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"]
* [[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"]
* [[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]]

Latest revision as of 21:04, 4 August 2024

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

Before joining Dyalog and learning APL, Foad worked for ten years at Tao Group. His responsibilities as Senior Developer included maintaining a JIT compiler for 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 version 14.0.[1]

Foad was promoted to Dyalog CTO in January 2016, replacing Morten Kromberg, who took the role of CXO.[2][3] 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 AMD.[4]

Contributions

Foad's bytecode compiler (invoked with 400⌶) for Dyalog was included in version 14.0 and on, although work on the compiler almost entirely stopped by 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.[4] He also did significant work on Dyalog's interpreter, in particular optimising Maximum, Minimum, and Plus 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.[5] Foad worked not only on speeding up particular functions but also optimising the interpreter as a whole, for instance implementing special code for scalar functions with all arguments scalar, rewriting Dyalog's workspace compactor with a faster algorithm, and changing Dyalog's stranding implementation from an to a linear-time algorithm. Foad did significant work on Dyalog's decimal float implementation, and was the primary developer involved in switching from DPD to the faster 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 results for system functions that previously lacked any result (as no-result functions are difficult to use in dfns). 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 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.[6] He implemented hashed arrays using 1500⌶ after participating in their design.

Foad helped improve testing while at Dyalog, including the use of fuzz testing to identify crashes in obscure statements.

Publications

Dyalog user meetings

Other talks

References

APL community [edit]
Activities ConferencesUser groups and meetupsIverson AwardExercises
Chat rooms and forums APL FarmAPL OrchardAPL Wiki
People Phil AbramsBrian BeckerBob BerneckyLarry BreedCharles BrennerJim BrownAdám BrudzewskyGitte ChristensenPeter DonnellyJohn EarnestAdin FalkoffGarth FosterLib GibsonAaron HsuRoger HuiKen IversonMorten KrombergDick LathwellMarshall LochbaumEugene McDonnellRoger MooreTrenchard MoreAlan PerlisRaghu RanganathanHenry RichAl RoseJohn ScholesIan SharpBob SmithGeoff StreeterJoey TuttleArthur Whitney
Other APL TrustAPL Quote QuadBlogsBooksCase studiesFamous APL usersHumourJobsMerchandisePapersPodcastsTryAPLTry It OnlineVideo channels