When comparing Assembly vs OCaml, the Slant community recommends OCaml for most people. In the question“What are the best (productivity-enhancing, well-designed, and concise, rather than just popular or time-tested) programming languages?” OCaml is ranked 14th while Assembly is ranked 61st. The most important reason people chose OCaml is:
Functional programming is based on the lambda calculus. OCaml is in its functional parts almost pure lambda calculus, in a very practical manner: useful for many daily programming tasks. The acitve development makes improvements to the type system like generalized algebraic data types (GADT) or polymorphic variants, so when learning this language you get at once a down to earth usable compiler and advanced abstraction features.
Specs
Ranked in these QuestionsQuestion Ranking
Pros
Pro Low Level - it's how the computer works
One of the best ways to learn how a computer actually works is to work your way up from lower level abstractions. Assembly, being only a level above machine code, is low enough level to make it clear how the computer is actually performing a computation, including code flow and loops, but high enough level to not be excessively tedious for the type of small projects that a student would do at the beginning of their first programming class. Use of an assembler with macros can stretch this even a bit further.
Pro Naturally creates fast and small programs
Because of its natural syntax and low-level nature, assembly language programs are typically really small and fast.
Unlike other programming languages, in assembly language it is really hard to create a slow and over-bloated program.
Pro You must look into it if you really want to understand what computers do
There is no other way to understand a processor, so dig in.
Pro Useful for embedded systems
A curriculum that involves an embedded component, such as an Arduino or a Raspberry Pi, can encourage students by allowing them to immediately connect their work with 'real systems'. Assembly is the ideal language for getting started with and understanding these devices, and since Assembly can be called from C, the code will still be useful if students move on to C later in the program.
Pro Uniform syntax
Assembly language syntax is relatively uniform, and so there's less room for a student to get confused by obscure characters, or miss some meaning implied by structure, such as with scoping rules, or call-by-name/value/reference semantics. While there may be a lot of mnemonics to look up, most work involves only a very small subset of them.
Pro Actively-developed functional programming language at the forefront of research
Functional programming is based on the lambda calculus. OCaml is in its functional parts almost pure lambda calculus, in a very practical manner: useful for many daily programming tasks. The acitve development makes improvements to the type system like generalized algebraic data types (GADT) or polymorphic variants, so when learning this language you get at once a down to earth usable compiler and advanced abstraction features.
Pro Encourages functional style
It steers you towards a functional style, but doesn't bother you with purity and "monads everywhere" like other languages, such as Haskell.
Pro No windows!
Strong focus on *nix systems, lacking native support for MS Windows
Lacks native support for Windows systems.
Pro Sophisticated and easy-to-use package manager
OPAM is a package manager for OCaml, which is really easy to use, just like npm. It creates a .opam folder in home directory.
The documentation is great as well, and you can switch between multiple versions of OCaml for each project. You can also package your project and publish it on OPAM repositories, even if the dependencies do not exists on OPAM.
Pro One of the best for writing compilers
OCaml is compiled to native binary, so it's amazingly fast. Being a member of ML-family languages, it has expressive syntax for trees, and has great LLVM support.
Pro Stable syntax
The syntax is consistent, some syntaxic sugar but at a reasonable level, so reading code of others isn't too much confusing.
Pro Strong editor integration
The merlin
editor tool provides all you need to develop OCaml in your favourite editor.
Cons
Con Difficult learning curve
Starting off as a beginner with assembly language could prove very daunting. I suggest learning a high level language first (e.g. C) to get a good grasp of programming - especially dealing with bits, bytes, numbers, accessing memory with pointers (which is why I suggest C).
Then once that person is comfortable writing C (or whatever high level language) programs, they would find moving to assembler a little less of a "What the hell?!!!" experience.
Con Rarely a requirement or used in professional employment
(except for experts, which will outperform you in assembly language and execution speed on any day of the week, simply because they have full control of the processor.)
Con Not very portable
The instruction set may change depending on what CPU architecture is being used. Also, there will be some differences in implementations due to different assemblers being used, such as with changes in OS.
Con Language for those sadists that like pain
Not recommended as a first language. However, in small doses to show how higher level code is executed, can be of some value. Is also a language that will take a longer time to learn or finish projects with, so usually not for those who are in a hurry to get anything in particular done.
Con Hyperspecific syntax isn't a good first step to learning other modern languages
Con Strong focus on *nix systems, lacking native support for MS Windows
Lacks native support for Windows systems.