When comparing Assembly vs Tcl, the Slant community recommends Tcl for most people. In the question“What is the best programming language to learn first?” Tcl is ranked 31st while Assembly is ranked 49th. The most important reason people chose Tcl is:
Unlike *sh Tcl has a rich standard library.
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 Standard library
Unlike *sh Tcl has a rich standard library.
Pro Sane quoting rules
Unlike in sh you don't need to quote your variable substitutions ('"$1"').
Expanding of arguments occurs mostly explicit and if yet expected in-place (e. g. using eval
or subst
) it follows strict and well clear rules.
So exec test $argv
would execute test with single argument.
And appending {*} before $argv
would execute test with all arguments (list expansion).
Pro Cross-platform
With a little care you can have the same script work on Linux, *BSD, OS X and Windows.
Pro Widely available
You can expect a reasonably recent version of Tcl to either installed or available in the repositories of any popular open source *nix.
Pro Everything is a string
Tcl can operate at the same level of abstraction as the POSIX shell, which makes it easier to manipulate the output of other programs.
Pro Tk and Expect
Pro Standalone packages
Tcl enables easy deployment through self-contained binaries known as starpacks.
Pro Rich scripting capabilities on a single line
Want to run something 5 times? Here you go: set i 0; time { puts done-[incr i] } 5
If you need real conditional cycle? Not a problem: for {set ready 0; set i 1} {$i <= 100 && !$ready} {incr i} { if {[exec do-some-thing] eq "ready" } {set ready 1} }
Want to measure performance of something or repeat it max 300 times and not longer than 1 seconds? Very simple: timerate { after 20 } 1000 300
How about notifying yourself when some http-server is back online? Sure thing: while {[catch { close [socket localhost 80] }]} { after 1000 }; puts "\7\7\7ONLINE!"
And you can do it also fully asynchronously using events etc.
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.