<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://tech.uvoo.io/index.php?action=history&amp;feed=atom&amp;title=Project-langauges</id>
	<title>Project-langauges - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://tech.uvoo.io/index.php?action=history&amp;feed=atom&amp;title=Project-langauges"/>
	<link rel="alternate" type="text/html" href="https://tech.uvoo.io/index.php?title=Project-langauges&amp;action=history"/>
	<updated>2026-04-05T17:56:36Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>https://tech.uvoo.io/index.php?title=Project-langauges&amp;diff=102&amp;oldid=prev</id>
		<title>imported&gt;Justin: Created page with &quot;# The Decision  Updated: 1/10/19  - C or C++ with no external dependencies for low level tools, such as data processing, etc. - TypeScript for high level operations and the us...&quot;</title>
		<link rel="alternate" type="text/html" href="https://tech.uvoo.io/index.php?title=Project-langauges&amp;diff=102&amp;oldid=prev"/>
		<updated>2019-01-14T22:56:01Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;# The Decision  Updated: 1/10/19  - C or C++ with no external dependencies for low level tools, such as data processing, etc. - TypeScript for high level operations and the us...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;# The Decision&lt;br /&gt;
&lt;br /&gt;
Updated: 1/10/19&lt;br /&gt;
&lt;br /&gt;
- C or C++ with no external dependencies for low level tools, such as data processing, etc.&lt;br /&gt;
- TypeScript for high level operations and the user interface.&lt;br /&gt;
&lt;br /&gt;
## Rationale&lt;br /&gt;
&lt;br /&gt;
These are points that we learned from experience working with node, chicken, and C++.&lt;br /&gt;
&lt;br /&gt;
### Why C++?&lt;br /&gt;
- C++ is well integrated with node. You can create packages with C and C++ and the cross platform build system will compile them.&lt;br /&gt;
- It turned out to be a massive pain to maintain multiple interpreters and sets of packages for all three platforms. Portable C and C++ code &amp;quot;just works&amp;quot;. The effort spent in maintaining TypeScript makes it worth it to use it more places.&lt;br /&gt;
&lt;br /&gt;
### Why Not Chicken&lt;br /&gt;
- We thought using chicken for tools would be a good idea, but what we didn't know at the time was that it offers benefits remarkably similar to JavaScript. Scheme is undoubtedly a better language, but the benefits of mixing both are marginal.&lt;br /&gt;
- The lack of static typing in JavaScript turned out to be a problem when our project got too large. TypeScript has made our project much more robust and easy to change. Chicken would not have helped here.&lt;br /&gt;
- It increased the file size by about 15 mb for a HelloWorld.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
## The Original Discussion&lt;br /&gt;
&lt;br /&gt;
## Language Requirements&lt;br /&gt;
- ability to create small unix friendly programs which can work with other unix tools.&lt;br /&gt;
- good platform support for mac, linux, and windows. (filesystem, http, etc)&lt;br /&gt;
- Alpheus and I want to work with it.&lt;br /&gt;
- Easy to distribute with our program. In other words, it does not require installation.&lt;br /&gt;
- nice if we could use it server side (JS and node is always a fallback)&lt;br /&gt;
- ??? Must be able to distribute binaries not original source code&lt;br /&gt;
&lt;br /&gt;
### Other considerations&lt;br /&gt;
As Tom has pointed out we don't want a cornucopia of languages. This is difficult to maintain and hard to share information for. &lt;br /&gt;
However, Alpheus are not afraid of switching between a few, especially when they are the right tool for the job.&lt;br /&gt;
&lt;br /&gt;
# Discussion&lt;br /&gt;
&lt;br /&gt;
## 1.Go&lt;br /&gt;
Go compiles to small standalone binaries. It has fast startup and execution times making it a good choice for unix tools. &lt;br /&gt;
However of these languages we are considering, We don't know a ton about Go. There are small complaints we have with its design,&lt;br /&gt;
but it will surely get the job done. It is both a server side and client side langauge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
## 2.Scheme&lt;br /&gt;
Chicken scheme compiles to small standalone binaries. It has fast startup and execution times making it a good choice for unix tools.&lt;br /&gt;
Alpheus and I both love Lisps. It has good platform and library support through the egg package system. &lt;br /&gt;
It is both a server side and client side langauge.&lt;br /&gt;
&lt;br /&gt;
Alpheus wanted to add that one anecdote that makes Scheme in general (and probably Chicken Scheme in&lt;br /&gt;
particular) is an anecdote from someone on Reddit (who, incidentally, couldn't get into too much detail&lt;br /&gt;
about his project for IP reasons) who explained that they were initially doing their development in two&lt;br /&gt;
stages:  using Python for prototyping, and C for the final product, which needed to work on a&lt;br /&gt;
microcontroller.  They were running into certain difficulty with this tool chain, and decided to give&lt;br /&gt;
Scheme a whirl -- it took three days to convert the Python code to Scheme, and another three days to&lt;br /&gt;
figure out how to compile it to C and get it working with their microcontroller -- but when they were&lt;br /&gt;
finished, they had something that was just as easy to prototype in as Python, but was running almost&lt;br /&gt;
as fast as what they had in C.&lt;br /&gt;
&lt;br /&gt;
Alpheus finds this combination of flexibility and speed particularly compelling.&lt;br /&gt;
&lt;br /&gt;
## Rust&lt;br /&gt;
Don't know much about it, complex type systems.&lt;br /&gt;
&lt;br /&gt;
## D&lt;br /&gt;
Don't know much about it.&lt;br /&gt;
&lt;br /&gt;
## ~~C++~~&lt;br /&gt;
Alpheus hates it.  He also hates Perl and PHP (for arguably similar reasons...)&lt;br /&gt;
&lt;br /&gt;
## ~~C~~&lt;br /&gt;
Cross platform support will be tedious and error prone. Potentially a fallback.&lt;br /&gt;
&lt;br /&gt;
## ~~Haskell~~ &lt;br /&gt;
Interesting, but an imperative style is probably more appropriate for the package management. Bad windows support.&lt;br /&gt;
&lt;br /&gt;
## ~~Swift/Objective-C~~ &lt;br /&gt;
Cross platform langauge support, but bad cross platform library support.&lt;br /&gt;
&lt;br /&gt;
## JVM Langauges&lt;br /&gt;
We don't love them. They have also have distribution and start up problems, but it is compiled and well supported. It could get the job done though.&lt;br /&gt;
&lt;br /&gt;
Alpheus prefers Scala. Justin would prefer Clojure. We could use Java too.&lt;br /&gt;
&lt;br /&gt;
## Node&lt;br /&gt;
Node is already included with Electron. (It is in a library and we may have to make an executable) &lt;br /&gt;
So it would be easy to write Javascript. However, Node has very slow startup times due to the large number of pacakges it must JIT compile. &lt;br /&gt;
This makes it somewhat of a pain to use as a unix tool. The actual execution time is pretty fast. According to some simple benchmarks it&lt;br /&gt;
is several times faster than CPython and slightly faster the PyPy. An example of these characteristics can be found in Gulp. &lt;br /&gt;
The startup time for each command is close to a second, but the actual execution time is small.&lt;br /&gt;
&lt;br /&gt;
Also, apparently the person who created Node generally prefers Go.&lt;br /&gt;
&lt;br /&gt;
### A note on Transpiling to JS:&lt;br /&gt;
We aren't bothered by JS enough to make transpiling from a slightly different syntax (python, typescript, etc) worth it. &lt;br /&gt;
If we use Node we will write JS. (However, ParenScript is the most compelling since it actually opens up more powerful structures.)&lt;br /&gt;
&lt;br /&gt;
## ~~Python~~&lt;br /&gt;
Alpheus and I both like Python; however, it would be a pain to distribute. We would have to include the entire Python runtime in the app,&lt;br /&gt;
and keep it up to date alongside electron. Additionally distribution would include raw .py files. &lt;br /&gt;
&lt;br /&gt;
## ~~Rholang~~&lt;br /&gt;
&lt;br /&gt;
This would be a fantastic language to use, except for the fact that it is very immature, and doesn't yet&lt;br /&gt;
have the features we need to get things to work.  It annoys Alpheus deeply that we don't yet have a&lt;br /&gt;
&amp;quot;Pull-From-Future&amp;quot; Compiler that can get a fully-featured working Rholang compiler for us to use for&lt;br /&gt;
this project.&lt;/div&gt;</summary>
		<author><name>imported&gt;Justin</name></author>
	</entry>
</feed>