It may sound like a lot, but I am looking for a language that is cross platform that I can compile into a single stand alone exe. The source code needs to be secure (Not just hidden) and have some sort of gui toolkit. Do any exist?
In C++, I know 2 cross-platform UI toolkits: Qt and WxWidgets.
You won't find a language with more GUI toolkits or that is more cross-platform than the C programming language.
In python here is the list cross platform gui
For Java you can use Swings and AWT
Well, your source secure is a problem - how do you define secure and why do you think you need it like this?
Cross plattform with only one compilation - hits only on .NET/mono and Java, both not interpreted, but work with a intermediate compilation of some sort of VM. Code can be relatively easy decompiled, though it can be obfuscated.
Cross plattform with compilation for every plattform is far easier, with C, C++ and many many more your have a great choice. You could then watch out for your GUI-Toolkit of choice and check the languages that have bindings for it.
I use REAL Studio (formally REALbasic) for creating standalone cross-platform applications. The apps are also compiled and fully native, so it sounds like they would meet your definition of secure.
And REAL Studio is a lot easier to start with Qt (unless you already happen to be a C++ expert).
Related
As SO returns "4,476 search results for posts containing "win32 gui applications""... I'll have to ask a question that has probably been asked before but is lost in the midst of all those questions.
Currently, what are the options to write GUI applications for Win32, that have a big-enough following so that the environment offers enough and well-supported third-party tools?
I could come up with:
C++
Delphi, and possibly
RealBasic (although the fact that it's originally a Macintosh tool could result in small but noticeable issues in look 'n feel).
Besides their relative lack of well-supported third-party tools, solutions like Python + wxWidgets, or [Power|Pure|Free]Basic aren't good options: The former has too many 1.0 widgets (couldn't find a business-grade grid, for instance), and the latter are procedural languages so requires writing apps like Petzold's book with the lower productivity it entails.
Are there other solutions available?
Thank you.
Edit: Sorry for not having been precise enough: Big tools like .Net and Java are not options. I'm looking for tools that can either build a whole EXE statically (eg. Delphi) or provide a light enough runtime (VBClassic).
If you are new to programming I would suggest C# as well if you are only looking to make this app for the Windows Platform however with tools like Mono it can be ported to OS X and Linux Platforms.
Windows has their own IDE just for this called Visual Studio Express C#
Visual Studio's C#
As well as a version for C++ if you are wanting to say in that programming language.
The Mono project allows you to use C# in Linux and Mac as well as port the apps to iOS and Android
http://www.mono-project.com/Main_Page
You Can use C++ or You can even use the .net framework to develop your windows applications. .Net framework have lots of opensource contributed modules and paid modules and well as number of resources all over the internet to speed up the development compare to other options you have mentioned.
If you are going for a windows 32 gui application, I would prefer to go with .net framework, C++.
Java Swings also another best options which is platform independent as well.
You can use Lazarus as a free alternative to Delphi. Potentially you will have a very high possibility to check its "write once, compile anywhere" motto if you later decide to port your Win32 application to Linux or MacOS. In ideal case it will just work, but in reality you would probably need some conditional defines sections.
I am working on a new small utility desktop application but I am not really able to choose the GUI framework to use. I have worked on both JAVA,C# and C++, so language is not really a constraint. My criteria are:-
A very well designed architecture, something like QT. It's better if it follows typical C++ design methodologies.
Layout management should be easy, intuitive and not really cumbersome. I hate adjusting pixels on screen.
Its license should be open.
It should look good :)
Mentioned QT seems to comply to all your requirements. QT has "deploy everywhere" attribute, whilst Java needs no deploying at all (it depends on what is use of your utility).
Ad. 2 QT has really convenient GUI designer.
Ad. 3 LGPL. Usually it is enough.
Ad. 4 It is always matter of taste. IMO QT4 looks awesome under linux, but it's windows look'n'feel is correct at best. It's strong point is, that without additional tweaks it almost everywhere looks native.
I've been using Swing, and it works fine. NetBeans (a decent IDE by itself) even supports graphical GUI building.
It's well designed (basically
everything is done with listeners,
functions that are registered for a
certain event). It has bindings, so
you don't have to write code to set
up a value in a text field or read
it out
Layout is not perfect, but
acceptable within NetBeans. It's
WYSIWYG (almost). Look-and-feel can
be changed on the fly.
License is free. Source-code is not
available, I think.
Looks fine on Windows and Linux,
less so on OSX.
You could always try SWT. The advantages of Java with the standard L&F of supported operating systems.
Well designed. Lots of
documentation, and very easy to
develop with. (If you know Swing,
you can pick up SWT in no time.)
I believe layout managers do exist
that support SWT. I'm not positive
about this though, as I typically
don't use layout managers too much.
Uses the Eclipse Public
License. Should meet most of
your requirements.
From Wikipedia on SWT:
SWT is written in Java. To display GUI elements, the SWT implementation accesses the native GUI libraries of the operating system using JNI (Java Native Interface) in a manner that is similar to those programs written using operating system-specific APIs. Programs that call SWT are portable, but the implementation of the toolkit, despite the fact that it is written in Java, is unique for each platform.
Hope that helps you.
I'd suggest wxWidgets if you want to program in C++ or wxPython (the python language binding of wxWidgets if you know or don't mind learning Python.
Architecture is similar to QT I think.
Layout using sizers. Quite easy once you get the hang of it.
Liberal open source license.
Widgets are native on all platforms (Windows, Mac OS X, Linux).
How do you port a Cocoa/Mac application to Windows? I mean how would you go about it? Assume the app was written with Objective-C and Cocoa, there's nothing fancy going on, no "engine" that could be factored out, etc.
Rewrite from scratch? I don't think there will be huge overlaps between the Mac and Windows codebases, right?
I have doubts about cocotron.
Its not clear from the cocotron website that cocotron is actually production ready yet. Id suspect that it would be possible to start new app development and use cocotron constantly to maintain and test windows builds on the go.
But to retrofit it into an existing project might be a much larger task. There are also no alternatives to cocotron - other than perhaps gnustep.
The practical approach to cross platform development involves developing the non gui components of your application, once, in C or C++. And then using a cross platform GUI library like QT - which is VERY good at generating and using native UI where possible or faking it where not. Please DO go to qt.nokia.com and download the latest build of QTCreator for windows and mac - See how the same QT application looks and feels very convincingly native on both platforms.
If QT doesn't provide a native enough solution, then you need to develop your GUI twice :- once in Cocoa, and once in Win32. The cocoa GUI would be in objective C of course, the Win32 GUI in C/C++.
Your non gui application code would - written in c++ - not be able to call Objective-C directly, but its not hard to write shim classes, implemented in .mm files - the provide a c++ interface, and wrap access to an objective c object or class.
You are also going to have to come up with an alternative to CoreData on windows - perhaps sqlite? Given that XCode has integrated support for the sqlite framework, and testing multiple code paths is, well, more work - perhaps dropping CoreData in favor of a common layer is a better approach?
The problem with Objective C is its very poor support on any platform that is not OS X. You can attempt to use the Cocotron, but I wouldn't consider it production ready yet.
For portability, a re-write is in order. With judicious use of standard C or C++ for the "core" of the application, you could still implement platform specific GUI code. If you don't like maintaining two GUIs, you can also try a toolkit such as Qt
Depending on which objects and framework you are using for your cocoa app, you might be able to get away with using gnustep, although the end result will probably look very weird to windows users, and the development environment might be a bit difficult to setup at first.
Are you aware of Cocotron? It looks like the project may have gone stale, but it's a good starting point anyway. It's a project to port Core APIs.
If your application is not cleanly separated (ie: a la MVC) then the only solution is a rewrite, I think.
I never did to much GUI programming (besides a bit of QT and Delphi).
I need to write simple GUI app which would interactively visualize graphs.
Very similar tool to "GraphViz GUI for Mac".
What would you suggest?
Thanks.
I think it really depends on the platform that you're targeting. If you are writing native apps for the Mac, Objective-C is probably the best choice, as the APIs are built around that. If you're writing for Windows, you probably want C/C++ or C#, for the same reason. Cross-platform apps would make you choose a platform-neutral language, such as Java, or Python (as jldupont suggested).
I use quite a few and I'd say C# in Visual Studio on Windows (which is great, and free!), and something like C#+MonoDevelop (or equally a scripting language like Perl) and Glade/GTK on Linux/BSD/other UNIX's while on Mac OS then XCode and Interface Builder are the obvious choice.
I would say C# with Visual Studio Express is the easiest and XCode and Interface Builder have the steepest learning curve. I've not used QT though, so can't compare but imagine it's similar to GTK.
Thinking outside the box a little REALBasic is also excellent at getting the job done (if you can get past the fact that it's OO Basic). It's not free but they recently greatly reduced the price and it's really great to use for simple GUI app development.
Consider Python with PyGTK: cross-platform, documented, proven.
JRuby is a good choice - it's cross platform, and you get the double benefit of a large number of components available for java (for instance, someone probably has done an interactive graph visualisation panel already) and the ability to connect and use them from ruby (which is a great language to program in).
I want to write a front-end to an application written in C/C++.
I use Solaris 10 and plan to port the application to some other architectures (Windows first).
I'd recommend taking a look at wxWidgets to provide some cross platform UI widgets that will work on Solaris and Windows.
Qt 4 is the best tool for this job. If you want to work with other languages, it also has bindings for Java and Python
On a Mac, this would be easy. The Cocoa API is great when programming in Objective C (which compiles fine with C/C++ files).
Otherwise the situation is a bit more grim. As for Rapid prototype, you might want to check the CodeGear (Borland/C++ Builder) tools. I think their VCL library is cross-platform.
Otherwise, you could interface with a scripting language like Ruby and use fantastic front end libraries like Shoes. Python also interfaces with wxWidgets to make writing cross-platform front ends easy. Keep in mind that this all requires taking time to make sure your C/C++ code can talk to the scripting language. This is not trivial, and the amount of effort required depends upon the style of your code base. (Oh my God.)
Lastly, you could just use wxWidgets itself. This might be your best bet since it requires no additional overhead than coding the UI itself. That said, C++ is not the greatest language for designing UIs.
And super lastly, consider writing a code generator that converts from say Shoes to whatever wxWidgets code is needed to generate the same Shoes app. That way you can do easier UI design but still get C++ code in the end. Likewise, you could code gen off of the Python/wxWidgets code. Then sell such a code generator. :-)
GTK-- and Glade.
Thats' the C++ bindings on GTK
GTK will work on windows ( just look at GIMP )
Works everywhere, no QT license to mess with your millions-making.
I use wxWidgets myself. It makes good use of the C++ language features and uses smart pointers, so object and memory management is not that hard. In fact, it feels like writing in a scripting language.
Coupled with a dialog editor/code generator like wxFormBuilder or wxDesigner, (links to screenshots) it becomes a good toolkit for rapid development.
Have a look at FLTK which supports X11 and Windows.
Ultimate++ is a cross platform rapid application development framework for C++. It is aimed specifically at rapid development. The Ultimate++ website provides some comparisons to other frameworks mentioned such as Qt and wxWidgets.
I have used ASP.NET Web Forms to make UI front-end to collection of command line application written in legacy language, RESTful-ish web service, and bash scripts.
Once it works on Firefox, it should work at least on Firefox on other architecture. If you haven't played around with it, you should give ASP.NET a try (ASP.NET MVC seems to be the current trend). Not quite the same as RAD, but it does give you visual design of forms etc.