Fave languages - and why?

Community Forums/General Help/Fave languages - and why?

Steve Elliott(Posted 2013) [#1]
Over the years I've used quite a few languages. My faves were Fast BASIC, Hisoft BASIC and STOS on the Atari ST, Pascal, C and to a degree C++, and of course BlitzMax.

What were your favorite languages and why? And what didn't you like?


GfK(Posted 2013) [#2]
Fave: AmosPro
Crap: Amos3D


Hotshot2005(Posted 2013) [#3]
STOS? Ughhh That really horrible because when you want to look code up then it all gone.....WTF

My Fav Language AmosPro on Amiga, Blitz 3D/Purebasic on PC because all of them are easy to used

Python? Lot easier than C++ and less stressful

C++? They are alright but you have do memory alloctions which suck! :(

Java? I hate them and why does I have type actionlisten this and that....Zzzz Zzzz so Dull :(

C#? They are much fun to do

Assembler? I think my point of view on Assembler is waste of time and it take lots of patient to understand them!


Yasha(Posted 2013) [#4]
I particularly like two attributes of languages:

-- focus
-- extensibility

'Focus' meaning that the language defines a small core where every feature has a unique role: no duplication, no features that can't be defined in terms of other features, and a core feature set that reflects the kind of problems the language was developed to solve. I want to feel my mind exploring and inhabiting as much as possible of the language-space, know that I am completely and competently wielding a well-defined sharp-edged tool, and have a total understanding of everything that's going on in what I've written. I'd rather use a different tool when I come to a different problem than feel I'm not properly directing myself at the current one because I can't aim the language at it precisely enough.

'Extensibility' meaning that this small core probably isn't going to be enough to express everything you want, so a great language makes it easy to compose its existing features together and create new ones. Seamlessly slotting in the parts I need to work with whatever is already there. Remodelling the language into something more precise and more closely reflecting the task I want it to solve, because no off-the-shelf general purpose language is optimised for expressing a particular solution.


So, two languages I really like that meet both of these criteria:

-- C
-- Scheme

Both of these are brilliantly minimal languages. A moderately-experienced user can easily hold the entirety of either language in their head in one go while writing. Both are tightly focused, too: C on playing with memory, Scheme on algorithmic purity. And both have fantastically powerful extension mechanisms that enable complete reconfiguration of the language into something else entirely: C's preprocessor is, for instance, powerful enough to turn a C compiler into a BASIC compiler, or add things like exceptions, lambdas, arbitrary metaprogramming or full OOP; Scheme's macro system is even more powerful, perfectly capable of turning Scheme from a Lisp into a statically-typed infix language if you so desire.

So on the one hand you have the wonderful sensation of power that comes with a tightly focused tool, while on the other hand you aren't limited by that focus - if I decide my C program needs 'noGC' annotations or that my Scheme program needs a pluggable object system, in they go without complaint. The particular combination of light+infinite also makes them excellent testbeds for new ideas or prototype features without needing to rebuild an entire compiler as you would with some other languages. For instance I am interested in developing a language with a practical linear type system; you can actually do that using C as a platform.


Languages that I particularly dislike for particular reasons:

-- Common Lisp
-- C++
-- Python

Common Lisp and C++ both fail at focus. Common Lisp thinks it can throw in everything as a library and still be coherent, leading to a vast standard library nobody can be bothered to read and duplication of effort (although I'll admit that the real reason I dislike it is because it's a Lisp-2, which is just nasty). C++... I have whined about at length, but I think the point stands that nobody ever uses all of the language in one go (not least because you can't: templates vs. macros, pointers vs. references... the language is literally fighting itself). Python I dislike because of the community's insistence on doing things the One Right Way, which flies counter to the entire notion of reconfiguring a tool to suit a task that I personally value so much, and which I think is a seriously ineffective way to work or think about problems.


Honourable mentions:

-- Standard ML is a stunningly beautiful language, thanks to its clean formal definition and absolutely solid theoretical foundations. Its weakness is that it is a little bit limiting at times in favour of making the mathematics behind it perfect, at the price of some usability. It also doesn't have any facility for metaprogramming. An ML close to SML but with metaprogramming, existentials, and finer memory control, might well be my perfect language. (Adding these things and making them usable is no simple task, however.)

-- bc and dc. Hilariously good fun. Go play with 'em!

-- PicoLisp. This is minimalism taken quite possibly to an extreme. It's a bit of a throwback with its dynamic scope and fexprs, but delightfully mindbending to work with. Note that the combination of dynamic scope and fexprs means that PicoLisp has the interesting attribute of being completely impossible to compile (despite being really easy to interpret).


If you're interested in languages for their own sake, the place to discuss them online is Lambda The Ultimate. Expect to learn... a lot.


Blitz3D and BlitzMax are obviously also among my favourites. The languages themselves... are a bit old-fashioned once you've looked around the larger scene. But this site is a wonderful resource filled with wonderful people and that's almost as important than the actual features offered by the languages.


*(Posted 2013) [#5]
My favourite languages are:
1) C++, it will always be the best language for loads of tasks that I used to use before the latest crop of ease to use languages come along.

2) BlitzMax, its easier than C++ but not as powerful in some areas without help ;)

3) Blitz3d, another great language but sadly limited by its platform specifics.

4) Blitz Basic 2.1 (Amiga) another great language that really mad coding fun on the ol' A500/A1200 :)

5) Amstrad basic - very simple easy to use for the most part.

6) ZX Spectrum basic - relatively easy to use :)

7) ASM - yes it has to be here somewhere, ASM is the most powerful language known to man. Unfortunately its also the hardest to learn and the least portable.


virtlands(Posted 2013) [#6]
My favorite languages :
Blitz3D, PureBasic, some assembly language.


Captain Wicker (crazy hillbilly)(Posted 2013) [#7]
favorite languages list, starting with absolute favorite.

1. NuclearBasic
2. BlitzMax
3. Dark Basic Pro
4. Blitz3D
5. C++ with Irrlicht, DarkGDK, or NuclearFusion
6. BlitzPlus (just for the GUI)
7. FreeBASIC with OpenB3D (minib3d clone) or Irrlicht Wrapper
8. Python + PyGame
9. and my least favorite (what I am currently hooked on) is MinPSPW + Irrlicht wrapper (homebrew sdk)

You can call this my top 9, because I don't know of anything else that I actually like to use. LOL


xlsior(Posted 2013) [#8]
Amos Pro is still my favorite, with blitzMax coming in second.


Steve Elliott(Posted 2013) [#9]
Yasha, fantastic information as always - thanks. Taken aback by how similar your thoughts are too mine - especially with regard focus. "wielding a well-defined sharp-edged tool". I think the IDE in conjunction with the language are vital for that kind of experience.

Amos Pro I never used, but yes I can see why it was thought of fondly. I've never used action! either, but again a couple of nice features.

Nuclear BASIC has a good engine, but the language itself is too old school for me.


Matty(Posted 2013) [#10]
I've used a few languages and enjoy most of them. I quite enjoy Pronto 4GL coding - which I do at work. Not too much of a fan of php, but I like javascript. Not saying php is a bad language - just that I don't particularly like some aspects of it.

I like monkey, it seems like a nice language to work in...

I don't like SAP ABAP programming - what a nightmare hodge podge of garbled messily structured goop (technical term ;-) to work with....never want to touch it again.


ima747(Posted 2013) [#11]
I absolutely despised Objective C when I first picked it up but it has slowly become my go-to language. A few reasons why I like it.
- Highly readable. Functions are basically sentences so unless someone has completely shoe horned Pascal/C syntax into their ObjC method names (seen it done... its NOT pretty) things just do what they say. Far easier to go back to a project since it is (to some extent) self documenting as a result.
- Memory handling. If you use ARC you can essentially pretend there's a garbage collector, only it's crazy faster. And if you really want finite control over memory you can do that to. Best of both worlds IMO. I know what's going on, I can take control if I want to, but I can also just let it do it's thing and not worry about GC overhead etc.
- C friendly. Just shove some C in anywhere you like and you're fine. Great for when you're pulling code blocks from other projects, or opensource stuff etc. No need to refactor or create interfaces, just copy/paste. You can also interface with C++ the same way with relative ease (generally just change the file name).

It's FAR from a perfect language, documentation can be excellent or horrifying depending on how you go about it and what you're looking for. Lots of people hate the syntax. Has an apple association which is enough for lots of people to just flip out (If you hate something because it's apple you're just as bad as the people that love something because it's apple, you're just the other side of the fence... and I don't put myself above that, just making a note :). Just for me the control is natural. Nothing loose and ugly (my opinion of Java) but not quite as restrictive as C/C++ with as much redundant header file work (there's still plenty, but it's simpler in my mind anyway).


I'm warming to javascript. The further from web pages I take it the more I enjoy it.
Despise Java. It just feels unnatural. All the IDE's i've tried drive me bat-shit crazy for one reason or another (mostly because they're usually written in Java so they're slow and unstable...). Can't really put my finger on it exactly besides the IDE issues, but we just don't get on well at all.
PHP is nice for what it is. You just tell a web page to do something and it does, no real fuss, always nice to not have to fight with the language etc.
I used to love Perl but I haven't touched it in years and it seemed a little backwards the last time I looked at it...
Just rambling now... tah


Yasha(Posted 2013) [#12]
Objective-C is a nice language, but it does have a couple of big problems:

1) It's Apple. Not a problem because of Apple, but a problem because it's not ISO. Apple add and remove features from their own compiler all the time, with no reference implementation or standard version to actually make the language portable in any way (there are a couple of other compilers, but GCC is missing a lot of interesting features and Portable Object Compiler is totally incompatible with Clang; neither are standardised). Apple have kinda weaponised the language in the same way Microsoft did with C++ so that you have to decide between the portable base, and their superior but locked-down version of it.

2) The rate at which Apple are adding features is a little worrying. The language is getting quite big these days. Edging closer every day to C++ levels of overkill.

3) The language isn't being designed consistently, but seems quite ad-hoc. Features are added at multiple levels of the toolchain and all seem to exist in their own design space (e.g. ARC actually has nothing to do with Objective-C: it's a Clang static analysis applied after the language-level features have all been parsed out). Features are also often quite muddy in their design (e.g. blocks were rejected from inclusion into ISO C because they take away too much of the programmer's control over memory allocation; the runtime gets to decide how to implement them and it may not do so consistently). Objective-C used to be really great, because it was a clean preprocessing layer pasted on top of pure C; nowadays, there's quite a lot of Objective stuff left in at runtime and again it's heading down the C++ route of code not meaning what it looks like it means.

4) Politics. Being Apple's baby means it has to be different. ARC is actually a good example of this: while it's tightly optimised and probably the best solution for Cocoa on iOS written in Objective-C, it is by no means superior to garbage collection in all cases (it's actually just a slightly more badass version of what BlitzMax uses); in fact for many language/platform combinations it would be substantially inferior to true GC... but at this point Apple's reality distortion field will activate and try to overrule decades of CS research on memory management. It's a nuisance because it gets in the way of establishing an objective assessment of the toolkit (ARC is great, we just need honesty).


It's still a really nice language, but it's currently in a bit of a fragile position.


virtlands(Posted 2013) [#13]
Just out of curiosity, here are other objectives.:

Objective-C:
http://www.roseindia.net/iphone/objectivec/objective-c-windows.shtml
http://www.gnustep.org/resources/sources.html

Objeck: https://sourceforge.net/projects/objeck-lang/

Objective-J : http://www.cappuccino-project.org/#features
Objective-Rex : http://www.oorexx.org/

Objective Pascals:
Oxygene http://www.remobjects.com/oxygene/ {not free}
Free Pascal : http://www.freepascal.org/ {is free}

Massive list of Object-Oriented Languages: http://tinyurl.com/2494yz
--------------------------------------------------------------------------
Other interesting languages worth mentioning:

SheerPower 4GL : http://www.sp4gl.com/
Alice : http://www.ps.uni-saarland.de/alice/


ima747(Posted 2013) [#14]
Re: Yasha

Indeed, Apple is doing it's own thing but (IMO anyway) the language wouldn't really exist in any real world usable state without them. If MS can have C# and people like it (as some do) then Apple taking the reigns on Objective C can't be all bad (nor all good). While it is getting pretty bloated and inconsistent in some places, those are largely OS specific things (New UI base types etc.) the base of the language itself (the part that could in theory be portable) is basically just C but with Objects, rather than C with objects added on as another layer (i.e. C++). So in a modern world where objective programming is pretty much required for any reasonable consistency in a project C falls short, and C++ brings tons of baggage on just the object level (let alone all the stuff that sits on top of that). As relates ARC I disagree. It isn't garbage collection. It is just a huge chunk of analysis and preprocessing that does all the manual handling (the old retain releases) for you. Now a person is always better than a machine (and yay! you can turn if off for anything you want) but again in the real world a human is more likely to mess up than a machine (notice how iOS apps in general have gotten a lot more stable since ARC was introduced? The OS isn't any better, ARC just keeps devs from screwing their own memory as frequently, myself included). And again, you can turn it off an take over by hand any time you want. I've never trusted garbage collection (a pox on you Java!). And not having the system monitoring a pool on any level I believe leads to faster execution (no overhead and pauses for the memory to get sorted out which happens all the time when you're thrashing it), and more reliable available memory (if something's not in use it will get released right away. If it's in the floater space where a garbage collector would sweep it up it will get cleaned up with an auto release from the pool on the next cycle, which will be, at worst, the same time the GC would have gotten to it.) This is all opinion, but based on real world experience rather than synthetic benchmarking so I'm happy with it anyway.

Blocks are indeed a double edged sword however. They bring some definite drawbacks, but ARC actually helps keep those in check (again IMO). The benefits are pretty great as well however (MUCH shallower learning curve for multithreading safely for example). Still torn over them myself, in that I like what they can do, but in an old man waving a cane type way I wish people did things like they did in the old days grumble grumble... I see them mostly as a way to bring one of the few things I kinda like about Java (the ability to wrap a block of code up in a little package and hand it around so you don't have to personally keep track of it, it's just associated with whatever needs it) to a language I prefer in a way that I find a bit easier to use.

All opinion on my part, maybe based on nothing but my own imagination, but there we are.

On the subject of Apple closing it off, I think that they actually are trying really hard to get Objective C and their tools etc. out there and as open as possible. I base this on my experience with some of the dev team at last years WWDC. However I think the real bottle neck is there just isn't enough time. Apple really doesn't have as many developers as people imagine (and their money stockpile would lead you to believe). Could go into much more detail but it's all speculative and not related to the thread so I'll store it for another day.


Yasha(Posted 2013) [#15]
not having the system monitoring a pool on any level I believe leads to faster execution




(EDIT: Crunched because only like two people are interested in this. I wouldn't read a post that long either!)


GfK(Posted 2013) [#16]
@Yasha: Just a small observation - I for one can't be bothered to read lengthy, rambling posts. They're the death of many a thread.


MCP(Posted 2013) [#17]
Amiga

Hisoft Devpac 3
Lattice SAS C
BlitzBasic 2.1


PC

C++
Purebasic


ziggy(Posted 2013) [#18]
My favourite languages:

- Monkey
- C#
- Java
- D
- BlitzMax

Not for technical reasons but for the fun I've got from using them.


virtlands(Posted 2013) [#19]
The following languages/packages are also interesting for study :

CygWin : http://www.cygwin.com/
"R" Programming : http://www.r-project.org/
The iGraph Library: http://igraph.sourceforge.net/

R has the potential for adding lots and lots of add-ons.

Python is fun, but creepy & cryptic. I'm still in the process of
trying to understand it.

Example: iGraph works for both Python and R,...


Blitzplotter(Posted 2013) [#20]
My favourite languages are:

1) Blitz 3D, anything you want to do in 3D is possible in this language - some of the physics libs make it almost bewildering the things you can achieve.

2) Blitz Basic 2.1 - Ooodles of coding fun within this on my Amiga 1200, Plotting graphs on my 1200 x 512 pixels on my 1084S monitor, kewl.

3) ZX Spectrum Basic - where I developed my love/addiction/habit of hobby coding.

4) Blitz Max - wrote my first ever indie product to be sanctioned by a body responsible for delivering educational software to schools, the prototype for which was made in Blitz3D

5) C - Managed to write space invaders in a terminal window once.

6) VB6 & some express versions of it - a bit clunky in places but managed to make some reasonable front ends with this.

7) Monkey - I can see the potential of this but I need an extra 5 hours in the day to get on with it.

8) Javascript - it is wonderous what can be coded within a web browser these days with the likes of paper.js and others....


Ringo(Posted 2013) [#21]
C nothing else nothing more.

Blitz3d for prototyping.