Jay Foad: Difference between revisions

Jump to navigation Jump to search
36 bytes added ,  22:20, 10 September 2022
m
Text replacement - "<source" to "<syntaxhighlight"
m (Text replacement - "<source" to "<syntaxhighlight")
(One intermediate revision by the same user 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. 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