Can I get a C++ compiler/GUI for free?
C++
Miscellaneous Forums/General Discussion/C++ Visual studio is free...big, long download to get it and the sdk working, though.
Also this website http://www.bloodshed.net/ has some free
C++ stuff, not sure its what your looking for though.
C++ stuff, not sure its what your looking for though.
Thanks guys.
I'm looking for what most professional game developers use.
I'm looking for what most professional game developers use.
big, long download to get it
Its only 48mg if you download only express C++ (ie leave help online etc) Yes, but don't do that unless you really have to. The help is slow enough as it is.
Theres too much help to be usful anyway.
But yep download it. But you can download it after you have already gotton the IDE.
But yep download it. But you can download it after you have already gotton the IDE.
@Gabriel
I was just considering getting a 4-inch-thick book on C++ titled something like "C++ A to Z, Complete Beginner to Advanced, Alpha to Omega, etc." :)
That way I wouldn't need much help.
But I will most likely stay with B3D.
@Everybody Else
Thanks for the help!
I was just considering getting a 4-inch-thick book on C++ titled something like "C++ A to Z, Complete Beginner to Advanced, Alpha to Omega, etc." :)
That way I wouldn't need much help.
But I will most likely stay with B3D.
@Everybody Else
Thanks for the help!
I was just considering getting a 4-inch-thick book on C++ titled something like "C++ A to Z, Complete Beginner to Advanced, Alpha to Omega, etc." :)
That way I wouldn't need much help
rofl That way I wouldn't need much help
Get BlitzMax. It has a lot more features than B3D (3D aside) and is a lot friendlier than C++
Its only 48mg if you download only express C++ (ie leave help online etc)
You need the Platform SDK too, which adds quite a few MBs to that 48mg (milligrams?).
I would go for Visual C++ if you can get it, ive tried loads and finally settled with VC++ :)
rofl
Indeed.I wouldn't go for C++ at all. Ever.
It all depends on what you're trying to do. If it's create games, I'd stick with blitz products. Much shorter dev time by far.
I'd stick with blitz products. Much shorter dev time by far.
And much less this that can go catastrophically wrong. C++ is on it's deathbed. Nobody will be programming in C++ in 10 years. Drivers and such will be written in C and everything else will have moved to a higher level language.
I'm still considering the book method.
@Nomen luni & Chroma & FlameDuck
My dream is 3D. I know BMax has much more features than B3D but I'm going to stick with B3D until the 3D mod comes out for Max. One other reason I can see for getting Max is I can run it on Linux:)
http://blitzbasic.com/Community/posts.php?topic=66978
btw, can I program games for my Wii with C++?
@Nomen luni & Chroma & FlameDuck
My dream is 3D. I know BMax has much more features than B3D but I'm going to stick with B3D until the 3D mod comes out for Max. One other reason I can see for getting Max is I can run it on Linux:)
http://blitzbasic.com/Community/posts.php?topic=66978
btw, can I program games for my Wii with C++?
for the Wii, there is nothing for homebrewing on it
though you can use our DS, PSP or GBA for that. C++ is a very similar to BMax by the way.
and BMax would be easier to use on linux since setting up openGL can be a pain
though you can use our DS, PSP or GBA for that. C++ is a very similar to BMax by the way.
and BMax would be easier to use on linux since setting up openGL can be a pain
I know BMax has much more features than B3D but I'm going to stick with B3D until the 3D mod comes out for Max.
Well you're certainly entitled to, but I wouldn't hold my breath for Max3D. Since there are quite a few wrappers for commercial aswell as opensource 3rd party 3D engines, I don't really see any advantage to sticking with B3D. There are quite a few advantages of BlitzMAX tho' both over B3D (it's object oriented) and C++ (garbage collection). btw, can I program games for my Wii with C++?
If you have an SDK. If your plan is to move to C++, and then use one of the software engines available for it, please before you do, see if that engine is available for Bmax.
This isnt an attempt to change your mind, for afterall VC express 8 is free, and you would have to pay for BMax.
Also although I said it was only 40oddMB, I had thought you wanted it for like little collage learning programs, where the basic IDE download would be enough. If you want to make it your main game language then you need the fulll 480MB, and probably the DirectX SDK (500MB ish). And probably the windows SDK (400Mb).
However, if you have the time, I would download all the express additions, they are free, and then you could spend a week or so looking at each.
In my opinion C++ only sounds elegant when someone who doesnt program in it, is telling you about it.
This isnt an attempt to change your mind, for afterall VC express 8 is free, and you would have to pay for BMax.
Also although I said it was only 40oddMB, I had thought you wanted it for like little collage learning programs, where the basic IDE download would be enough. If you want to make it your main game language then you need the fulll 480MB, and probably the DirectX SDK (500MB ish). And probably the windows SDK (400Mb).
However, if you have the time, I would download all the express additions, they are free, and then you could spend a week or so looking at each.
In my opinion C++ only sounds elegant when someone who doesnt program in it, is telling you about it.
Here's a statement from my former boss and CEO towards application development with C++:
"Whoever uses C++ for application development, has a strong tendency towards masochism."
Use BlitzMax for everything that brings fun to your life. Use Python to do productive things on a server. My choice for the so-called "rich web clients" is Flash with ActionScript -- for some strange reason I like Flash.
"Business" languages like C-Sharp, Java or COBOL and the really painful languages like C or C++ you should only touch when you are actually being paid for it.
And while we're at it, my favourite databases are VistaDB, SQLite and MySQL (in that order).
"Whoever uses C++ for application development, has a strong tendency towards masochism."
Use BlitzMax for everything that brings fun to your life. Use Python to do productive things on a server. My choice for the so-called "rich web clients" is Flash with ActionScript -- for some strange reason I like Flash.
"Business" languages like C-Sharp, Java or COBOL and the really painful languages like C or C++ you should only touch when you are actually being paid for it.
And while we're at it, my favourite databases are VistaDB, SQLite and MySQL (in that order).
Yeah... C equates to pain... long live BM and B3D {;-)
If you really want to program with some professional software, C# with the XNA command library is probably the absolute best thing you can get. Not only can you program video games for windows, but XNA allows you to push the code into any Xbox 360 that has a hard drive and an Xbox live account. It is also free unless you want to run the game on the 360, which is then only $100 yearly. I have been working with it for a while and while it is alot harder to acturally program, it is worth it in the end.
syntax
syntax
Or, since every "popular" language is slowly evolving towards (read: catching up with) Lisp, you could just learn that. With it's foreign function interface it can call C code and be called by C code, so the libraries available are obviously quite plentiful.
Lisp has some nice features but the syntax just blows, may aswell tell them to learn forth.
The syntax? What syntax? Lisp really is as close to being "syntax" free as there is. I know the parenthesis are a pain at first, but try to remember back to when you looked at your first Algol-derived language (C, BlitzMax, whatever) - it was foreign, too. The only thing I'll admit to being difficult *after* getting used to the parenthesis is the prefix notation...i.e.
(/ (+ 2 5) 4)
instead of
(2+5)/4
The only benefit of the prefix notation here is that it essentially forces parenthesis around each expression so you'll never run into an order of operation problem but...I admit, that's a trivial gain, really. Also, since code is data and data is code, you can use easily write lisp data to files and read it back without having to create your own file format. This makes it create for configuration files where you could write something like
(Window :x 25 :y 25 :width 800 :height 600 :BGcolor FFFFFF)
and then have lisp read the file and evaluate the code and (assuming you have either a Window macro or function that creates a window) you'd have a window at 25,25 that is 800x600 with a white background. Note, this is the same code you'd write within Lisp - you don't have to write some separate parser to read the config file and then call the appropriate function. Nope, you're writing the *function call itself* as the config file.
The benefits of Lisps 'syntax' (which is really more like the parse tree that a compiler might turn out, but in english) are many. Lisp macro's are unbelievably powerful. Being able to treat code as data and data as code means that Lisp can use the full power of the language when preprocessing a file. There's no need for "special syntax" for template programming ala C++. There's no need for XML, since Lisp can easily accomodate all of XML's features in the language itself (and more).
Toss in things like dynamic/strong typing, closures, first class functions (functions as variables), optional and named function arguments (i.e. you don't have to call a function with the parameters in order...you could go (CreatePlayer :name "Billy" :race "Human") if you only wanted to specify the name and race while the rest of the arguments could be set to default values (yes, I know this can be accomplished in any language but it tends to require some ugly 'hacks'). You could also go
(CreatePlayer :race "Elven" :name "Tanaros" :age 353) . As mentioned, the named (keyword) parameters can go in any order and can be omitted if desired.
So obviously, I disagree with the concept that the syntax sucks. The syntax takes a bit to get used to, but the truth is it is much less complicated than other syntaxes because it is *extremely* regular. There are no "special syntax cases" like the aforementioned template programming in C++ or required indentation ala Python. No "function/endfunction" "method/endmethod" distinctions...there are so few cases of special syntax that the only thing that you have to learn and get used to is the parenthesis. Eventually (I imagine, I'm still quite new to it) you get to the point where you don't notice or think about them.
(/ (+ 2 5) 4)
instead of
(2+5)/4
The only benefit of the prefix notation here is that it essentially forces parenthesis around each expression so you'll never run into an order of operation problem but...I admit, that's a trivial gain, really. Also, since code is data and data is code, you can use easily write lisp data to files and read it back without having to create your own file format. This makes it create for configuration files where you could write something like
(Window :x 25 :y 25 :width 800 :height 600 :BGcolor FFFFFF)
and then have lisp read the file and evaluate the code and (assuming you have either a Window macro or function that creates a window) you'd have a window at 25,25 that is 800x600 with a white background. Note, this is the same code you'd write within Lisp - you don't have to write some separate parser to read the config file and then call the appropriate function. Nope, you're writing the *function call itself* as the config file.
The benefits of Lisps 'syntax' (which is really more like the parse tree that a compiler might turn out, but in english) are many. Lisp macro's are unbelievably powerful. Being able to treat code as data and data as code means that Lisp can use the full power of the language when preprocessing a file. There's no need for "special syntax" for template programming ala C++. There's no need for XML, since Lisp can easily accomodate all of XML's features in the language itself (and more).
Toss in things like dynamic/strong typing, closures, first class functions (functions as variables), optional and named function arguments (i.e. you don't have to call a function with the parameters in order...you could go (CreatePlayer :name "Billy" :race "Human") if you only wanted to specify the name and race while the rest of the arguments could be set to default values (yes, I know this can be accomplished in any language but it tends to require some ugly 'hacks'). You could also go
(CreatePlayer :race "Elven" :name "Tanaros" :age 353) . As mentioned, the named (keyword) parameters can go in any order and can be omitted if desired.
So obviously, I disagree with the concept that the syntax sucks. The syntax takes a bit to get used to, but the truth is it is much less complicated than other syntaxes because it is *extremely* regular. There are no "special syntax cases" like the aforementioned template programming in C++ or required indentation ala Python. No "function/endfunction" "method/endmethod" distinctions...there are so few cases of special syntax that the only thing that you have to learn and get used to is the parenthesis. Eventually (I imagine, I'm still quite new to it) you get to the point where you don't notice or think about them.
Oh, Lisp also features garbage collection, closures, bignums (integers that have no limit on their size...i.e. 125036969692692962962369 is stored correctly), native support for fractions and complex numbers, vectors, hash tables, strings, lists, associative arrays, and resizable arrays as native types along with
*interactive compilation - compile a function at a time, no need to compile a whole file. Compile just a function (or statement) and test it immediately.
*built in profiling
*the ability for a running program to compile code and integrate it into the program
*the ability to debug a running program without interrupting it
*an error handling system that far exceeds standard exception handling. You can signal a 'condition' (similar to an exception) and this will then return up the stack and search for a handler. However, this doesn't unwind the stack. You can also define restart cases, and these restart cases can be called from a condition handler. So, for example, if you are parsing a log file and it's got some kind of problem you can signal a condition, and the code higher on the call stack can choose how to handle it. Data can also be passed back and forth between a condition and it's handler - so in this example the handler might ask the user to fix the offending log entry and then pass that back to a restart case to get parsed, and then things would resume where they were. Of course, unwinding the stack is possible - it's just not mandatory.
And last, modern Lisp implementations can churn out code that's as fast or faster than C/C++. Not always, mind you - and Lisp does usually take up a bit more memory (it does have garbage collection and dynamic typing, after-all). However, that's a small price to pay for such a powerful and expressive language. The only other drawback is that it's not all that popular and so there aren't many pure Lisp based libraries for things like games. You'd have to write the wrappers for C based code yourself.
*interactive compilation - compile a function at a time, no need to compile a whole file. Compile just a function (or statement) and test it immediately.
*built in profiling
*the ability for a running program to compile code and integrate it into the program
*the ability to debug a running program without interrupting it
*an error handling system that far exceeds standard exception handling. You can signal a 'condition' (similar to an exception) and this will then return up the stack and search for a handler. However, this doesn't unwind the stack. You can also define restart cases, and these restart cases can be called from a condition handler. So, for example, if you are parsing a log file and it's got some kind of problem you can signal a condition, and the code higher on the call stack can choose how to handle it. Data can also be passed back and forth between a condition and it's handler - so in this example the handler might ask the user to fix the offending log entry and then pass that back to a restart case to get parsed, and then things would resume where they were. Of course, unwinding the stack is possible - it's just not mandatory.
And last, modern Lisp implementations can churn out code that's as fast or faster than C/C++. Not always, mind you - and Lisp does usually take up a bit more memory (it does have garbage collection and dynamic typing, after-all). However, that's a small price to pay for such a powerful and expressive language. The only other drawback is that it's not all that popular and so there aren't many pure Lisp based libraries for things like games. You'd have to write the wrappers for C based code yourself.
Hi,
Having never concidered Lisp as a languange before, after you posts Ive just looked it up.
Anyway questions.
1) Which Lisp do you recomend
2) Im not so sure about your
Having never concidered Lisp as a languange before, after you posts Ive just looked it up.
Anyway questions.
1) Which Lisp do you recomend
2) Im not so sure about your
can churn out code that's as fast or faster than C/C++
I know you said not always, but I cannot find any documented sorce that gives commparable speeds between C/C++ and lisp. Links please Well, here's a benchmark where it beats C++ in three areas when it comes to speed.
http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=sbcl&lang2=gpp
Granted, it loses in most, but rarely by all that much. If you compare it to Java it beats it most of the time. Also, it is MUCH faster than any other scripting language out there, and Lisp itself makes for a great scripting language because you can fairly easily write your own language within lisp that gets converted to pure lisp code by the preprocessor. (Again I need to re-state that the Lisp preprocessor does not just do textual substitutions but can use the full power of the language to generate code. This is a weird concept and hard to grasp at first.)
A good example of the power of the pre-processor is Lisps built in LOOP function, which is essentially a small domain specific language built into the Lisp standards...here is an example
(loop for i in *random*
counting (evenp i) into evens
counting (oddp i) into odds
summing i into total
maximizing i into max
minimizing i into min
finally (return (list min max total evens odds)))
This code loops through a list named *random*, and assigns the value to i on each iteration. It then tests i and if it is even it adds it to the variable "evens." It does a similar test to see if it is odd and if so, adds it to odds. It then sums the value of i into the value of total - hence at the end of the loop total will be equal to the sum of all the values in *random*. It then tests to see if i is greater than the value of max, and if so, stores it in max. It does a similar test for min - storing it in that variable if it is the lowest value yet. Then, upon completion, the loop returns a list containing the max, min, total sum, etc. All of that in 7 lines of code.
Now, that is not "standard" Lisp code there. Loop is a macro, and so when this code is compiled it actually expands into very different code. The Loop macro, for instance, looks for keywords such as: for, in, into, counting, summing, maximizing, minimizing, finally, etc.
When this code is compiled, the compiler passes the above expression to the loop macro, and the loop macro parses it and expands it into actual Lisp code.
Things like getting the max value, min value, collecting all the values or the sum of values, etc, are all just parts of this little "mini-language" known as loop. That's the thing with Lisp. If you find yourself repeating a piece of code or a certain idiom in your code quite often, you can write a macro - essentially write your own domain specific language - and make the process much more concise and expressive, and easy to write, without losing any speed whatsoever (since the macro-expander expands it into Lisp code. All of the parsing is happening prior to compilation.)
To give you an example of what happens when a macro expands, take a look at the following code generated from the above Loop expansion...
Now I know that looks pretty intimidating. Part of that is because it uses unique symbols to represent variables under the hood (all the #:G8985 things) - that's just to prevent potential name clashes since this code is being generated "on the fly" by the compiler. The other reason is because this is some highly optimized code.
The nice thing is, you don't need to write that code yourself. The Loop function generates it for you. What is really happening is, as mentioned, the Loop function is generating code based upon the expression you pass it. The code in the above codebox is what is compiled, despite the fact that all you wrote was that fairly simple Loop expression.
I plan on writing my own scripting language for my MUD within Lisp. The great thing is, it can have whatever syntax I want, but will expand into standard Lisp code before compilation, and so not only is it not interpreted it is fully compiled standard Lisp code. A custom scripting language with no speed costs, and no "glue code" to get it to interface with your app. How awesome is that?
http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=sbcl&lang2=gpp
Granted, it loses in most, but rarely by all that much. If you compare it to Java it beats it most of the time. Also, it is MUCH faster than any other scripting language out there, and Lisp itself makes for a great scripting language because you can fairly easily write your own language within lisp that gets converted to pure lisp code by the preprocessor. (Again I need to re-state that the Lisp preprocessor does not just do textual substitutions but can use the full power of the language to generate code. This is a weird concept and hard to grasp at first.)
A good example of the power of the pre-processor is Lisps built in LOOP function, which is essentially a small domain specific language built into the Lisp standards...here is an example
(loop for i in *random*
counting (evenp i) into evens
counting (oddp i) into odds
summing i into total
maximizing i into max
minimizing i into min
finally (return (list min max total evens odds)))
This code loops through a list named *random*, and assigns the value to i on each iteration. It then tests i and if it is even it adds it to the variable "evens." It does a similar test to see if it is odd and if so, adds it to odds. It then sums the value of i into the value of total - hence at the end of the loop total will be equal to the sum of all the values in *random*. It then tests to see if i is greater than the value of max, and if so, stores it in max. It does a similar test for min - storing it in that variable if it is the lowest value yet. Then, upon completion, the loop returns a list containing the max, min, total sum, etc. All of that in 7 lines of code.
Now, that is not "standard" Lisp code there. Loop is a macro, and so when this code is compiled it actually expands into very different code. The Loop macro, for instance, looks for keywords such as: for, in, into, counting, summing, maximizing, minimizing, finally, etc.
When this code is compiled, the compiler passes the above expression to the loop macro, and the loop macro parses it and expands it into actual Lisp code.
Things like getting the max value, min value, collecting all the values or the sum of values, etc, are all just parts of this little "mini-language" known as loop. That's the thing with Lisp. If you find yourself repeating a piece of code or a certain idiom in your code quite often, you can write a macro - essentially write your own domain specific language - and make the process much more concise and expressive, and easy to write, without losing any speed whatsoever (since the macro-expander expands it into Lisp code. All of the parsing is happening prior to compilation.)
To give you an example of what happens when a macro expands, take a look at the following code generated from the above Loop expansion...
(LET ((I NIL) (#:G8985 *RANDOM*)) (DECLARE (TYPE LIST #:G8985)) (LET ((EVENS 0) (ODDS 0) (TOTAL 0)) (DECLARE (TYPE NUMBER TOTAL) (TYPE FIXNUM ODDS) (TYPE FIXNUM EVENS)) (LOOP::WITH-MINIMAX-VALUE #S( LOOP-MINIMAX :ANSWER-VARIABLE MAX :TYPE REAL :TEMP-VARIABLE #:G8986 :FLAG-VARIABLE #:G8987 :OPERATIONS (MAX) :INFINITY-DATA NIL ) (LOOP::WITH-MINIMAX-VALUE #S( LOOP-MINIMAX :ANSWER-VARIABLE MIN :TYPE REAL :TEMP-VARIABLE #:G8988 :FLAG-VARIABLE #:G8989 :OPERATIONS (MIN) :INFINITY-DATA NIL ) (BLOCK NIL (LOOP::LOOP-BODY NIL ((WHEN (ENDP #:G8985) (GO LOOP::END-LOOP)) (LOOP::LOOP-REALLY-DESETQ I (CAR #:G8985)) NIL (LOOP::LOOP-REALLY-DESETQ #:G8985 (CDR #:G8985))) ((WHEN (EVENP I) (SETQ EVENS (1+ EVENS))) (WHEN (ODDP I) (SETQ ODDS (1+ ODDS))) (SETQ TOTAL (+ TOTAL I)) (LOOP::LOOP-ACCUMULATE-MINIMAX-VALUE #S( LOOP-MINIMAX :ANSWER-VARIABLE MAX :TYPE REAL :TEMP-VARIABLE #:G8986 :FLAG-VARIABLE #:G8987 :OPERATIONS (MAX) :INFINITY-DATA NIL ) MAX I) (LOOP::LOOP-ACCUMULATE-MINIMAX-VALUE #S( LOOP-MINIMAX :ANSWER-VARIABLE MIN :TYPE REAL :TEMP-VARIABLE #:G8988 :FLAG-VARIABLE #:G8989 :OPERATIONS (MIN) :INFINITY-DATA NIL ) MIN I)) ((WHEN (ENDP #:G8985) (GO LOOP::END-LOOP)) (LOOP::LOOP-REALLY-DESETQ I (CAR #:G8985)) NIL (LOOP::LOOP-REALLY-DESETQ #:G8985 (CDR #:G8985))) ((RETURN (LIST MIN MAX TOTAL EVENS ODDS)))))))))
Now I know that looks pretty intimidating. Part of that is because it uses unique symbols to represent variables under the hood (all the #:G8985 things) - that's just to prevent potential name clashes since this code is being generated "on the fly" by the compiler. The other reason is because this is some highly optimized code.
The nice thing is, you don't need to write that code yourself. The Loop function generates it for you. What is really happening is, as mentioned, the Loop function is generating code based upon the expression you pass it. The code in the above codebox is what is compiled, despite the fact that all you wrote was that fairly simple Loop expression.
I plan on writing my own scripting language for my MUD within Lisp. The great thing is, it can have whatever syntax I want, but will expand into standard Lisp code before compilation, and so not only is it not interpreted it is fully compiled standard Lisp code. A custom scripting language with no speed costs, and no "glue code" to get it to interface with your app. How awesome is that?
Here is a very good book to get you started with Lisp and show you some practical apps written in Lisp.
http://www.gigamonkeys.com/book/
If you want a very thorough and extremely easy to follow introductory text, check out this book:
http://www.cs.cmu.edu/afs/cs.cmu.edu/user/dst/www/LispBook/index.html
Both books are entirely free.
http://www.gigamonkeys.com/book/
If you want a very thorough and extremely easy to follow introductory text, check out this book:
http://www.cs.cmu.edu/afs/cs.cmu.edu/user/dst/www/LispBook/index.html
Both books are entirely free.
Lastly, as far as Lisp recommendations go it depends on your needs. What platform do you intend to develop on and for?
If you are looking at developing for Windows, Corman Lisp (http://www.cormanlisp.com/) is good and has a full featured demo. It says it has a 30 day limit, but after 30 days all you get is the occasional nag screen, so you can use it effectively until you have your app finished. It's pretty cheap (well, compared to some of the other offerings) too. It also has native support for Windows threads and some other Windows oriented features.
If you are on Linux, I'd take a look at SBCL (Steel Bank common lisp) or CMU CL. Both free, and both pretty well featured. I'd advise you to get eMacs as your editor/ide in this case. While not full of the bells and whistles of modern IDE's, it does seem to do teh job (I've not used it myself, however.)
The two big commercial offerings are LispWorks and Allegro Common Lisp. These both have a ton of features and much nicer IDE's than the above (although Corman's is decent.) They are expensive however - over $1000 for commercial projects. While the cost is probably prohibitive for most indies, they do have free trial versions with some minor limitations. You could, for instance, develop and debug in either of those two environments and then just compile your code with a free offering to get the best of both worlds. :) Of course, you can't use any of the non-ANSI standard stuff that they offer, then.
*Sorry for the massive hi-jacking!!
If you are looking at developing for Windows, Corman Lisp (http://www.cormanlisp.com/) is good and has a full featured demo. It says it has a 30 day limit, but after 30 days all you get is the occasional nag screen, so you can use it effectively until you have your app finished. It's pretty cheap (well, compared to some of the other offerings) too. It also has native support for Windows threads and some other Windows oriented features.
If you are on Linux, I'd take a look at SBCL (Steel Bank common lisp) or CMU CL. Both free, and both pretty well featured. I'd advise you to get eMacs as your editor/ide in this case. While not full of the bells and whistles of modern IDE's, it does seem to do teh job (I've not used it myself, however.)
The two big commercial offerings are LispWorks and Allegro Common Lisp. These both have a ton of features and much nicer IDE's than the above (although Corman's is decent.) They are expensive however - over $1000 for commercial projects. While the cost is probably prohibitive for most indies, they do have free trial versions with some minor limitations. You could, for instance, develop and debug in either of those two environments and then just compile your code with a free offering to get the best of both worlds. :) Of course, you can't use any of the non-ANSI standard stuff that they offer, then.
*Sorry for the massive hi-jacking!!
The only thing I'll admit to being difficult *after* getting used to the parenthesis is the prefix notation
Thats exactly what I'm talking about, most people can understand infix notation from what they've learnt at school. In my opinion C++ only sounds elegant when someone who doesnt program in it, is telling you about it.
I've been using C++ for years (professionally and in my spare time), and I like it, personally. I can usually program in C++ just as fast (if not faster) as I can in any other language. I'm not sure what you mean by "elegant", but when I program in C++, my brain seems to read the code as easily as if it was english (I can see through the code and read pure logic). Note: .NET C++ is another story.
A lot of the complaints about C++ is that it is hard to learn properly, which is true. C++ is a language with many features, and it can be quite disconcerting when you see an unfamiliar syntax. But once you learn the syntax properly, C++ becomes easy.
In many cases, programming in C++ is faster than a language like BASIC, due to compact (but logical) grouping operators like curly braces.
My main complaints about C++ is the way header and source files work, which can make projects a little more difficult to get started (including all the proper headers and libs, etc.), and a few minor inconsistencies in the language.
Dear John,
did you start in C++ or C?
did you start in C++ or C?
I'm not sure what you mean by "elegant", but when I program in C++, my brain seems to read the code as easily as if it was english
Well yes. But most latin languages are more elegant than English.What I ment was the the concept of oop (C++ over C), sounds really good, when you have it explained to you, or read the intro to any C++ book. However as soon as you start to use C++ is looses some of this elegance and neatness. It just as a language doenst liveup to its description.
C# with XNA is "managed code", and it's always going to run much slower than C/C++.
That depends on who codes the C++. Many people are having great results running XNA speed wise, even C++ experts.
Dear John,
did you start in C++ or C?
did you start in C++ or C?
I started in BASIC, then moved on to C, then on to C++. I don't think I would recommend anyone jump right into C++, but I'm sure it's possible.
Well yes. But most latin languages are more elegant than English.
That's a very good point. And it's true that C++ isn't the absolute universally optimal language. But it's the best for my purposes at the moment.
It just as a language doenst liveup to its description.
Maybe, but to be C++ lives up to almost everything I've ever expected it to be. Sure, it's not perfect, but it works pretty good, and I can be very productive with it.
That depends on who codes the C++. Many people are having great results running XNA speed wise, even C++ experts.
Yes, I've heard that "managed code" is actually faster than normal C++ in a few cases, although it seems strange that this could be true (what can be faster than raw optimized machine code?)
Anyone who thinks C# is slow needs to shut down the IDE and run a release build. Yeah, it's slow running in the huge VS2005 IDE, but run a release build without the IDE running in the background and it's nip and tuck between C# and unmanaged C++.