On Sat, Dec 29, 2018 at 1:48 PM Tomasz Rola <rto...@ceti.pl> wrote:

> Where does Racket belong? I understand Racket community no longer
> considers themselves as part of Scheme landscape, but I am unable to
> say where I get this impression from. If I am wrong, then the first
> thing for anybody willing to contribute to R* success would be to make
> their blog being displayed on Scheme Planet (IMHO). If I am right (R*
> not Scheme), then this is a pity.


There's much to discuss here, and much of it would start to get off-topic
for this thread, but I can give a few facts for the record.

Racket is a language in the Scheme branch of the Lisp family. Racket
includes implementations of the R5RS
<https://docs.racket-lang.org/r5rs/index.html> and R6RS
<https://docs.racket-lang.org/r6rs/index.html> Scheme languages, and
programs/libraries written in those languages can interoperate with code in
other Racket languages, but the main Racket language isn't Scheme. Racket
is both more than and different from the languages specified by any of the
Revised Reports in numerous ways, ranging from immutable pairs and
guaranteed left-to-right evaluation to the large standard library,
cutting-edge macro system, and multi-lingual programming support (which
enable those implementations of R5RS and R6RS), to name just a few. The
Racket language evolved from PLT Scheme: a blog post
<https://racket-lang.org/new-name.html> gives more of the rationale for the
change, but basically it's called something different because it is
something different. That said, Schemers are still some of Racketeers'
closest relatives: there is ongoing work to implement Racket in Chez
Scheme, and you will find some of the creators of Racket listed on the
cover page of R6RS.

Right now I am willing to write some scripts, with intention to run
> them both on Linux and OpenBSD. A kind of stuff that is normally
> written in Perl. … This means I will have to have source at my hand, just
> install *BSD,
> compile Gauche, install my scripts, ready to go, before any network is
> up I mean.
>
> Does Racket match such a use case? I can compile it from sources
> … but I wonder if it will
> compile in a very limited, rugged environment - no network connection,
> just what was there in base install (with C compiler, of course). I
> might try one day, but it seems Gauche has less dependency on outside
> packages than R*.
>

Racket can certainly do this. You do not need a network connection either
to compile Racket itself or to compile code written in Racket (provided, of
course, that you have all of the sources you need). On (non-Mac) Unix-like
systems, Racket does by default use some shared libraries (e.g. for GUI
stuff) that it expects to be installed via the OS package manager, but "Minimal
Racket does not require additional native libraries to run"
<https://github.com/racket/racket/blob/master/INSTALL.txt>, and you can
configure things so that these are bundled with Racket instead. Also, if
you prefer, Racket can compile your scripts into stand-alone executables,
so you could just deploy the binaries if that simplifies things.


> Like, I write a program
> and hope it will keep working for the next few years without much work
> (other than bug fixing). Thus, language stability is important to
> me. Or backwards compatibility. Or at least knowing I can switch to
> alternative implementation, should I ever feel such necessity.
>

Being concerned about backwards-compatibility is very reasonable! Others
can speak more to their actual experience, but the Racket developers take
compatibility very seriously, and I've heard of people running quite old
code with the latest releases of Racket. Read through the documentation and
you will see lots of evidence for this in various APIs: for example, `#lang
scheme` still runs PLT Scheme programs from before the name change.

The Racket (PLT Scheme) project started in 1995 and has been publishing
regular releases for decades, so the possibility of abandonment seems
vanishingly small.

As far as I can see it, Racket contributes to fragmentation of Scheme
> scene (which is already a "everybody tends for oneself" kind,
> AFAICT).


Since, as noted, Racket is a different language than Scheme, this becomes
rather like saying that C++ contributes to fragmentation of C
implementations.


> There is no clear message if there is way to run in R* a code
> developed with other Schemes or vice versa and a very minimalistic
> effort to portability in a form of slib library is not going to work
> in R*, am I right?
>

The Racket Guide <https://docs.racket-lang.org/guide/dialects.html> points
you to how to run pure R5RS and R6RS code in Racket: did you not see this,
or was it not sufficiently clear? (Of course, writing practical programs in
pure portable RnRS Scheme is hard, but I don't think it's harder in
Racket's Scheme implementations than in others.) Racket also comes with
implementations of many SRFIs <https://docs.racket-lang.org/srfi/index.html>
.


> Another niche for which I would like to consider R* is mobile apps
> (i.e. for smartphone). But, is it possible to do such thing, actually?
>

Jay McCarthy has ported Racket to Android:
https://github.com/jeapostrophe/racket-android It should be possible to do
likewise for iOS, but I don't know of anyone who's done it yet.


> For this, Racket has to be more interoperable. Can it replace Java?
> Can it work with Java libraries?
>

Racket doesn't (currently) run on the JVM, so it doesn't use Java
libraries. It does have a great C FFI, which Racket itself uses to
implement the back-ends for its cross-platform GUI library.


> Python has an excellent "batteries included" motto.  …
> Something which can talk to and make use of existing Python,
> Perl, Ruby code? Open up a spreadsheet, read data, feed it to Python
> library, write back results. … utilities/system
> programming and/or stuff like reading and manipulating data in files,
> databases and spreadsheets … And showing some controls for mouse.
>

Not only can Racket do all of these things, I personally do essentially all
of them. "Batteries included" is written right at the top of Racket's
website <https://racket-lang.org/>. The main distribution comes with a
package for working with many databases
<https://docs.racket-lang.org/db/index.html>, and other packages add
support for others <https://docs.racket-lang.org/mongodb/>, as well CSV
spreadsheets <https://docs.racket-lang.org/csv-reading/index.html>. I have
been using Racket to run Python programs under its control and talk to them
via standard IO in formats like JSON. I even use Racket's `raco setup` tool
to manage the Python dependencies, and I'm working on integrating the
Python docstrings into Racket's Scribble documentation.

In Racket itself, I maintain a cross-platform (Windows, Mac, and GNU/Linux)
GUI app, a server-side web application (including proxies and virtual hosts
managed from within Racket), and various utilities for managing a large
corpus of XML documents. The Racket language has compelling features (e.g.
continuations, contracts, green threads, DSLs) that make it more effective
and productive for my purposes than any other language I've encountered.

-Philip

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to