Ocaml learning resources [closed] - java

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 8 years ago.
Improve this question
We are thinking of using functional languages in our projects. I'm trying to collect points on which functional language we can start with(we are mainly java developers). We are thinking of using Ocaml.
I tried learning from their website ocaml.org. I've following questions for those who use Ocaml at their workplace.
Does Ocaml reduce lines of code compared to say Java?
What editors do you use ?
I have see that there are many Ocaml library implementations-
Batteries,Core etc.In the beginning can only Batteries suffice?
Do you use Ocaml Core(by Jane Street)? How different is it compared
to standard one?
In the beginning, we are planing to use Ocaml in very small amount,possibly in house project.

At Vector Fabrics, we are using OCaml extensively.
Having recognised the advantages that functional programming could bring to our engineering activities (we are mainly constructing software tools for analysing C and C++ programs), we considered both Haskell and OCaml as languages to use. In the end, we decided to go for OCaml, mostly because its execution model is simpler (eager evaluation vs. Haskell's lazy evaluation) and therefore reasoning about the behaviour of programs is somewhat simpler for programmers who do not necessarily have a background in functional programming (we were especially concerned with reasoning about the space behaviour of programs, with is, sometimes even for experts, quite challenging in Haskell).
OCaml allowing you to selectively "escape" to imperative and even object-oriented programming is something that sometimes comes in handy but not something we recommend to our programmers as a good practice in everyday programming. Our rationale: once you adopt a functional programming language, you better use it to do functional programming in, otherwise you can easily end up writing imperative and object-oriented programs in (for that purposes) clumsy syntax. After all, if you're problem domain is better served with object-oriented programming, then you're better off selecting a language like Java that is far better suited for that.
Answering your questions:
Does Ocaml reduce lines of code compared to say Java? Yes, but only if indeed adopt a "functional style" of programming. Also, be careful: functional programs can be beautifully concise, but sometimes notation can obscure the inherent complexity of algorithms.
What editors do you use? We mainly use general-purpose editors like emacs and vim.
I have see that there are many Ocaml library implementations- Batteries,Core etc.In the beginning can only Batteries suffice? Batteries makes for a nice and arguably powerful-enough standard library (but so does Core). Depending on your problem domain, you may need to extend the standard libraries with your own utility libraries.
Do you use Ocaml Core(by Jane Street)? How different is it compared to standard one? We don't use it, but see, e.g., What are the pros and cons of Batteries and Core?.
Note that these questions have many possible answers and that I have answered them to a large extent exclusively from the Vector Fabrics perspective. In fact, your question may be a bit too broad for Stack Overflow.

Related

Learning JavaCV in pure Java [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 7 years ago.
Improve this question
I am trying to learn JavaCV. As you all know, the lack of educational materials on this subject is a very big problem. In JavCV home page, they have provided lot of examples for the C++ examples in book "OpenCV CookBook". But the case is, they are not Java, they are in SCALA!!!! Now I have already gone crazy! I know lot of examples are in web, but I want to learn it from beginning to advance, then only I can do it properly. "OpenCV CookBook" is a very good book but it is all about OpenCV in C++, not anything about Java.
Someone please help me to find a better place to learn JavaCV. Provide me whatever, URL, Book, etc. But it must be about learning JavaCV in 100% Java, not in Scala, C++, C or whatever other language! Please help!
< update >
Times change - and so does OpenCV. Right now, a pure Java wrapper (not Android) is growing fast, allowing anyone to use OpenCV functions directly in desktop Java apps/
< /update >
You can find some tutorials in Java in the OpenCV samples directory: samples/android.
You can also find some more info here.
Now, I am pretty sure you will say you want Java, but not Android :). But this requires an explanation.
For various reasons - the main one being efficiency and the second one portability to embedded platforms, computer vision is done almost entirely in C/C++. It is the de facto standard. Everybody uses it, with good reasons, and good results.
There are different adapters to the C++ code base, like Python and Java, but they exist to fill some specific gaps: Python is used for fast prototyping, and Java for interfacing the Android main language. But in all scenarios, the 'real' algorithm development is done with C/C++. This is why nobody cares about tutorials/books/examples in other languages.
Conclusion: If you want to learn image processing, learn C++ or Python. If you want to build some app, learn the OpenCV java interface from docs/android tutorials. But do not expect flexibility or control over performance.
Updated note
There are two more things to specify here.
First, as Android gets on its wheels, and Python proves more and more popular, the content available in the two languages (and others) are increasing dramatically. But for the years to come, the core development group - and the best docs - will be in the C++ area.
Last, but not least, you should keep in mind that in any work or programming area, if you stick to one language, you're dead. Principles matter, and you should be able to implement them in a variety of languages, and you should be able to read and understand from a variety of sources. What about a programmer that says he is not able to translate pseudo-code into Java? It's quite the same with other languages.
You can read the great blog post Don't call yourself a programmer to understand why you should forget about programming in one language.

How do you integrate functional programming languages to Java or C#? [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 6 years ago.
Improve this question
I am interested in using OCaml or Haskell to develop an engine for statistical computing. This functionality is supposed to work on data that is going to be provided by a model driven, Object Oriented information system. The whole thing needs to scale up and out.
I can see a lot of benefits in using Haskell for example, but getting the data in an out of the Haskell code is tricky. There are always out of the box options like C/C++ interfaces or JNI, but in an architecture which is supposed to scale, I find these approaches problematic and error prone.
Considering FP is on the rise, how do people integrate these languages into widely used languages, hence technologies such as Java? I have been using ZeroMQ and Protocol Buffers for Eiffel to Java integration for example, but are there any options which has proven to be stable and high performance?
Ps: Stackoverflow warns me that this question appears subjective, but I am asking about actual technical solutions to connect different runtimes. I have no intention of discussing pros/cons of any language or paradigm.
Have you considered using Scala? It supports functional programming on a JVM platform. You could integrate it with Java, but you might find that is not needed.
You may also find it is faster than Haskell, esp. with tighter integration with Java.
http://benchmarksgame.alioth.debian.org/u64q/which-programs-are-fastest.html
F# will give you functional programming with the .Net platform for "free".
OcamlJava can interface Java with Ocaml:
OCaml-Java is an effort to make Objective Caml available on the Java platform, currently supporting 3.11.2. The project has two concrete objectives: first, the ability to run Objective Caml sources that have been compiled using ocamlc; second, the ability to compile Objective Caml sources into executable jar files.
You use languages such as Scala, i.e. languages that already run on the JVM.
There are plenty functional languages that run on the JVM and thus integrate quite nicely with the rest of the java code.
My favorite is Scala, but there is also Clojure and Groovy, just to mention a few.
Using Scala or F# would be the real solutions as others say, but just in case if you like something easier to start with, you can also do some functional programming in Java (or C#) like these people https://www.google.com/search?q=functional+programming+java as FP is a programming style that favors immutability.

Programming language decision for C++ legacy project workflow [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 5 years ago.
Improve this question
I have quite a lot of C++ legacy code modules from my colleagues, unfortunately poorly written. Each is doing a different job, but they are all GNU C++ code running under Linux.
I want to write a controller program, to make a singular C++ module for a workflow, for a very urgent demo. Also I need to write a front-end web-app allowing clients submitting jobs to the controller.
My main criteria are:
development speed (very urgent demo)
good binding with C++ (I have legacy code I do not want to rewrite in another language)
smooth introduction of new programming language to team (has some python, java and perl knowledge)
What programming language fits my needs best, and why?
Details:
I lean towards python for its perfect binding with C++, as writing JNI is too much work, and kind of obsolete nowadays. However, no one in my team is Python programmer; I do know some Python (no experience in server side programming at all). I have been developing Java EE apps last year, but I do not think JNI is a good solution. Only one team member knows some Perl, others are pure C++ programmers.
Noting the "very urgent demo" part, assuming that that would take about a month, depending on the complexity, I'd stick to the familiar.
True, maintaining python would be easier in the end, and learning python should be a breeze, if you deem it viable.
I'd say, have the team learn python and do the basic stuff, as you learn the deeper parts, you could build classes for them to extend/implement. That way, you get things done as they learn.
Given the urgency, I'd have to stick with C++.
Without that, I'd say keep what you got, but feel free to switch to a preferred language when refactoring. That would be the time to do it.
What you should not do, ever, is "port" anything to another language without rewriting or changing functionality in any way. It is a total waste of time, when the "best" outcome you can hope for is that it has no new bugs when you are done.
I would use Python. You could write very basic wrappers using the Python C API and then call said functions from Python with relative ease.

Examples of Object-Oriented Projects Help Procedural Programmers [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 7 years ago.
Improve this question
Please help me identify some small to medium sized open source projects that embody object oriented design (preferably in C++ or Java). I would like to use these projects to demonstrate how real world problems (as opposed to contrived text book examples) can be solved with an object oriented design. I want to be able to present a plausible explanation of why certain things were chosen to be objects and how they all work together to solve a problem.
Google Chromium (C++): windows, tabs, plugins etc. are all classes.
The Unreal Tournament Public Source Code (432 Headers) contains the declarations of the Unreal engine class library written in C++. I found it to be a rich example of a large object-oriented program. It taught me a lot about how to modularize and object-orient my code. It also demonstrates many tactics for getting a handle on a large code base.
Also, because all you can read are header files, you'll have a fun (and educational) time trying to figure out how the whole thing comes together. (I actually ended up writing my own x86 disassembler so I could cheat and read some of the definitions!)
On the same note, the Doom 3 SDK contains a large chunk of the Doom/Quake engine written in very readable C++.
Just about any large project designed in Java is object-oriented, almost by definition. You can take a look at Apache Hadoop as a large-scale, open-source, objected oriented project written in Java. Another is Apache Ant.
Eclipse would be a good example on the Java side: the plugin architecture is all object oriented.
I asked the same thing to my OO mentor. He pointed me to the JUnit sources, with the recommendation to see how it evolved version by version. This would show you how Kent Beck writes Java code.
Another example on this vein would be the sources of Fit by Ward Cunningham.

Java to C cross compilation [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 6 years ago.
Improve this question
Does anyone know of a good Java to C cross compiler?
Do they work well?
This is very similar to this question, and answers may be helpful to you: Compiler to translate Java to C.
Summary: There are tools for this (Toba, GCJ, etc), but you may run into problems with not all of the Java libraries being ported. In the end, tools will probably only do PART of the work, and you'll have to hand-code some of the rest.
A good first step is to convert your Java code to only use standard libraries available in Java 1.4. In fact, you'll probably want to wean as much as possible off of anything not in java.lang.* or java.util.* packages in order to simplify the porting procedure.
Depending on the size of your codebase, it may actually be easier to rewrite the bulk directly rather than relying on tools. Java and C have a lot of syntax similarity, but the mismatch between C's straight procedural code, and Java's object oriented features could cause problems. Automated tools may generate virtually unmaintainable C code when trying to work around this, and there's always the possibility for subtle bugs.
2016 update: Don't do this, not now, not ever. The options that used to provide this have not been maintained (GCJ, for example), and it's arguably easier to find a developer fluent in java than C. Also, Java performance has continued to improve, and baseline implementations tend to have similar performance. Optimized C is still faster, but the edge gets smaller and smaller with every JRE version.
Can you explain why you want to port your Java code to c?
If it's for performance you likely won't see much of an improvement. Java is a garbage collected language and currently there isn't an algorithm that can insert memory allocation and deallocation calls efficiently. There have been many researchers trying to solve this problem and they have some interesting solutions but I have not seen a good commercial product that can scale to large programs yet. You can look at the conference proceeding for previous ISMM conferences for more information.
If you want to speed your code up I suggest that you use a profiler and find the hot methods. Try and optimize the hot methods and if that is still not enough try and use JNI.

Categories