Earlier quoted context omitted.
And what is Arc in?
The CPython JIT/compiler is written in C. Does this mean that a Python program is then a C program? Arc is not Racket.
Why I haven't jumped ship from Common Lisp to Racket just yet
71–80 of 101 posts
Re: Why I haven't jumped ship from Common Lisp to Racket just yet
#72Earlier quoted context omitted.
The biggest issue I see with Common Lisp is that the standard is stuck in time, lacking stuff like database providers, a common FFI or threading. It needs a review of the CL environments that survived to modern days and adopt the common extensions.
I think it is a pretty shallow view at standard. CL implementations grow and have agreed interfaces (or portability layers). A few examples: - sockets via usocket - threading via bordeaux-threads - metaobject protocol via closer-mop - foreign function interface via cffi all these are not mentioned in the standard at all, but are implemented and used in production environment. Having base standard and extensions which…
Is it though?
I agree CL has (after slightly over 2 decades) worked out a standardization path for some core features that you simply cannot live without (e.g., usocket).
But all these variants are noticeably dated abstractions and in many cases the more modern expressions (e.g., threading vs more modern concurrency tooling) can't (or don't) use the compat libraries.
I'd rather have one good, crossplatform reference implementation than many competing but slightly incompatible implementations that only agree on very old standards. In that sense, I'd rather use Racket than CL.
It's true, letting go of some CL features is painful and you'll never get them back. CL's condition-restarts are an especially poignant loss in this modern era of Golang's almost comically regressive error handling schemes.
I'd like to think that if CL'er start to disperse more into other language communities that their gentle pressure and eloquent examples can help motivate other communities to adopt these features.
Re: Why I haven't jumped ship from Common Lisp to Racket just yet
#73Earlier quoted context omitted.
> You don't need database providers to be integrated in the language spec. Not in CL and not in many other successful languages. Many people underestimate how useful Perl DBI, JDBC, ODBC, Python DB-API, ADO.NET are. Which is why, in spite of all design flaws, even Go has a database interface defined on their core library. > Lisp is still pretty much one of the most modern and advanced languages around I agree with th…
> Many people underestimate how useful Perl DBI, JDBC, ODBC, Python DB-API, ADO.NET JDBC, ODBC, ADO.NET are not part of the language spec ; they are separate specifications. Your initial argument was that the language spec ("the standard") is "stuck in time". And on the other hand, database access is not really an issue on CL. > Yet using threading as an example, since it is left for each implementation, it means one…
And in CL there does not exist a common platform to efficiently build better abstractions in CL. TBF, this is only marginally worse than many other popular languages. Still, it's undeniably worse.
Re: Why I haven't jumped ship from Common Lisp to Racket just yet
#74> trivial utilities for interactive use from the shell command-line with an "instantaneous" feel Last time I checked CL images were huge though. Something like 24MB for a "hello world" executable, even bigger with some compilers.
> Last time I checked CL images were huge though. Something like 24MB for a "hello world" executable, even bigger with some compilers. You need to consider that Common Lisp includes a runtime, and this is a essential part of the goods of Common Lisp. Whenever you create a Common Lisp program, you also "embed" the runtime, and the runtime allows you to do wonderful stuff within the running code, like for example, comp…
Lots of other people do this without massive executables to distribute, though. CLs are inconsistent on how they can distribute base images and executables. For example, Java's compiler is a code segment you an link in if you want to carry it with you.
Re: Why I haven't jumped ship from Common Lisp to Racket just yet
#75One thing that makes racket shine is it's macro facilities. Syntax case is nice and all that, but Jesus Christ in a chicken basket I wish scheme would have standardised on syntax-parse. Syntax case vs. syntax parse isn't and will never be close to a fair comparison. Not only is it more powerful, it also provides the users of your macros with proper error messages. It blows both unhygienic and other hygienic macro sys…
Re: Why I haven't jumped ship from Common Lisp to Racket just yet
#76The author, a famous and well-liked lisper, is not consider ing portability features. CL is an ANSI standard and code often runs with no changes in many distinct CL implementations/compilers/interpreters. Also, related to that point: There are many different CL implementations out there that satisfy different use cases, like for example JVM deployment (ABCL), embedded systems (ECL), speed(SBCL), fast compile times (C…
if CL have a lot of libraries, it is not because CL have a large or active community, it is more because it existed for a long time
so, what is honestly the reality of CL ecosystem, is quicklisp a solid part of this ecosystem, is it easy to find and install packaged compared to perl and python for example?
do you think racket have a more reliable ecosystem?
Re: Why I haven't jumped ship from Common Lisp to Racket just yet
#77Earlier quoted context omitted.
> Many people underestimate how useful Perl DBI, JDBC, ODBC, Python DB-API, ADO.NET JDBC, ODBC, ADO.NET are not part of the language spec ; they are separate specifications. Your initial argument was that the language spec ("the standard") is "stuck in time". And on the other hand, database access is not really an issue on CL. > Yet using threading as an example, since it is left for each implementation, it means one…
> There does not exist a single, one-size-fits-all, valid-for-all-use-cases approach to concurrent programming. And in CL there does not exist a common platform to efficiently build better abstractions in CL. TBF, this is only marginally worse than many other popular languages. Still, it's undeniably worse.
https://wiki.python.org/moin/PythonImplementations
There is a reference implementation, no standard, and a bunch of implementations and/or extensions. Is it really better? What guarantees do you have? If you need to provide an extension, you have to discuss about extensions and push patches to CPython, just like you could push patches to SBCL or ABCL.
But at least (which I do not consider "undeniably worse"), CL is its own platform and offers a standard extension mechanism (e.g. compiler-macros), and implementations offer more specific extensions mechanisms (sb-vm, ...), as well as a standard way of building portability layers across implementations. Those features are used to define and implement new standards. How is that "undeniably worse"?
Re: Why I haven't jumped ship from Common Lisp to Racket just yet
#78Racket is a really exciting language, especially with its focus on building small languages to solve problems. However, where it fails for me is in its lack of interactive development. When I investigated it, there seemed to be no way to actually connect a repl to a running program. Unlike with common lisp or clojure, with racket if you make changes to your code you have to restart the REPL, which destroys your state…
I believe this is a design decision, because relying on some enormous implicit repl state and updating the code in place is a good way to get yourself into states that are impossible to reach in an actual running program. Racket is a functional language and it is their belief that you should just make predictable ways to startup your interactive development than rely on the entire state of some repl image.
Re: Why I haven't jumped ship from Common Lisp to Racket just yet
#79Earlier quoted context omitted.
> There does not exist a single, one-size-fits-all, valid-for-all-use-cases approach to concurrent programming. And in CL there does not exist a common platform to efficiently build better abstractions in CL. TBF, this is only marginally worse than many other popular languages. Still, it's undeniably worse.
Looking at Python: https://wiki.python.org/moin/PythonImplementations There is a reference implementation, no standard, and a bunch of implementations and/or extensions. Is it really better? What guarantees do you have? If you need to provide an extension, you have to discuss about extensions and push patches to CPython, just like you could push patches to SBCL or ABCL. But at least (which I do not consider "undeniab…
So why are they relevant here?
Not that I like Python, mind you. I miss CL, but I wouldn't go back to it. My experience is that way too many of these beloved libraries have an audience of 1 or 2, sometimes a single company. If I'm going to engage with an environment like that, I'd rather do so to access the leading edge of research and compilation results like w/ Haskell. Even Racket is more desirable than CL on this scale.
EDIT: I just wanna repeat I loathe python and carry no water for that standing wave of bad design decisions. Really. Seriously. Worst.
Re: Why I haven't jumped ship from Common Lisp to Racket just yet
#80Earlier quoted context omitted.
> Last time I checked CL images were huge though. Something like 24MB for a "hello world" executable, even bigger with some compilers. You need to consider that Common Lisp includes a runtime, and this is a essential part of the goods of Common Lisp. Whenever you create a Common Lisp program, you also "embed" the runtime, and the runtime allows you to do wonderful stuff within the running code, like for example, comp…
> You need to consider that Common Lisp includes a runtime, and this is a essential part of the goods of Common Lisp. Whenever you create a Common Lisp program, you also "embed" the runtime, and the runtime allows you to do wonderful stuff within the running code, like for example, compile code on the fly, replace function with new version (while the program is running), replace class instances with new versions of t…
There is only one Common Lisp, the 1994 ANSI Standard.
There are many implementations and they give you diverse options of delivering. For example if you want good options to package an executable, I think LispWorks has lots of options for specifically this need.