Network


Latest external collaboration on country level. Dive into details by clicking on the dots.

Hotspot


Dive into the research topics where Yoav Zibin is active.

Publication


Featured researches published by Yoav Zibin.


ACM Transactions on Programming Languages and Systems | 2005

Efficient subtyping tests with PQ-encoding

Joseph Gil; Yoav Zibin

Given a type hierarchy, a subtyping test determines whether one type is a direct or indirect descendant of another type. Such tests are a frequent operation during the execution of object-oriented programs. The implementation challenge is in a space-efficient encoding of the type hierarchy that simultaneously permits efficient subtyping tests. We present a new scheme for encoding multiple- and single-inheritance hierarchies, which, in the standard benchmark hierarchies, reduces the footprint of all previously published schemes. Our scheme is called PQ-encoding (PQE) after PQ-trees, a data structure previously used in graph theory for finding the orderings that satisfy a collection of constraints. In particular, we show that in the traditional object layout model, the extra memory requirements for single-inheritance hierarchies is zero. In the PQE subtyping, tests are constant time, and use only two comparisons. The encoding creation time of PQE also compares favorably with previous results. It is less than 1 s on all standard benchmarks on a contemporary architecture, while the average time for processing a type is less than 1 ms. However, PQE is not an incremental algorithm. Other than PQ-trees, PQE employs several novel optimization techniques. These techniques are applicable also in improving the performance of other, previously published, encoding schemes.


conference on object-oriented programming systems, languages, and applications | 2002

Fast algorithm for creating space efficient dispatching tables with application to multi-dispatching

Yoav Zibin; Joseph Gil

The dispatching problem can be solved very efficiently in the single-inheritance~(SI) setting. In this paper we show how to extend one such solution to the multiple-inheritance~(MI) setting. This generalization comes with an increase to the space requirement by a small factor of κ This factor can be thought of as a metric of the complexity of the topology of the inheritance hierarchy.On a data set of~35 hierarchies totaling some~64 thousand types, our dispatching data structure, based on a novel type slicing technique, exhibits very significant improvements over previous dispatching techniques, not only in terms of the time for creating the underlying data structure, but also in terms of total space used.The cost is in the dispatching time, which is no longer constant, but doubly logarithmic in the number of types. Conversely, by using a simple binary search, dispatching time is logarithmic in the number of different implementations. In practice dispatching uses one indirect branch and, on average, only~2.5 binary branches.Our results also have applications to the space-efficient implementation of the more general problem of dispatching multi-methods.A by-product of our type slicing technique is an incremental algorithm for constant-time subtyping tests with favorable memory requirements. (The incremental version of the subtyping problem is to maintain the subtyping data structure in presence of additions of types to the inheritance hierarchy.)


european conference on object-oriented programming | 2003

Two-Dimensional Bi-directional Object Layout

Yoav Zibin; Joseph Gil

C++ object layout schemes rely on (sometimes numerous) compiler generated fields. We describe a new language-independent object layout scheme, which is space optimal, i.e., objects are contiguous, and contain no compiler generated fields other than a single type identifier. As in C++ and other multiple inheritance languages such as Cecil and Dylan, the new scheme sometimes requires extra levels of indirection to access some of the fields. Using a data set of 28 hierarchies, totaling almost 50,000 types, we show that the new scheme improves field access efficiency over standard implementations, and competes favorably with (the non-space optimal) highly optimized C++ specific implementations. The benchmark includes a new analytical model for computing the frequency of indirections in a sequence of field access operations. Our layout scheme relies on whole-program analysis, which requires about 10 micro-seconds per type on a contemporary architecture (Pentium III, 900Mhz, 256MB machine), even in very large hierarchies.


international symposium on distributed computing | 2003

Condition-Based Consensus in Synchronous Systems

Yoav Zibin

The condition-based approach for solving problems in distributed systems consists of identifying sets of input vectors, called conditions, for which it is possible to design more efficient protocols. Recent work suggested using the condition based approach in asynchronous systems suffering from crashes, for solving various agreement problems [5,9,1,4,6]. This paper designs a fast condition-based consensus protocol for synchronous systems.


symposium on principles of programming languages | 2003

Efficient algorithms for isomorphisms of simple types

Yoav Zibin; Joseph Gil; Jeffrey Considine

The <i>first order isomorphism problem</i> is to decide whether two non-recursive types using product- and function-type constructors, are isomorphic under the axioms of commutative and associative products, and currying and distributivity of functions over products. We show that this problem can be solved in <i>O</i>(<i>n</i> log<sup>2</sup> <i>n</i>) time and <i>O</i>(<i>n</i>) space, where is <i>n</i> the input size. This result improves upon the <i>O</i>(<i>n</i> log<sup>2</sup> <i>n</i>) time and <i>O</i>(<i>n</i><sup>2</sup>) space bounds of the best previous algorithm. We also describe an <i>O</i>(<i>n</i>) time algorithm for the <i>linear isomorphism problem</i>, which does not include the distributive axiom, whereby improving upon the <i>O</i>(<i>n</i> log <i>n</i>) time of the best previous algorithm for this problem.


symposium on principles of programming languages | 2003

Incremental algorithms for dispatching in dynamically typed languages

Yoav Zibin; Joseph Gil

A fundamental problem in the implementation of object-oriented languages is that of a frugal <i>dispatching data structure</i>, i.e., support for quick response to dispatching queries combined with compact representation of the type hierarchy and the method families. Previous theoretical algorithms tend to be impractical due to their complexity and large hidden constant. In contrast, successful practical heuristics, including Vitek and Horspools <i>compact dispatch tables</i> (CT) [16] designed for dynamically typed languages, lack theoretical support. In subjecting CT to theoretical analysis, we are not only able to improve and generalize it, but also provide the first non-trivial bounds on the performance of such a heuristic.Let <i>n</i>,<i>m</i><i>l</i> denote the total number of types, messages, and different method implementations, respectively. Then, the dispatching matrix, whose size is<i>nm</i>, can be compressed by a factor of at most ι ≡ (<i>nm</i>)/<i>l</i>. Our main variant to CT achieves a compression factor of ½ √ι. More generally, we describe a sequence of algorithms CT<inf>1</inf>, CT<inf>2</inf>, CT<inf>3</inf>,..., where CT<inf><i>d</i></inf> achieves compression by a factor of (at least) <sup>1</sup>over<inf><i>d</i></inf>ι<sup>1—1/<i>d</i></sup>, while using <i>d</i> memory dereferencing operations during dispatch. This tradeoff represents the first bounds on the compression ratio of constant-time dispatching algorithms.A generalization of these algorithms to a <i>multiple-inheritance</i> setting, increases the space by a factor of κ<sup>1-1/<i>d</i></sup>, where κ is a metric of the complexity of the topology of the inheritance hierarchy, which (as indicated by our measurements) is typically small. The most important generalization is an <i>incremental</i> variant of the CT<inf><i>d</i></inf> scheme for a single-inheritance setting. This variant uses at most twice the space of CT<inf><i>d</i></inf>, and its time of inserting a new type into the hierarchy is optimal. We therefore obtain algorithms for efficient management of dispatching in dynamic-typing, dynamic-loading languages, such as <sc>Smalltalk</sc> and even the <sc>Java</sc> invokeinterface instruction.


ACM Transactions on Programming Languages and Systems | 2007

Efficient dynamic dispatching with type slicing

Joseph Gil; Yoav Zibin

A fundamental problem in the implementation of object-oriented languages is that of a frugal implementation of dynamic dispatching, that is, a small footprint data structure that supports quick response to runtime dispatching queries of the following format: which method should be executed in response to a certain message sent to a given object. Previous theoretical algorithms for this problem tend to be impractical due to their conceptual complexity and large hidden constants. In contrast, successful practical heuristics lack theoretical support. The contribution of this article is in a novel type slicing technique, which results in two dispatching schemes: TS and CTd. We make the case for these schemes both practically and theoretically. The empirical findings on a corpus of 35 hierarchies totaling some 64 thousand types from eight different languages, demonstrate improvement over previous results in terms of the space required for the representation, and the time required for computing it. The theoretical analysis is with respect to ι, the best possible compression factor of the dispatching matrix. The results are expressed as a function of a parameter κ, which can be thought of as a metric of the complexity of the topology of a multiple inheritance hierarchy. In single inheritance hierarchies κ = 1, but although κ can be in the order of the size of the hierarchy, it is typically a small constant in actual use of inheritance; in our corpus, the median value of κ is 5, while its average is 6.4. The TS scheme generalizes the famous interval containment technique to multiple inheritance. TS achieves a compression factor of ι/κ, that is, our generalization comes with an increase to the space requirement by a small factor of κ. The pay is in the dispatching time, which is no longer constant as in a naive matrix implementation, but logarithmic in the number of different method implementations. In practice, dispatching uses one indirect branch and, on average, only 2.5 binary branches. The CT schemes are a sequence of algorithms CT1, CT2, CT3, …, where CTd uses d memory dereferencing operations during dispatch, and achieves a compression factor of 1/dι1−1/d in a single inheritance setting. A generalization of these algorithms to a multiple inheritance setting, increases the space by a factor of (2κ)1−1/d. This trade-off represents the first bounds on the compression ratio of constant-time dispatching algorithms. We also present an incremental variant of the CTd suited for languages such as Java.


ACM Transactions on Programming Languages and Systems | 2008

Two-dimensional bidirectional object layout

Joseph Gil; William Pugh; Grant E. Weddell; Yoav Zibin

Object layout schemes used in C++ and other languages rely on (sometimes numerous) compiler generated fields. We describe a language-independent object layout scheme, which is space optimal, that is, objects are contiguous, and contain no compiler generated fields other than a single type identifier. As in C++ and other multiple inheritance languages such as CECIL and DYLAN, the new scheme sometimes requires extra levels of indirection to access some of the fields. Using a data set of 28 hierarchies, totaling almost 50,000 types, we show that this scheme improves field access efficiency over standard implementations, and competes favorably with (the non-space-optimal) highly optimized C++ specific implementations. The benchmark includes an analytical model for computing the frequency of indirections in a sequence of field access operations. Our layout scheme relies on whole-program analysis, which requires about 10 microseconds per type on a contemporary architecture (Pentium III, 900Mhz, 256MB machine), even in very large hierarchies. We also present a layout scheme for separate compilation using the user-annotation of virtual inheritance edge that is used in C++.


Mathematical Structures in Computer Science | 2007

Randomised algorithms for isomorphisms of simple types

Joseph Gil; Yoav Zibin

We give the first linear time (randomised) algorithm for the first order isomorphism problem, that is, the isomorphism of non-recursive types involving product-and function-type constructors, under the axioms of commutativity and associativity of products, currying and distributivity of functions over products. This problem can also be thought of as the problem of formal equality-testing of multi-variate expressions involving only multiplications and exponentiation. Previous work gave a deterministic O(n log2n) time and O(n) space algorithm for the problem (n being the input size). Our specific contribution includes two randomised algorithms for the problem: (i) an O(n) time Monte Carlo algorithm (that is, with a small probability it may decide erroneously that the two types are isomorphic), and (ii)an O(n log n) expected time and O(n) space Las Vegas algorithm (that is, with a small probability it may execute long). The algorithms rely on a preprocessing stage, which computes the sequence of the first n primes in O(n log n/log log n) time and space.


Archive | 2002

Method of encoding a dataset

Yoav Zibin; Joseph Gil

Collaboration


Dive into the Yoav Zibin's collaboration.

Top Co-Authors

Avatar

Joseph Gil

Technion – Israel Institute of Technology

View shared research outputs
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Researchain Logo
Decentralizing Knowledge