-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
378 lines (215 loc) · 12.1 KB
/
index.html
File metadata and controls
378 lines (215 loc) · 12.1 KB
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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
<!DOCTYPE html>
<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" lang="en"><!--<![endif]-->
<head>
<meta charset="utf-8">
<title>Ocheyedan Blog</title>
<meta name="author" content="Brian Langel and Trevor Smith">
<meta name="description" content="Setting up Kotlin, compiling and running Kotlin code in the IntelliJ IDE plugin is well documented
here,
but running Kotlin code from the command …">
<!-- http://t.co/dKP3o1e -->
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="canonical" href="http://blog.ocheyedan.net">
<link href="/favicon.png" rel="icon">
<link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
<script src="/javascripts/modernizr-2.0.js"></script>
<script src="/javascripts/ender.js"></script>
<script src="/javascripts/octopress.js" type="text/javascript"></script>
<link href="/atom.xml" rel="alternate" title="Ocheyedan Blog" type="application/atom+xml">
<!--Fonts from Google"s Web font directory at http://google.com/webfonts -->
<link href="http://fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
<link href="http://fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
</head>
<body >
<header role="banner"><hgroup>
<h1><a href="/">Ocheyedan Blog</a></h1>
<h2>We are interested in making things hum</h2>
</hgroup>
</header>
<nav role="navigation"><ul class="subscription" data-subscription="rss">
<li><a href="/atom.xml" rel="subscribe-rss" title="subscribe via RSS">RSS</a></li>
</ul>
<form action="http://google.com/search" method="get">
<fieldset role="search">
<input type="hidden" name="q" value="site:blog.ocheyedan.net" />
<input class="search" type="text" name="q" results="0" placeholder="Search"/>
</fieldset>
</form>
<ul class="main-navigation">
<li><a href="/">Blog</a></li>
<li><a href="/blog/archives">Archives</a></li>
</ul>
</nav>
<div id="main">
<div id="content">
<div class="blog-index">
<article>
<header>
<h1 class="entry-title"><a href="/blog/2012/02/19/running-kotlin-code/">Running Kotlin Code</a></h1>
<p class="meta">
<time datetime="2012-02-19T22:35:00-05:00" pubdate data-updated="true">Feb 19<span>th</span>, 2012</time>
| <a href="/blog/2012/02/19/running-kotlin-code/#disqus_thread">Comments</a>
</p>
</header>
<div class="entry-content"><p>Setting up Kotlin, compiling and running Kotlin code in the IntelliJ IDE plugin is well documented
<a href="http://hadihariri.com/2012/02/17/the-kotlin-journey-part-i-getting-things-set-up/">here</a>,
but running Kotlin code from the command line is not described.</p>
<p>Given that Kotlin is a young project, there are going to be bugs that are IDE specific.
We wanted a way to compile and run Kotlin from the command line.</p>
<p>One can compile Kotlin code using a variety of build tools documented
<a href="http://confluence.jetbrains.net/display/Kotlin/Kotlin+Build+Tools">here</a>.</p>
<p>There are two things one needs to know to <em>run</em> Kotlin code from the command line:</p>
<ul>
<li>The class path needs to include your compiled code as well as the Kotlin runtime jar</li>
<li>The main class gets compiled into something called <em>namespace</em></li>
</ul>
<p>Below is an example using Ant. It assumes you have <a href="https://github.com/jetbrains/kotlin">built</a>
the Kotlin runtime jar and the root Kotlin src directory is set to an environmental
variable <em>KOTLIN_HOME</em>.</p>
<p>Example Kotlin main:</p>
<div><script src='https://gist.github.com/1867613.js?file='></script>
<noscript><pre><code>fun main(args : Array<String>) {
println("hello, from Kotlin code!")
}</code></pre></noscript></div>
<p>Relevant Ant snippet:</p>
<div><script src='https://gist.github.com/1867624.js?file='></script>
<noscript><pre><code> <path id="classpath.run">
<pathelement path="${output}/"/>
<pathelement path="${env.KOTLIN_HOME}/dist/kotlinc/lib/kotlin-runtime.jar"/>
</path>
<target name="run">
<java classname="namespace">
<sysproperty key="file.encoding" value="UTF-8"/>
<classpath refid="classpath.run"/>
</java>
</target></code></pre></noscript></div>
<p>Complete Ant file:</p>
<div><script src='https://gist.github.com/1867619.js?file='></script>
<noscript><pre><code><project name="Kotlin" default="compile">
<property environment="env"/>
<taskdef file="${env.KOTLIN_HOME}/build-tools/ant/src/org/jetbrains/jet/buildtools/ant/antlib.xml">
<classpath>
<fileset dir="${env.KOTLIN_HOME}/dist/kotlinc/lib" includes="*.jar"/>
</classpath>
</taskdef>
<property name="output" value="${basedir}/dist"/>
<target name="clean">
<delete dir="${output}"/>
</target>
<target name="compile">
<kotlinc src="${basedir}/src/main/kotlin/" output="${output}"/>
</target>
<path id="classpath.run">
<pathelement path="${output}/"/>
<pathelement path="${env.KOTLIN_HOME}/dist/kotlinc/lib/kotlin-runtime.jar"/>
</path>
<target name="run">
<java classname="namespace">
<sysproperty key="file.encoding" value="UTF-8"/>
<classpath refid="classpath.run"/>
</java>
</target>
</project></code></pre></noscript></div>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blog/2012/02/19/kotlin-blend-theory-practice/">Kotlin: A Nice Blend of Theory and Practice?</a></h1>
<p class="meta">
<time datetime="2012-02-19T18:06:00-05:00" pubdate data-updated="true">Feb 19<span>th</span>, 2012</time>
| <a href="/blog/2012/02/19/kotlin-blend-theory-practice/#disqus_thread">Comments</a>
</p>
</header>
<div class="entry-content"><h2>Why We’re Interested in a New Language</h2>
<p>In college we were introduced to SML and OCaml. We became enamored with
functional programming and strong static type systems. “Bugs are found for you!” is an expression one frequently
hears from the <em>new functional convert</em>. After school, we began programming large and complex systems with other developers.
The amazing functional languages we loved suddenly seemed lacking: e.g. OCaml isn’t widely used, suffers from poor library support,
and lacks good supporting tools.</p>
<p>We ended up programming a lot of Java. We’ve found that there’s a lot to like:
strong community support, great libraries (<a href="http://netty.io/">Netty</a>, <a href="http://code.google.com/p/guava-libraries/">Guava</a>,
<a href="http://cglib.sourceforge.net/">cglib</a>, <a href="http://joda-time.sourceforge.net/">Joda</a>), excellent tools (build, test,
continuous integration, code coverage) and the JVM is an amazing piece of software. This ecosystem should not be understated:
the gestalt is enormous gains in productivity and allows developers to ship high quality code. However, we are continually
left unsatisfied with the Java language – algebraic data types? Nope.</p>
<p>Clearly our frustration isn’t new. These points are hitting on well tread territory. Others have appreciated the high quality that
the JVM ecosystem provides, but were frustrated by Java – these people created new languages on the JVM. Clojure and Scala are two
which initially excited us. Clojure has some nice features (lisps can be fun), but we cannot get behind a dynamic type system.
Scala has many awesome ideas, but too many. So much of our lives are spent making decisions about the interesting
problems we program on, we don’t want to be spending time deciding what subset of a language to use. The language should make it clear.</p>
<h2>Enter Kotlin</h2>
<p><a href="http://confluence.jetbrains.net/display/Kotlin/Welcome">Kotlin</a> is a new (beta) JVM-based language from Jetbrains.
We were very excited when we read about Kotlin. Kotlin is an object oriented language
incorporating functional paradigms. Kotlin appears to have an eye on the kind of theory we like: higher-order functions, algebraic data types,
function literals, type aliases, and <a href="http://blog.jetbrains.com/kotlin/2012/01/the-road-ahead/">more</a>.
Kotlin also has an eye towards pragmatism: there are numerous features which are backed up by real world usage patterns. The inclusion
of many of the features show that the developers have experience writing software e.g. <em>first-class delegation</em> (see <a href="http://confluence.jetbrains.net/display/Kotlin/Classes+and+Inheritance">Delegation</a>),
<em>classes do not allow inheritance by default</em> (see <a href="http://confluence.jetbrains.net/display/Kotlin/Classes+and+Inheritance">Inheritance</a>).</p>
<p>The designers of Kotlin have aesthetics which appear to be in line with our own: the exciting thing about programming is
the ability to make magic a reality. Computer Science gives us theory that allows us to talk about magic,
we need programming tools which help us make that magic. Kotlin’s proposed language features, the choice to run on the JVM and its
blending of programming language theory with a motivation to get things done make us super excited to see where this project goes.</p>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blog/2012/02/18/hello/">Hello.</a></h1>
<p class="meta">
<time datetime="2012-02-18T18:42:00-05:00" pubdate data-updated="true">Feb 18<span>th</span>, 2012</time>
| <a href="/blog/2012/02/18/hello/#disqus_thread">Comments</a>
</p>
</header>
<div class="entry-content"><p>This is our blog. We’re excited it is up.</p>
</div>
</article>
<div class="pagination">
<a href="/blog/archives">Blog Archives</a>
</div>
</div>
<aside class="sidebar">
<section>
<h1>Recent Posts</h1>
<ul id="recent_posts">
<li class="post">
<a href="/blog/2012/02/19/running-kotlin-code/">Running Kotlin Code</a>
</li>
<li class="post">
<a href="/blog/2012/02/19/kotlin-blend-theory-practice/">Kotlin: A Nice Blend of Theory and Practice?</a>
</li>
<li class="post">
<a href="/blog/2012/02/18/hello/">Hello.</a>
</li>
</ul>
</section>
</aside>
</div>
</div>
<footer role="contentinfo"><p>
Copyright © 2012 - Brian Langel and Trevor Smith -
<span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
</p>
</footer>
<script type="text/javascript">
var disqus_shortname = 'ocheyedan';
var disqus_script = 'count.js';
(function () {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
}());
</script>
<script type="text/javascript">
(function(){
var twitterWidgets = document.createElement('script');
twitterWidgets.type = 'text/javascript';
twitterWidgets.async = true;
twitterWidgets.src = 'http://platform.twitter.com/widgets.js';
document.getElementsByTagName('head')[0].appendChild(twitterWidgets);
})();
</script>
</body>
</html>