Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'd like to know if some of the major programming languages can absolutely not be used to create some very specific types of software.

By major programming language I mean the likes of C++, C#, Java, Ruby, Python. By "cannot be developed" I mean cannot be developed or it is unrealistic to do it due to performance, difficulty of implementation, etc.

I've always thought that any programming language could be used to solve any problem but lately I've been thinking that some languages are unsuitable for some projects.

If you can provide examples of such applications, it would be appreciated. Thanks.

share|improve this question
14  
Being unsuitable for a task and being unable to perform a task are two vastly different things. –  Covar May 11 '11 at 15:48
    
@Covar, I just changed task to project. Hope it's less confusing. –  mbillard May 11 '11 at 15:49
    
You are aware of the concept of Turing equivalence? –  user1249 May 13 '12 at 12:33
    
Related (to the question how well suited some languages are for specific cases): paulgraham.com/avg.html –  Doc Brown 16 hours ago

7 Answers 7

up vote 13 down vote accepted

Higher-level languages, especially ones that don't provide any means of fiddling with memory directly (from your list: Java, Ruby, Python) are unsuitable for systems programming. To give concrete examples, I wouldn't implement (part of - e.g. driver) an operating system or a virtual machine/interpreter in Python.

The inverse is not nearly as close to "impossible", but writing e.g. utility scripts or a prototype for complex and complicated software such as a compiler in e.g. C++ (doubly so in C) can be so cumbersome it becomes a motivation killer, considering that you get many smaller burdens atop of the actual problem.

share|improve this answer
    
It can still be done - see e.g. jnode.org which is an operating system written in Java. –  user1249 May 13 '12 at 12:33
1  
@ThorbjørnRavnAndersen Yes, such research projects pop up from time to time. However, they are a far shot from real-world projects. And if you attempt to implement e.g. memory management in Java (or Python, or any other memory-managed language), you have to severely restrict the language and end up with something that's a far shot from idiomatic code, or have to implement lots of extensions (cf. the GC framework of PyPy and the MMTK of Jikes RVM). –  delnan May 14 '12 at 13:27

I've always thought that any programming language could be used to solve any problem but lately I've been thinking that some languages are unsuitable for some projects.

Yes, that is correct and always has been. "Inability" and "Unsuitable" are vastly different.

You could bang a nail into a board with the butt end of a screw driver. You could drive a screw in with the edge of a claw hammer. But the hammer is vastly more suited towards and is a better tool for banging nails in, and a screwdriver is a better tool for threaded fasteners.

Programming languages are tools. Certain tools are better at certain tasks.

share|improve this answer

The only thing that I can think of as being unrealistic is development of low level device drivers in a highly virtualized language like Java or C# - if you're trying to manipulate hardware, the most awesome VM (which makes so many things so nice and simple) is going to get in your way. I'm sure it could be done, if you REALLY wanted to, but it would involve a lot of VM adaptations to make it work.

Anything else can pretty much be done in any language you like.

share|improve this answer
1  

Embedded system come to mind. It is unrealistic to program a router for instance, or some type of robotics using a language like C#. Although there are projects like netduin leveraging the micro framework so I may have disproved my own point.

share|improve this answer
1  
It's not necessarily unrealistic to use C# for a router or robotics. If you can cut down on programmer time using C# it can make the increase in computation needs worthwhile. That applies to any language/environment. –  whatsisname May 11 '11 at 16:14
    
@whatsisname: Of course, very serious routers are programmed in VHDL. :-) –  Zan Lynx Jul 6 '11 at 23:07

Absolutely, it all depends on the underlying hardware

For example, if I was going to program the Jaquard loom, I would not be able to use C++ to do it because no compiler exists for that hardware. I would posit that no compiler would be possible because the hardware does not support many of the requirements that C++ would require in order to work as a language.

An extension of this is into the world of analog computers which work in an entirely different manner to the digital ones that are prevalent today.

However, you could consider that given enough time you could come up with a compiler/assembler for any von Neumann machine (input->processor/storage->output). But some von Neumann machines, like the MU0, are just too simple to allow it to execute. More info on MU0 for the interested reader.

share|improve this answer
5  
Yes, however if the Jaquard loom could simulate a Turing machine, then you could write a c++ compiler for it, if you were so inclined. –  whatsisname May 11 '11 at 16:18
2  
@whatsisname, Turing-equivalency is only interesting if time used is not an issue. –  user1249 May 11 '11 at 18:24
    
In additional to Turing-equivalency, there is also the problem of I/O: Does it have a mechanism for communicating with the outside world during execution? If not, the language is like a brain in a vat. If it has at least one input and one output method, you can at least make a screen scraper for it. –  rwong May 12 '11 at 5:20

Yes, there are certain things that cannot be done with various languages. Here are some of the major criteria which affect that:

  • Low-Level: Device drivers and hardware control modules may require access to specific memory locations and assembly instructions. If the language provides no way to do this you simply can't use it (very few offer custom pointer locations and assembly)
  • Performance: In some cases it isn't just a matter of taking a long time, if you have a continuous, or live data feed, you have not choice but to be fast enough to process it in real-time.
  • Binary: For commercial production your requirements may be to distribute only binaries, many script-like languages have no binary forms.
  • Memory: For embedded and small footprint devices you have a very limited amount of memory (or other resources). Languages that need VM's or large standard libraries could not be targeted to such a machine.
  • Real-Time: Aside from just being fast enough, certain devices need to respond to events within a guaranteed time frame based on a given event. A language would need to both support the event and guarantee the processing time (something like a garbage collector would prevent this).
  • Mathematics: Many calculations require a full library of math functions and appropriate data types. Often this requires specific implementation details. Some scripting languages may not specify this well enough, or fail to provide key functions.
  • Compatibility: Some hardware just doesn't have compilers/interpreters for certain languages.

Those are some of things I could think of. I'm sure there are more. But the important point is that yes there are key limiting requirements that will prevent the use of a language.

share|improve this answer
1  
Many of these issues aren't inherent to the language, but are issues with our current implementations. –  whatsisname May 11 '11 at 16:43
1  
@whatsisname: To a certain extent, but different languages lend themselves to different implementations. Moreover, some languages cannot be optimized as much as others, the classic example being matrix routines where Fortran implementations could be much more aggressively optimized than pre-restrict C implementions. –  David Thornley May 11 '11 at 21:32
    
Garbage collection can be (and has been) made realtime. –  JUST MY correct OPINION May 12 '11 at 0:39

So called 4GL languages are constrained by the programming environment they are bound to. You couldn't program a GUI with ABAP, for example. All one can do is kind of like a GUI in the limited environment of a SAP client (and this can only run connected to a SAP instance).

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.