Skip to content

Commit f46c12b

Browse files
committed
Add Projects/Research pages
- Created writeup for a static Research Page - Removed Menu items under Research and added them as sub-projects on Projects page - Added unique writeups for project summaries in projects.yml - removed menu items from under projects menu - created a projects.md page, to pull project excerpts from projects.yml - linked existing detailed project pages within projects.yml - added a step-by-step tutorial in readme for future site contributors to be able to add more projects to the website (this tutorial section will grow as the site revamp continues) - simplified Projects and Research pages based on Review Comments
1 parent 5f1540d commit f46c12b

File tree

6 files changed

+308
-2
lines changed

6 files changed

+308
-2
lines changed

Gemfile.lock

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
GEM
2+
remote: https://rubygems.org/
3+
specs:
4+
addressable (2.8.6)
5+
public_suffix (>= 2.0.2, < 6.0)
6+
colorator (1.1.0)
7+
concurrent-ruby (1.2.3)
8+
em-websocket (0.5.3)
9+
eventmachine (>= 0.12.9)
10+
http_parser.rb (~> 0)
11+
eventmachine (1.2.7-x64-mingw32)
12+
ffi (1.16.3-x64-mingw32)
13+
forwardable-extended (2.6.0)
14+
google-protobuf (3.25.3-x64-mingw32)
15+
http_parser.rb (0.8.0)
16+
i18n (1.14.1)
17+
concurrent-ruby (~> 1.0)
18+
jekyll (4.3.3)
19+
addressable (~> 2.4)
20+
colorator (~> 1.0)
21+
em-websocket (~> 0.5)
22+
i18n (~> 1.0)
23+
jekyll-sass-converter (>= 2.0, < 4.0)
24+
jekyll-watch (~> 2.0)
25+
kramdown (~> 2.3, >= 2.3.1)
26+
kramdown-parser-gfm (~> 1.0)
27+
liquid (~> 4.0)
28+
mercenary (>= 0.3.6, < 0.5)
29+
pathutil (~> 0.9)
30+
rouge (>= 3.0, < 5.0)
31+
safe_yaml (~> 1.0)
32+
terminal-table (>= 1.8, < 4.0)
33+
webrick (~> 1.7)
34+
jekyll-sass-converter (3.0.0)
35+
sass-embedded (~> 1.54)
36+
jekyll-watch (2.2.1)
37+
listen (~> 3.0)
38+
kramdown (2.4.0)
39+
rexml
40+
kramdown-parser-gfm (1.1.0)
41+
kramdown (~> 2.0)
42+
liquid (4.0.4)
43+
listen (3.8.0)
44+
rb-fsevent (~> 0.10, >= 0.10.3)
45+
rb-inotify (~> 0.9, >= 0.9.10)
46+
mercenary (0.4.0)
47+
pathutil (0.16.2)
48+
forwardable-extended (~> 2.6)
49+
public_suffix (5.0.4)
50+
rb-fsevent (0.11.2)
51+
rb-inotify (0.10.1)
52+
ffi (~> 1.0)
53+
rexml (3.2.6)
54+
rouge (4.2.0)
55+
safe_yaml (1.0.5)
56+
sass-embedded (1.63.6-x64-mingw32)
57+
google-protobuf (~> 3.23)
58+
terminal-table (3.0.2)
59+
unicode-display_width (>= 1.1.1, < 3)
60+
unicode-display_width (2.5.0)
61+
webrick (1.8.1)
62+
63+
PLATFORMS
64+
x64-mingw32
65+
66+
DEPENDENCIES
67+
jekyll (>= 3.6.3)
68+
kramdown-parser-gfm
69+
webrick
70+
71+
BUNDLED WITH
72+
2.1.4

README.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,32 @@ docker run --rm -v "$PWD:/srv/jekyll" \
133133
jekyll serve --livereload
134134
```
135135

136+
## Guide to Making Changes to the Website
137+
138+
### Adding a Project to /projects/ directory on the Website
139+
140+
It is possible to
141+
142+
- add a new page with a lot of project details (e.g.,
143+
`\_pages\testproject.md`) and then add the project excerpt to the projects
144+
directory `_data\projects.yml`, or
145+
146+
- you can simply add the project excerpt to the projects directory
147+
`_data\projects.yml` if there aren't enough details available for the project.
148+
149+
Next, use the `link` attribute in the `projects.yml` file to define the link
150+
to the detailed project page (if you created this in the previous step).
151+
152+
The project excerpt should now automatically show up on the '/Projects/' page
153+
along with the link to the detailed project page.
154+
155+
To change the layout of the Projects page itself, you can browse to
156+
`_pages\projects.md` and edit the Liquid code as needed.
157+
158+
> Please note that the Projects page exists in parallel to the Open Projects
159+
> page (`_pages\open_projects.md`), and you should add your project details
160+
> where it makes more sense.
161+
136162

137163
[installation]: https://jekyllrb.com/docs/installation/windows/
138164
[RubyInstaller Downloads]: https://rubyinstaller.org/downloads/

_data/projects.yml

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
- name: "C++ Language Interoperability Layer"
2+
description: |
3+
In the CppInterOp (previously LibInterOp) project, we explore the key aspects
4+
of language interoperability with C++ using an automated binding approach,
5+
focusing on automatic binding to and from Python, but also applicable to other
6+
languages like D and Julia.
7+
8+
category: "Language Interoperability"
9+
link: |
10+
https://compiler-research.org/libinterop/
11+
12+
- name: "Clad - Clang Plugin"
13+
description: |
14+
Clad is a plugin for the Clang compiler that enables automatic differentiation
15+
capabilities for C/C++ codebases. It is a valuable tool for developers seeking
16+
to streamline complex mathematical computations and optimize their codebase
17+
efficiently.
18+
19+
Clad facilitates the generation of derivatives, gradients, Hessians, and
20+
Jacobians (in forward and/or reverse mode), enhancing the efficiency and
21+
versatility of numerical computations.
22+
23+
Clad not only supports partial and higher-order derivatives but also
24+
integrates seamlessly with frameworks like ROOT, providing a comprehensive
25+
solution for automatic differentiation needs in C++ applications.
26+
category: "Automatic Differentiation"
27+
link: |
28+
https://compiler-research.org/clad/
29+
30+
- name: "Cling - C++ Interpreter"
31+
description: |
32+
Cling is an interactive C++ interpreter that operates on top of the Clang and
33+
LLVM libraries, utilizing LLVM's Just-In-Time (JIT) compiler for fast and
34+
optimized compilation processes.
35+
36+
By adopting a read-eval-print-loop (REPL) approach, Cling is helping C++
37+
development evolve by enabling rapid application development without the need
38+
for the traditional edit-compile-run-debug cycle, thus facilitating quick
39+
prototyping and exploration in C++.
40+
41+
By providing support for advanced C++ features like templates, lambdas, and
42+
virtual inheritance, Cling empowers developers in exploratory programming with
43+
interactive, dynamic language interoperability and rapid prototyping.
44+
category: "Interactive C++"
45+
link: |
46+
https://rawgit.com/root-project/cling/master/www/index.html
47+
48+
- name: "Interactive C++ (Cling Use Case)"
49+
description: |
50+
Researchers heavily rely on tools that minimize the "time to insight" to
51+
enhance productivity. However, the escalating data volumes and computational
52+
demands necessitate a constant emphasis on optimizing code performance. This
53+
is where interactive capabilities of tools like Cling are useful, enabling
54+
navigation through a diverse set of programming languages, development tools,
55+
and hardware.
56+
category: "Interactive C++"
57+
link: |
58+
https://compiler-research.org/interactive_cpp
59+
60+
- name: "Incremental Compilation Support in Clang (CaaS) Project"
61+
description: |
62+
Incremental compilation aims to support clients that need to keep a single
63+
compiler instance active across multiple compile requests.
64+
category: "Compiler-As-A-Service"
65+
link: |
66+
https://compiler-research.org/caas/

_includes/header.html

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,27 @@
1212
</a>
1313
</div>
1414
<ul id="navbar-collapse-1" class="nav navbar-nav ml-auto navbar-collapse collapse">
15-
<li class="nav-item dropdown">
15+
<!-- <li class="nav-item dropdown">
1616
<a href="#" class="nav-link dropdown-toggle" id="dropdown02" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Research</a>
1717
<ul class="dropdown-menu" aria-labelledby="dropdown02">
1818
<li class="dropdown-item"> <a class="nav-link" href="/caas">Compiler-As-A-Service</a></li>
1919
<li class="dropdown-item"> <a class="nav-link" href="/interactive_cpp">Incremental C++</a></li>
2020
<li class="dropdown-item"> <a class="nav-link" href="/libinterop">Language Interoperability</a></li>
2121
</ul>
22-
</li>
22+
</li>
2323
<li class="nav-item dropdown">
2424
<a href="#" class="nav-link dropdown-toggle" id="dropdown02" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Projects</a>
2525
<ul class="dropdown-menu" aria-labelledby="dropdown02">
2626
<li class="dropdown-item"> <a class="nav-link" href="https://rawgit.com/root-project/cling/master/www/index.html">Cling</a></li>
2727
<li class="dropdown-item"> <a class="nav-link" href="/clad">Clad</a></li>
2828
<li class="dropdown-item"> <a class="nav-link" href="/vectorautodiff/">Vectorized Automatic Differentiation</a></li>
2929
</ul>
30+
</li>-->
31+
<li class="nav-item">
32+
<a class="nav-link" href="/research">Research</a>
33+
</li>
34+
<li class="nav-item">
35+
<a class="nav-link" href="/projects">Projects</a>
3036
</li>
3137
<li class="nav-item dropdown">
3238
<a href="#" class="nav-link dropdown-toggle" id="dropdown01" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Results</a>

_pages/projects.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
---
2+
title: "Compiler Research Projects"
3+
layout: gridlay
4+
excerpt: "Notable Projects by Compiler Research Group"
5+
sitemap: false
6+
permalink: /projects/
7+
---
8+
9+
Following are some notable projects.
10+
11+
12+
{% for project in site.data.projects %}
13+
14+
<div class="well" style="padding-left: 20px; padding-right: 20px">
15+
16+
**{{ project.name }}**
17+
18+
{{ project.description | markdownify }}
19+
20+
For more details, please browse to this <a href="{{ project.link }}">link to the project</a>
21+
22+
</div>
23+
24+
{% endfor %}
25+

_pages/research.md

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
---
2+
title: "Compiler Research Research Areas"
3+
layout: gridlay
4+
excerpt: "Research"
5+
sitemap: false
6+
permalink: /research/
7+
---
8+
9+
Following are the areas of research that Compiler Research Group is focused on:
10+
11+
### Automatic Differentiation
12+
13+
Automatic Differentiation (AD) is a useful technique in scientific research
14+
fields like machine learning and computational physics. AD enables the
15+
automatic computation of derivatives of functions with high precision and
16+
efficiency. A notable implementation of AD is the [Clad plugin for the Clang]
17+
compiler. This integration not only simplifies the process of differentiation
18+
but also enhances the performance and accuracy of numerical computations in
19+
scientific applications.
20+
21+
In scientific research, where intricate mathematical models are prevalent, the
22+
utilization of AD through tools like the Clad brings a new level of
23+
sophistication and speed to derivative calculations. By leveraging AD within
24+
C++ compilers, researchers can focus more on the scientific aspects of their
25+
work rather than getting bogged down in manual differentiation tasks. This
26+
automation not only accelerates the development process but also ensures that
27+
computations are error-free and consistent.
28+
29+
### Compiler-As-A-Service
30+
31+
[Compiler as a Service (CaaS)] is an evolving technology that redefines the
32+
traditional approach to compilers by providing a service-oriented
33+
architecture. Instead of treating the compiler as a black box, the CaaS
34+
approach helps open up the functionality to make it available as APIs. This
35+
gives developers unprecedented control and insights into the compilation
36+
process, while being able to use lightweight APIs for simpler workflows and
37+
diagnostics, helping create sophisticated applications more efficiently.
38+
39+
Practical applications of CaaS include deeper and interactive program analysis
40+
and conversion from one programming language to another (e.g., C++ <->
41+
Python).
42+
43+
44+
### Incremental C++
45+
46+
Despite its high performance capabilities, C++ not the first programming
47+
language that comes to mind for rapidly developing robust applications, mainly
48+
due to the long edit-compile-run cycles.
49+
50+
Ongoing research in projects such as [Cling], [Clang-REPL], etc. aims to
51+
provide practically usable interactive capabilities to the C++ programming
52+
language. The goal is to enable dynamic interoperability, rapid prototyping,
53+
and exploratory programming, which are essential for data science and other
54+
scientific applications.
55+
56+
Following are some practical applications of a "[C++ Interpreter]," so to speak:
57+
58+
- In Data Science: Interactive probing of data and interfaces, making complex
59+
libraries and data more accessible to users. [^1]
60+
61+
- In CUDA: The Cling CUDA extension brings the workflows of interactive C++ to
62+
GPUs without losing performance and compatibility to existing software. [^1]
63+
64+
- In Exploratory Programming: rapid reproduction of results, which is crucial
65+
during the exploratory phase of a project. [^2]
66+
67+
- In Jupyter Notebooks: Interactive C++ can be integrated with Jupyter
68+
Notebooks, providing a swift prototyping and learning experience for C++ users. [^2]
69+
70+
### Language Interoperability
71+
72+
[Language interoperability] helps programmers get the best of both worlds, with
73+
the ability to work with a high-performance language (e.g., C++), and at the
74+
same time, take advantage of a more interactive one (e.g., Python), while
75+
helping them identify each other's entities (like variables and classes) for
76+
seamless integration.
77+
78+
This interoperability can be achieved by libraries like [CppInterOp], which
79+
expose APIs from compilers like Clang/LLVM in a backward-compatible manner. By
80+
enabling interactive C++ usage through the Compiler-As-A-Service, CppInterOp
81+
simplifies complex tasks such as "language interoperability on the fly".
82+
83+
The practical implications of language interoperability include the growing
84+
need for systems in data science to be able to interoperate with C++
85+
codebases. By providing automatic creation of bindings on demand, tools
86+
like CppInterOp enable Python to interoperate with C++ code dynamically,
87+
instantiate templates, and execute them efficiently. This dynamic approach not
88+
only improves performance but also simplifies code development and debugging
89+
processes, offering a more efficient alternative to static binding methods.
90+
91+
---
92+
Footnotes:
93+
94+
[^1]: [Interactive C++ for Data Science](https://blog.llvm.org/posts/2020-12-21-interactive-cpp-for-data-science/)
95+
96+
[^2]: [Interactive Workflows for C++ with Jupyter](https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92)
97+
98+
99+
[CppInterOp]: https://github.com/compiler-research/CppInterOp/blob/main/README.md
100+
101+
[Clad plugin for the Clang]: https://compiler-research.org/clad/
102+
103+
[Language interoperability]: https://compiler-research.org/libinterop/
104+
105+
[Cling]: https://rawgit.com/root-project/cling/master/www/index.html
106+
107+
[Clang-REPL]: https://clang.llvm.org/docs/ClangRepl.html
108+
109+
[Compiler as a Service (CaaS)]: https://compiler-research.org/caas/
110+
111+
[C++ Interpreter]: https://compiler-research.org/interactive_cpp

0 commit comments

Comments
 (0)