可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I have just started to study computer sciences at my university where they teach us programming in Scheme.
Since I have learned C++ for the last 6 years, Scheme appears a little odd to me. My instructors tell me you can write any program you can write in C or Java with it.
Is anybody really using this language?
回答1:
Not a lot of people use it that I know, but it is definitely worth a peek (if even just to try programming in another paradigm, so that you learn to think differently). You're lucky to be able to take a class that uses Scheme, as most universities these days now teach Java. Here's a good link if you want to see some lectures from MIT or work on sample problems etc.
MIT Open Courseware - Structure and Interpretation Of Computer Programs
There's an accompanying book available on-line for free as well (Structure and Interpretation of Computer Programs).
UPDATE:
For those interested in a language that is similar to scheme that makes use of the JVM and can access Java libraries (since lots of universities use Java), check out Clojure. Maybe this will become the new language of choice for computer science introduction (we can all hope!).
回答2:
Square USA used it to make the movie Final Fantasy.
Here's a paper they published on it: Gluing Things Together -
Scheme in the Real-time CG Content Production.
From that paper:
At SIGGRAPH 2000 and 2001, we, Square USA R&D team showed real-time rendering of scenes from full computer-generated movie ``Final Fantasy: The Spirits Within''.
[...]
We found it tremendous help to have an embedded Scheme interpreter in real-time rendering engine.
回答3:
Scheme will make you think differently about programming. Just try be open-minded!
回答4:
"Is anybody really using this
language?"
Paul Graham, famously.
回答5:
JavaScript is remarkably similar to Scheme in many ways (though it is missing continuations and the advanced numerical system of Scheme).
From "ECMAScript Language Overview" (PDF). 2007-10-23. pp. 4. Retrieved 2009-05-03.
ES3 is a simple, highly dynamic,
object-based language that takes its
major ideas from the languages Self
and Scheme. The programming style is a
mixture of object-based and functional
programming: The primary abstraction
mechanisms in ES3 are lexically scoped
higher-order functions and mutable
objects ...
回答6:
I'm currently working through the SICP lectures that Abelson and Sussman gave at Hewlett-Packard in 1986 and the Cal-Berkeley CS61A podcasts given by Brian Harvey (taught from the same book) and following along in Scheme, and the experience is opening up whole new ways of thinking for me. To anyone who, like me, doesn't have any formal CS higher-education, I highly recommend it...
回答7:
I've worked on a project with scheme code in production, it can be pretty cool stuff. Scheme had this cool feature of dynamically recompiling to self-optimize execution. I think it's like one step away from sky-net.
回答8:
I used it in college, but I haven't used it much since.
If you're shaky on recursion at all, I highly recommend learning Scheme or Lisp. You'll learn to think recursively about all sorts of things. Is recursion always the right way to go? Of course not. But it's a useful tool to have in the toolbox.
I always encourage developers to learn new languages. The more languages you learn and become proficient with, the more abstractly you'll think about problems. The less you're tied to a specific language, the more likely you are to choose the language which best fits your problem.
回答9:
Beyond personal experience, the closest thing you'll get to an objective guess is the TIOBE index, which currently ranks LISP/Scheme 21st with 0.470% market share. TIOBE uses search engine results to create the list. Obviously, you'll want to take the list (and any other guess at Scheme usage) with a grain of salt.
Shameless promotion: check out PLT Scheme. They've created a nice community, offer their IDE for many platforms, and give you a nice library selection out-of-the-box.
Here's an article describing PLT Scheme in a commercial app: http://www.untyped.com/downloads/icfp068-welsh.pdf.
回答10:
Clojure is a Scheme/Lisp like language that works in the JVM and is really good for parallel processing (supposedly). The great thing about using Clojure is that you get access to the entire Java API, and any other Java libraries.
Clojure is getting pretty popular with language geeks, along with Scala.
回答11:
Here in Russia we develop software using PLT Scheme. And it sells well ;)
回答12:
All languages can be used to write anything, with enough effort :)
However, Scheme's pretty cool - knowing Scheme tends to influence your programming in other languages, in my experience.
Scheme macros are extremely powerful, and call-with-current-continuation a mindwarping function.
The classic test is Structure and Interpretation of Computer Programs ("SICP"). Worth a read.
回答13:
There are quite a few scheme implementation for Java platform, they are used for scripting and prototyping of Java applications. There exists continuation-based web framework for J2EE in scheme, called SISCWeb.
Guile scheme is used as scripting language in some GNU apps - GnuCash for example is mostly written in Scheme.
Also TinyScheme is used as scripting language for GIMP and some variations of it are used in embedded systems.
回答14:
Jazz Scheme is an open source scheme environment built on Gambit Scheme and it seems to aggressively promote industrial uses, check it out:
Jazz Scheme
They report new uses in their news:
Jazz Scheme News
According to this page, Scheme is (or was) in use at: DEC, TI, Tektronix, HP, and Sun.
This guy's LinkedIn CV reports using Chez Scheme at Disney.
Just googling around a little can reveal a lot. In this case, it bears out the observation that I once heard that Scheme use is pretty ubiquitous, just not very public.
回答15:
Absolutely. Scheme is good for a number of different classes of problems.
Jim Blandy is working on a version of Scheme called Minor that integrates a lot closer with native systems and is meant to be performant.
I understand that LilyPond uses Guile for extensibility, although I don't know that I'd hold LilyPond as the ideal shining example of software as it seriously wounded my OS X installation...
回答16:
Yes! Scheme is quite interesting. I learned it at my first year at the University of Waterloo. It is a little different at first, especially if you come from an OOP/imperative background.
It does a lot of nice things for you, and the functional paradigm is definitely one you should explore, if for nothing but gaining a different perspective.
It is also quite useful, for example, I just made a compiler for a super simplified version of C, and I couldn't imagine doing it without a functional language (:
回答17:
I am playing with IronScheme these days, but don't know anyone who uses Scheme for actual work.
回答18:
I recently heard on the stackoverflow podcast that Reddit was originally written in LISP!
回答19:
Scheme is used mainly for teaching purposes. That's one reason there hasn't been a standard module system until the (controversial) RSR6 one: when writing small programs for homework it's unusual to need lots of big libraries.
Scheme started out as an experiment to add Smalltalk-like OOP to Lisp. It eventually changed the macro system, added call/cc
(and dynamic-wind
, dynamic-unwind
), and grew quite a bit.
Aside from the GNU projects using Guile as a scripting language, I don't know of any production systems using Scheme. I do know of a handful of production systems using Lisp, though (Orbitz has Lisp code in its reservation system).
回答20:
I have learned Scheme for over 2 years now and it has significantly helped me as a programmer. It taught me how to think differently and understand deeper concepts and links between programming languages. It is in-fact true that you can write any program in Scheme as in Java and C, however it is rather difficult. There are series of program transformations that must take place before it can be interpreted as Java or C code. It's worth while learning the basics at least though.
回答21:
I'm learning about it in my Program Language Design class, it has some neat uses. I would only use it for a problem that lends itself easily to tail recursion.