Skip to content
This repository has been archived by the owner on Oct 20, 2019. It is now read-only.
Yao Yue edited this page Feb 6, 2018 · 8 revisions

Welcome to the ECTL Research Foundations Library wiki! Emerging Computing Technology Laboratory Research Foundations library is a library designed in Mordern C++ to support research on EDA and designs.

Philosophies

Correctness is prime concern.

For a very long time, the research community lacks easy tools accelerate the research process. Since the prime purpose of this library is to support EDA research, correctness is our prime concern. A research that is not reproducible is nonsense. We aim to use modern language constructs to facilitate correctness. This includes:

  • Use type systems to differentiate different representations of the same network, make sure that algorithms are run only on the correct representations. Make clear the cost related to transforming different representations.

  • Use design patterns to facilitate reuse and up-to-date attributes.

  • Include as much of compile-time checks as possible. Use const if possible, make sure the algorithm does not accidentally change anything. Help detect errors as soon as possible.

Expressiveness is essential.

The second goal of this library to utilize modern to tools to make the user code readable. We believe a research product easily understandable by most is more likely to be accepted. It will also help develop further on others' work. We believe expressiveness is important because we would like the researcher to focus on expressing their ideas, other than spend tons of tons of hours to fight pointers and other issues. We also this library will help researchers to quickly prototype their ideas, and help newcomers to focus on the bigger pictures other than trying to struggle with a large code base.

Performance as an option.

Premature optimization is the root of all evils - Donald Knuth

We strongly believe in this very famous quote. Our library does not aim for extreme performance. Instead, whenever expressiveness or ease of use is in conflict with better performance (which is very often), our design philosophy almost always take the expressiveness side. However, we do care about performance. We choose to design the library in a way that you are almost always able to replace performance critical part with your own code. Essentially, we believe performance is a right that you can exercise on demand.

Development Key Concepts

These are important concepts / design choices for developing this library. Users are not required to understand this section. However in order to develop this library, one must be crystal clear with these core design choices.

Internals

This place indexes files that explain the internal workings of the library. This is mainly for development purposes. It aims to help developers to extend the functionality of the library, help testers to write tests for the library it selves, and for Instructors to check the development progress. It also documents some of the thoughts and design choices of the library developer.