-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgsoc21wiki.html
161 lines (145 loc) · 9.39 KB
/
gsoc21wiki.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>simC - GSoC'21 Projects</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link href="https://fonts.googleapis.com/css?family=Nunito+Sans:300,400,600,700,800,900" rel="stylesheet">
<link rel="stylesheet" href="global.css">
<link rel="stylesheet" href="doc.css">
</head>
<body>
<div class="doc__bg"></div>
<nav class="header">
<h1 class="logo">simC <span class="logo__thin">Docs</span></h1>
<ul class="menu">
<div class="menu__item toggle"><span></span></div>
<li class="menu__item"><a href="index.html" class="link link--dark"><i class="fa fa-home"></i> Home</a></li>
<li class="menu__item"><a href="doc.html" class="link link--dark"><i class="fa fa-book"></i> Documentation</a></li>
<li class="menu__item"><a href="https://github.com/cimplec/sim-c" class="link link--dark"><i class="fa fa-github"></i> Github</a></li>
</ul>
</nav>
<div class="wrapper">
<aside class="doc__nav">
<ul>
<li class="js-btn selected">Project 1</li>
<li class="js-btn">Project 2</li>
<li class="js-btn">Propose your own project idea</li>
</ul>
</aside>
<article class="doc__content">
<h2>GSoC'21 Project List</h2>
<p>Welcome to the projects page for GSoC 2021.</p>
<p><strong>Note</strong>:- It is not mandatory for you to choose a project from this list, you are free to
propose your project idea too.</p>
<section class="js-section">
<h3 class="section__title">Some Important Links</h3>
<p style="text-align: justify;">
<ol>
<li><a href="https://cimplec/github.io/docs">Official documentation</a></li>
<li><a href="https://github.com/cimplec/sim-c/wiki/">simC wiki</a></li>
<li><a href="https://discord.gg/qcqhG4hC8Z">Official discord server</a></li>
</ol>
</p>
</section>
<!-- simC Web Compiler -->
<section class="js-section">
<h3 class="section__title">Project 1: simC Web Compiler</h3>
<p style="text-align: justify;">
You might have used (or heard of) online compilers/interpreters like <a href="https://repl.it">repl.it</a> and <a href="https://www.onlinegdb.com">online gdb</a>.
These provide compilers or interpreters for various programming languages as a web application,
so that users do not have to install anything on their local machine.
<br>Though installing simC is quite easy - <strong>pip install simc</strong>, but it requires one to have python installed in their system.
This is the primary motivation to create a web compiler for simC.
</p>
<h4 class="section__title">Existing Solution</h4>
<p style="text-align: justify;">
We have a very simple web compiler for simC ready and hosted in Heroku. <br>
<ul>
<li><a href="https://github.com/cimplec/text-editor">Web Compiler source code</a></li>
<li><a href="https://simc-editor.herokuapp.com">Hosted Web Compiler</a></li>
</ul>
</p>
<p style="text-align: justify;">
This basic web app uses HTML, CSS, JS and jQuery as front end and Flask as backend. This simply takes the user's source code from a
<strong><textarea></strong> element and this code is passed using an AJAX request to the Flask backend, which runs the simC compiler and compiles
the code, and returns the C code in the AJAX request as a response.
</p>
<h4 class="section__title">What we are looking for in the new version?</h4>
<p style="text-align: justify;">
<ol>
<li>A better front end (based on Vue.js or React.js - you can choose either technology, whichever you are most comfortable with).</li>
<li>Replace Flask backend with a Node.js backend.</li>
<li>Introduce MongoDB as a database.</li>
<li>Allow users to create accounts and share their codes with one another.</li>
<li>Save user's code in AWS S3 (URI can be saved in DB), so that he/she can come back to their old code.</li>
<li>Create an admin portal, that shows a simple dashboard of weekly user signup and code compiler.
This will also contain information about the current version of simC installed in the web compiler,
and option to upgrade to later versions of simC.</li>
</ol>
</p>
<p style="text-align: justify;">
<strong>Note: You are free to add more ideas to this list if you believe it can increase the usability of the web compiler.</strong> <br><br>
<strong>Mentors: </strong><a href="https://github.com/dhairyaj">Dhairya Jain</a>, <a href="https://github.com/Farhad1234">Farhad Bharucha</a>
</p>
</section><hr>
<!-- simC Optimizer and Garbage Collector -->
<section class="js-section">
<h3 class="section__title">Project 2: simC Optimizer and Garbage Collector</h3>
<p style="text-align: justify;">
If you have a high-level idea of what simC is (if you don't have, then I would suggest getting to know simC a bit in the wiki),
you might be wondering where exactly does an optimizer fit in. simC does not run the user's code, then what might be the use of this optimizer?
Is this referring to the optimization of simC compiler's code?<br>
Well, this optimizer is for the code generation stage - the compilation to C code. The code that is generated currently is simply what the user writes,
and that will run pretty fast as the final code is C code, but we believe that generating more optimized code will result in even faster C code.
</p>
<h4 class="section__title">What optimizations can be done?</h4>
<p style="text-align: justify;">
<ol>
<li>Eliminating functions, variables, structures that are defined but never used.</li>
<li>Unrolling loops</li>
<li>Evaluating constant expressions ahead of compilation.</li>
<li>Making function inline if the number of calls is lower (only one or two calls to the function).</li>
</ol>
</p>
<h4 class="section__title">Resources</h4>
<p style="text-align: justify;">
These are some resources to read more about the code optimization problem in compilers:- <br>
<ol>
<li><a href="https://www.geeksforgeeks.org/code-optimization-in-compiler-design/">GeeksForGeeks - Code Optimization in Compiler Design</a></li>
<li><a href="https://www.tutorialspoint.com/compiler_design/compiler_design_code_optimization.htm">TutorialsPoint - Compiler Design - Code Optimization</a></li>
<li><a href="https://www.sciencedirect.com/topics/computer-science/code-optimization">Paper - Code Optimization</a></li>
</ol>
</p>
<p style="text-align: justify;">
<strong>Note: You are free to add more ideas to this list if you believe it can potentially speed up the resulting C code.</strong> <br><br>
<strong>Mentors: </strong><a href="https://github.com/ShashankPandey152">Shashank Pandey</a>, <a href="https://github.com/frankhart2018">Siddhartha Dhar Choudhury</a>
</p>
</section><hr>
<!-- Propose your own project idea -->
<section class="js-section">
<h3 class="section__title">Propose your own project idea</h3>
<p style="text-align: justify;">
We would also like to state that choosing one out of these two projects is not mandatory and we welcome your project ideas.
The following points are required in your project idea:-
</p>
<p style="text-align: justify;">
<ol>
<li>Overview of the idea.</li>
<li>How does it improve simC?</li>
<li>How do you plan to implement the project?</li>
<li>Tech stack.</li>
<li>Any resource that might help us to understand the intricacies of the project idea.</li>
</ol>
</p>
</section>
</article>
</div>
<footer class="footer">Made with ♥ for C developers.</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script src="main.js"></script>
</body>
</html>