8

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.

4
  • 15
    Being unsuitable for a task and being unable to perform a task are two vastly different things.
    – Covar
    Commented May 11, 2011 at 15:48
  • @Covar, I just changed task to project. Hope it's less confusing.
    – mbillard
    Commented May 11, 2011 at 15:49
  • You are aware of the concept of Turing equivalence?
    – user1249
    Commented May 13, 2012 at 12:33
  • 1
    Related (to the question how well suited some languages are for specific cases): paulgraham.com/avg.html
    – Doc Brown
    Commented Dec 28, 2014 at 12:54

7 Answers 7

13

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.

2
  • It can still be done - see e.g. jnode.org which is an operating system written in Java.
    – user1249
    Commented May 13, 2012 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).
    – user7043
    Commented May 14, 2012 at 13:27
7

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.

3
  • 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. Commented May 11, 2011 at 16:18
  • 2
    @whatsisname, Turing-equivalency is only interesting if time used is not an issue.
    – user1249
    Commented May 11, 2011 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
    Commented May 12, 2011 at 5:20
6

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.

3
  • 1
    Many of these issues aren't inherent to the language, but are issues with our current implementations. Commented May 11, 2011 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. Commented May 11, 2011 at 21:32
  • 1
    Garbage collection can be (and has been) made realtime. Commented May 12, 2011 at 0:39
4

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.

1

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.

1
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.

2
  • 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. Commented May 11, 2011 at 16:14
  • @whatsisname: Of course, very serious routers are programmed in VHDL. :-)
    – Zan Lynx
    Commented Jul 6, 2011 at 23:07
0

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).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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