blob: 787bd058cae40b29d7ca36589b8f0791692876ea (
plain) (
tree)
|
|
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>Dotty</title>
<link
rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css"
integrity="sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi"
crossorigin="anonymous"
>
<link
rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css"
>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link
rel="stylesheet"
href="./css/dottydoc.css"
>
<link
rel="stylesheet"
href="./css/color-brewer.css"
>
<link
rel="stylesheet"
href="./css/animate.css"
>
<link
rel="stylesheet"
href="./css/default.css"
>
</head>
<body>
<div id="content">
<div class="page red exactly-one-page">
<div id="header">
<nav class="nav nav-pills">
<li class="nav-item">
<a class="nav-link" href="#why-dotty">
FAQ
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="./blog/index.html">
Blog
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="./docs/index.html">
Docs
</a>
</li>
<!--
<li class="nav-item">
<a class="nav-link" href="#build-status">
Community Projects
</a>
</li>
-->
<li class="nav-item">
<a class="nav-link" href="https://github.com/lampepfl/dotty">
<img id="github-logo" src="./images/github-logo.svg" />
</a>
</li>
</nav>
</div>
<div id="mobile-header">
<nav class="navbar navbar-light">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsed-header" aria-controls="collapsed-header" aria-expanded="false" aria-label="Toggle navigation">
☰
</button>
<div class="collapse" id="collapsed-header">
<div class="bg-inverse p-a-1">
<ul>
<li class="nav-item">
<a class="nav-link" href="#why-dotty">
FAQ
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="./blog">
Blog
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#getting-started">
Getting Started
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#build-status">
Community Projects
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://github.com/lampepfl/dotty/wiki">
Wiki
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://github.com/lampepfl/dotty">
<img id="github-logo" src="./images/github-logo.svg" />
</a>
</li>
</ul>
</div>
</div>
</nav>
</div>
<div class="scala-logo-container">
<p><img src="./images/scala-logo.svg" alt="image" /></p>
<div class="centered-subtitle">
<h1 id="dotty">Dotty</h1>
<p>A next generation compiler for Scala</p>
<a href="#why-dotty">
<i id="scroll-down-arrow" class="animated infinite pulse material-icons">
expand_more
</i>
</a>
</div>
</div>
</div>
<div class="page blue">
<div class="centered questions">
<h1 id="why-dotty">Why Dotty?</h1>
<p>
Dotty is a platform to try out new language concepts and compiler
technologies for Scala. The focus is mainly on simplification. We
remove extraneous syntax (e.g. no XML literals), and try to boil
down Scala’s types into a smaller set of more fundamental
constructors. The theory behind these constructors is researched in
<a href="https://infoscience.epfl.ch/record/215280">DOT</a>, a
calculus for dependent object types.
</p>
<h1 id="is-it-the-future-scala">Is it the future Scala?</h1>
<div class="centered-text">
<p>Yes, it will be - eventually.</p>
</div>
<h1 id="can-i-use-it">Can I use it?</h1>
<div class="centered-text">
<p>
<a href="#getting-started">You can!</a> But it currently comes with
no guarantees of stability.
</p>
</div>
<h1 id="is-there-scala-2-interop">Is there Scala 2 interop?</h1>
<div class="centered-text">
<p>
Dotty currently interops with libraries compiled with Scala
2.11 - but not 2.12
</p>
</div>
<h1 id="how-do-i-migrate-my-code-to-dotty">How do I migrate my code to Dotty?</h1>
<p>
An automated rewriting tool is planned for Dotty, more on this to come.
Scala 2 sources can be compiled to some degree by issuing:
</p>
<pre class="sourceCode bright"><code>./bin/dotc -language:Scala2 file.scala</code></pre>
<p>when compiling your program.</p>
<h1 id="whos-working-on-it">Who’s working on it?</h1>
<div class="contributors">
<div class="contributors-cell">
<div class="contributor">
<a href="http://github.com/odersky">
<img src="./images/martin.jpg">
</a>
Martin Odersky
</div>
<div class="contributor">
<a href="http://www.d-d.me">
<img src="./images/petrashko.png">
</a>
Dmitry Petrashko
</div>
<div class="contributor">
<a href="http://guillaume.martres.me/">
<img src="./images/smarter.jpg">
</a>
Guillaume Martres
</div>
</div>
<div class="contributors-cell">
<div class="contributor">
<a href="http://fengy.me/">
<img src="./images/fengyun.png">
</a>
Liu Fengyun
</div>
<div class="contributor">
<a href="https://github.com/felixmulder">
<img src="./images/felix.jpeg">
</a>
Felix Mulder
</div>
<div class="contributor">
<a href="https://github.com/nicolasstucki">
<img src="./images/nico.png">
</a>
Nicolas Stucki
</div>
</div>
<div class="contributors-cell">
<div class="contributor">
<a href="http://github.com/OlivierBlanvillain">
<img src="./images/olivier.jpeg">
</a>
Olivier Blanvillain
</div>
</div>
</div>
<div class="centered-text">
<p>
And a long line of
<a href="https://github.com/lampepfl/dotty/graphs/contributors">
contributors!
</a>
</p>
</div>
</div>
</div>
<div class="page teal">
<div class="centered questions">
<h1 id="so-features">So, features?</h1>
<div class="centered-table">
<table>
<colgroup>
<col width="82%" />
<col width="17%" />
</colgroup>
<tbody>
<tr class="odd">
<td>Union, intersection and <a href="http://docs.scala-lang.org/sips/pending/42.type.html">literal singleton types</a></td>
<td>Implemented</td>
</tr>
<tr class="even">
<td>Fast compilation (phase fusion)</td>
<td>Implemented</td>
</tr>
<tr class="odd">
<td><a href="http://docs.scala-lang.org/sips/pending/trait-parameters.html">Trait parameters</a></td>
<td>Implemented</td>
</tr>
<tr class="even">
<td><a href="https://github.com/scala/scala.github.com/pull/491">@@static methods and fields</a></td>
<td>Implemented</td>
</tr>
<tr class="odd">
<td>Improved REPL with colors</td>
<td>Implemented</td>
</tr>
<tr class="even">
<td>Sbt incremental build</td>
<td>Implemented</td>
</tr>
<tr class="odd">
<td>Non-blocking lazy vals</td>
<td>Implemented</td>
</tr>
<tr class="even">
<td>Option-less pattern matching (based on <a href="https://github.com/scala/scala/pull/2848">name-based patmat</a>)</td>
<td>Implemented</td>
</tr>
<tr class="odd">
<td>Function arity adaptation</td>
<td>Implemented</td>
</tr>
<tr class="even">
<td>Multiversal equality</td>
<td>Implemented</td>
</tr>
<tr class="odd">
<td>Exhaustivity checks in pattern matching</td>
<td>Implemented</td>
</tr>
<tr class="even">
<td>Non-boxed arrays of value classes</td>
<td>In progress</td>
</tr>
<tr class="odd">
<td>Working contravariant implicits</td>
<td>In progress</td>
</tr>
<tr class="even">
<td><a href="https://github.com/dotty-linker/dotty">Auto-Specialization</a></td>
<td>In progress</td>
</tr>
<tr class="odd">
<td><a href="https://github.com/dotty-linker/dotty">Whole program optimizer</a></td>
<td>In progress</td>
</tr>
<tr class="even">
<td>HList & HMaps/Record types</td>
<td>In progress</td>
</tr>
<tr class="odd">
<td></td>
<td></td>
</tr>
<tr class="even">
<td>Implicit functions</td>
<td>Considered</td>
</tr>
<tr class="odd">
<td>Effects</td>
<td>Considered</td>
</tr>
<tr class="even">
<td>Auto-completion in repl</td>
<td>Considered</td>
</tr>
<tr class="odd">
<td>Spec Option-less pattern matching</td>
<td>Considered</td>
</tr>
</tbody>
</table>
</div>
<h1 id="talks-on-dotty">Talks on Dotty?</h1>
<ul>
<li><a href="https://www.youtube.com/watch?v=WxyyJyB_Ssc">Compilers are Databases</a> by Martin Odersky (<a href="http://www.slideshare.net/Odersky/compilers-are-databases">slides</a>)</li>
<li><a href="https://www.youtube.com/watch?v=aftdOFuVU1o">Exploring the future of Scala</a> by Dmitry Petrashko (<a href="https://d-d.me/scalaworld2015/#/">slides</a>)</li>
</ul>
<h1 id="i-have-more-questions">I have more questions!</h1>
<div class="centered-text">
<p>That’s great! We have more details on the <a href="./docs">docs</a> and please join our <a href="https://gitter.im/lampepfl/dotty">Gitter channel</a>!</p>
</div>
</div>
</div>
<div class="page white">
<div class="centered" style="padding-top: 32px">
<h1 id="getting-started">Getting Started</h1>
<p>
Using Dotty to compile your project is now pretty simple. Create the
following structure:
</p>
<pre class="sourceCode bordered">
<code>.
├── build.sbt
├── project
│ ├── build.properties
│ └── plugins.sbt
└── src</code></pre>
<h2 id="build.sbt">build.sbt</h2>
<pre class="sourceCode bordered"><code>name := "application"
version := "0.1"
enablePlugins(DottyPlugin)</code></pre>
<h2 id="build.properties">build.properties</h2>
<pre class="sourceCode bordered"><code>sbt.version=0.13.11</code></pre>
<h2 id="plugins.sbt">plugins.sbt</h2>
<pre class="sourceCode bordered"><code>addSbtPlugin("com.felixmulder" % "sbt-dotty" % "0.1.7")</code></pre>
<p>
This plugin is based on the
<a href="https://github.com/smarter/dotty-example-project">
dotty-example-project
</a>, but let’s you skip building dotty from scratch.
</p>
</div>
</div>
</div>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"
integrity="sha384-3ceskX3iaEnIogmQchP8opvBy3Mi7Ce34nWjpBIwVTHfGYWQS9jwHDVRnpKKHJg7"
crossorigin="anonymous"
></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.7/js/tether.min.js"
integrity="sha384-XTs3FgkjiBgo8qjEjBk0tGmf3wPrWtA6coPfQDfFEY8AnYJwjalXCiosYRBIBZX8"
crossorigin="anonymous"
></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js"
integrity="sha384-BLiI7JTZm+JWlgKa0M0kGRpJbF2J8q+qreVrKBC47e3K6BW78kGLrCkeRX6I9RoK"
crossorigin="anonymous"
></script>
<script src="./js/highlight.pack.js"></script>
<script src="./js/elasticlunr.min.js"></script>
<script src="./js/search.js"></script>
<script src="./js/scrollreveal.min.js"></script>
<script src="./js/index.js"></script>
<script>
$(document).ready(function() {
$('pre code').each(function(i, block) {
hljs.highlightBlock(block);
});
});
</script>
</body>
</html>
|