public inbox for kawa@sourceware.org
 help / color / mirror / Atom feed
* What is the Development Environment of Choice for Kawa?
@ 2016-02-18 16:18 Rafik
  2016-02-18 18:57 ` Per Bothner
  0 siblings, 1 reply; 6+ messages in thread
From: Rafik @ 2016-02-18 16:18 UTC (permalink / raw)
  To: kawa

Hi,

Coming from Clojure Land, I am experimenting with various scheme 
implementations, guile, chicken, racket,...

As I am experimenting Kawa, I was surprised to see how this scheme can 
actually beat Clojure in terms of speed and elegance, and want to use it 
in a serious hobby project in which I have to interact with a great 
share of imperative Java, a setup that would make Clojure suffer...

But then, I can't find what tool is commonly used by the community to 
develop Kawa: is it emacs with comint? is it slime with the little swank 
glue-code? maybe something else?

Many thanks for your help, I really would love to take community's pulse 
on what tool is used by Kawa-ians,

Cheers

-- 
TNTeam rocks!
Rafik Naccache - BDFL

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: What is the Development Environment of Choice for Kawa?
  2016-02-18 16:18 What is the Development Environment of Choice for Kawa? Rafik
@ 2016-02-18 18:57 ` Per Bothner
  2016-02-18 19:39   ` mikel evins
  2016-02-18 19:59   ` Dominique Boucher
  0 siblings, 2 replies; 6+ messages in thread
From: Per Bothner @ 2016-02-18 18:57 UTC (permalink / raw)
  To: Rafik



On 02/18/2016 08:18 AM, Rafik Naccache [TNTeam] wrote:
> Hi,
>
> Coming from Clojure Land, I am experimenting with various scheme implementations, guile, chicken, racket,...
>
> As I am experimenting Kawa, I was surprised to see how this scheme can actually beat Clojure in terms of speed and elegance, and want to use it in a serious hobby project in which I have to interact with a great share of imperative Java, a setup that would make Clojure suffer...
>
> But then, I can't find what tool is commonly used by the community to develop Kawa: is it emacs with comint? is it slime with the little swank glue-code? maybe something else?

Tooling is Kawa's weak spot - though its compile-time warnings and errors
are better than most "dynamic languages" IMO.

I'm pretty old-school, so I mostly use Emacs (mainly just editing), the REPL,
and print statements. (Very rarely I might use jdb to track down an infinite loop.)
OTOH I write more Java (and lately JavaScript) than I write Scheme ...

A related weakness is connected to Kawa's strength: Kawa does a fair amount of
compile-time optimization and inlining.  This causes problems in interactive
development: you load a function or module, and then edit it and reload it.
Other functions that depend on the change code may no longer work.  A partial
work-around is to use the --no-inline command-line option.  I do have plans
to improve the situation, though a combination of extra indirection and
automatic re-compilation of dependencies.

There are various Emacs packages and/or IDE plugins that can be used.
There is this plugin for Eclipse: https://github.com/schemeway/SchemeScript
However, I don't think it's actively maintained, though the git repo has
seen a few semi-recent updates.  I haven't tried it recently - a status report
would be interesting.

There are also various Emacs packages that can be used, though I don't have
much experience with them.

I have been working recently on improving the Kawa repl, both using DomTerm
and using jline2/jline3.  I have some not-quite-working code - and plenty of ideas :-)
-- 
	--Per Bothner
per@bothner.com   http://per.bothner.com/

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: What is the Development Environment of Choice for Kawa?
  2016-02-18 18:57 ` Per Bothner
@ 2016-02-18 19:39   ` mikel evins
  2016-02-18 19:59   ` Dominique Boucher
  1 sibling, 0 replies; 6+ messages in thread
From: mikel evins @ 2016-02-18 19:39 UTC (permalink / raw)
  To: Per Bothner; +Cc: mikel evins, Rafik Naccache [TNTeam], kawa


> On Feb 18, 2016, at 12:57 PM, Per Bothner <per@bothner.com> wrote:
> 
> 
> 
> On 02/18/2016 08:18 AM, Rafik Naccache [TNTeam] wrote:
>> Hi,
>> 
>> Coming from Clojure Land, I am experimenting with various scheme implementations, guile, chicken, racket,...
>> 
>> As I am experimenting Kawa, I was surprised to see how this scheme can actually beat Clojure in terms of speed and elegance, and want to use it in a serious hobby project in which I have to interact with a great share of imperative Java, a setup that would make Clojure suffer...
>> 
>> But then, I can't find what tool is commonly used by the community to develop Kawa: is it emacs with comint? is it slime with the little swank glue-code? maybe something else?
> 
> Tooling is Kawa's weak spot - though its compile-time warnings and errors
> are better than most "dynamic languages" IMO.
> 
> I'm pretty old-school, so I mostly use Emacs (mainly just editing), the REPL,
> and print statements. (Very rarely I might use jdb to track down an infinite loop.)
> OTOH I write more Java (and lately JavaScript) than I write Scheme …

I write more Scheme than Java, but my solution is the same as Per’s: Emacs and the repl. I got pretty far that way— far enough to write a 3D multiplayer network game that Per presented at the 2015 JavaOne conference—but there are disadvantages, as Per said.

I generally use Emacs with scheme mode and Kawa running in an inferior quack process in a buffer. My emacs setup includes an interactive command to run Kawa with a classpath suitable to my project. Whenever I reload definitions or anything else happens that makes me doubt the integrity of the Kawa runtime, I kill the inferior process and restart it with a few keystrokes. It takes less than a second.

Of course, it blows away the runtime state and I have to rebuild everything from scratch, but I’ve generally solved that by writing loader files that bring my runtime back up to snuff in less than a second. It’s not as good as real Lisp- or Smalltalk-style interactive development, but if you’re coming from the Clojure world then you’re probably not looking for that anyway, and are unlikely to miss it.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: What is the Development Environment of Choice for Kawa?
  2016-02-18 18:57 ` Per Bothner
  2016-02-18 19:39   ` mikel evins
@ 2016-02-18 19:59   ` Dominique Boucher
  1 sibling, 0 replies; 6+ messages in thread
From: Dominique Boucher @ 2016-02-18 19:59 UTC (permalink / raw)
  To: Per Bothner; +Cc: Rafik Naccache [TNTeam], kawa

Hello,

I'm the author of SchemeScript. Per is right. It's not actively maintained, although it's still occasionally used here at Nu Echo. The embedded Kawa is a pretty old version (7 years old!). If there is enough interest, I 
could try to upgrade it. But I'm sure there will be some syntactic/lexical elements of Kawa that will not be supported. And I can't commit to fixing those in the very short term. 

Dominique Boucher 

----- Original Message -----
From: "Per Bothner" <per@bothner.com>
To: "Rafik Naccache [TNTeam]" <rafik@tnteam.rocks>, kawa@sourceware.org
Sent: Thursday, February 18, 2016 1:57:39 PM
Subject: Re: What is the Development Environment of Choice for Kawa?

On 02/18/2016 08:18 AM, Rafik Naccache [TNTeam] wrote: 
> Hi, 
> 
> Coming from Clojure Land, I am experimenting with various scheme implementations, guile, chicken, racket,... 
> 
> As I am experimenting Kawa, I was surprised to see how this scheme can actually beat Clojure in terms of speed and elegance, and want to use it in a serious hobby project in which I have to interact with a great share of imperative Java, a setup that would make Clojure suffer... 
> 
> But then, I can't find what tool is commonly used by the community to develop Kawa: is it emacs with comint? is it slime with the little swank glue-code? maybe something else? 

Tooling is Kawa's weak spot - though its compile-time warnings and errors 
are better than most "dynamic languages" IMO. 

I'm pretty old-school, so I mostly use Emacs (mainly just editing), the REPL, 
and print statements. (Very rarely I might use jdb to track down an infinite loop.) 
OTOH I write more Java (and lately JavaScript) than I write Scheme ... 

A related weakness is connected to Kawa's strength: Kawa does a fair amount of 
compile-time optimization and inlining. This causes problems in interactive 
development: you load a function or module, and then edit it and reload it. 
Other functions that depend on the change code may no longer work. A partial 
work-around is to use the --no-inline command-line option. I do have plans 
to improve the situation, though a combination of extra indirection and 
automatic re-compilation of dependencies. 

There are various Emacs packages and/or IDE plugins that can be used. 
There is this plugin for Eclipse: https://github.com/schemeway/SchemeScript 
However, I don't think it's actively maintained, though the git repo has 
seen a few semi-recent updates. I haven't tried it recently - a status report 
would be interesting. 

There are also various Emacs packages that can be used, though I don't have 
much experience with them. 

I have been working recently on improving the Kawa repl, both using DomTerm 
and using jline2/jline3. I have some not-quite-working code - and plenty of ideas :-) 
-- 
--Per Bothner 
per@bothner.com http://per.bothner.com/

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: What is the Development Environment of Choice for Kawa?
  2016-02-18 21:18 ` RE : " Per Bothner
@ 2016-02-18 21:22   ` mikel evins
  0 siblings, 0 replies; 6+ messages in thread
From: mikel evins @ 2016-02-18 21:22 UTC (permalink / raw)
  To: Per Bothner; +Cc: mikel evins, Rafik Naccache (TNTeam Rocks!), kawa


> On Feb 18, 2016, at 3:18 PM, Per Bothner <per@bothner.com> wrote:
> 
> Until then, you can try the --no-inline flag, and be prepared to re-load
> everything after changes.  One of the big advantages of Kawa that its
> fast compiler and loading makes re-starting ok.

Depends on what you mean by “ok.” It’s virtually instant, so if the time it takes is the main consideration, it’s better than “ok”.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: What is the Development Environment of Choice for Kawa?
@ 2016-02-18 18:53 F. Rafael Leon
  0 siblings, 0 replies; 6+ messages in thread
From: F. Rafael Leon @ 2016-02-18 18:53 UTC (permalink / raw)
  To: kawa

On Thu, Feb 18, 2016 at 11:18 AM, Rafik Naccache [TNTeam]
<rafik@tnteam.rocks> wrote:
> I really would love to take community's pulse on what tool is used by
> Kawa-ians

Rafik,

The correct answer to this is "whatever makes you most comfortable."

In order to vividly illuminate what this means in practice, I will
explain MY own strange workflow so that you can feel comfortable
adopting YOUR own strange workflow:

It starts with emacs.

To emacs, I add the "evil" package which provides vim bindings.
"evil" can be found in the melpa or marmalade repositories.
The standard emacs control-meta-alt-shift s-x-w-y simultaneous chords
give me horrible finger cramps, so I prefer vim. For editing code I
really like the buffer system of emacs.
So, I use emacs with vim bindings.

Theoretically, if I were a better person, I would use paredit instead of evil.

In a separate terminal, NOT in an emacs buffer, I run "rlwrap java
kawa.repl" with an appropriate CLASSPATH for my project.

In emacs, I write some code and save it in "project.scm"

In the rlwrap kawa console, I type (load "project.scm").

I then edit project.scm in emacs and then type the up arrow into the
rlwrap kawa console to repeat the load command and then I hit Enter.

I repeat this process around 1000 times a day.

When doing this for Android, the workflow is identical, except instead
of "rlwrap kawa" I run "rlwrap telnet x.x.x.x 4444" to connect to a
telnet REPL running on the Android device. Also, after each edit and
save in emacs I run "adb push project.scm /sdcard" and then in the
telnet terminal: (load "/sdcard/project.scm").

That's basically it.  I should do a YouTube.

I DON'T run kawa in an emacs buffer because often I like to (display
... ) or (write ... ) lists and look at them.

This dumps thousands of lines of stupidity that I don't want to look
at ever again after I solve the immediate problem.  I don't want
thousands of lines of REPL output saved in an emacs buffer.  As I jump
between emacs buffers, I don't want to glance at a big wasteland of
failed algorithms. It makes me feel like emacs is watching me and
laughing.

If I never made any mistakes and never was unsure about any algorithm,
then a REPL in a buffer would be totally awesome because I could
record and save all my brilliance for all eternity.
Instead, every time I put a REPL in a buffer I just feel embarrassed
when I scroll through it.

      -Rafael

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2016-02-18 21:22 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-02-18 16:18 What is the Development Environment of Choice for Kawa? Rafik
2016-02-18 18:57 ` Per Bothner
2016-02-18 19:39   ` mikel evins
2016-02-18 19:59   ` Dominique Boucher
2016-02-18 18:53 F. Rafael Leon
     [not found] <3go6arm3yvsi6iuungnfyd1o.1455824305674@email.android.com>
2016-02-18 21:18 ` RE : " Per Bothner
2016-02-18 21:22   ` mikel evins

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).