Copyright Jasm Technology 2019-2026.
All rights
reserved.
admin (at) Jasm Tech (dot) com
![]() |
Back
to home page |
Jasm (noun): Take thunder
&
lightning, a steamship & a buzz-saw; mix them together, and put
them in a
woman. “She has jasm”. The term originated in 1842. Synonyms:
Spirit, energy,
spunk, zest.
I have made a career-long
project of
finding the best tools, structures, and practices for preventing bugs
and
making code easier to understand. Making a language designed for this
simplifies things greatly.
We write computer programs by
typing
text into an editor and trying to imagine what it will do. It is hard
to
program this way, and it is easy to make errors. This next generation
language
describes a better way.
The need for this product is
great. The
largest and most complex structures ever built by man are all
software.
Anything that makes big software easier to write and understand will
generate
tremendous savings.
The details of the language
are about
implementing best practices automatically and making the programmers
job
easier. The language is a vehicle for doing that in a way that is easy
to
write, read, and understand.
Jasm is a proposed general-purpose programming
language
based on these principles:
Simplicity:
Simplicity means easy to learn, easy to read, easy to program, easy to
debug,
and less complex.
Integrity:
High integrity languages prevent bugs by performing data checks and
disallowing
dangerous practices.
Multitasking:
Jasm simplifies multitasking & distributed programming.
Graphical IDE:
Visualization tools and a graphical IDE make the programmers job
easier (the Jasm
Studio). You never edit a text file.
Powerful:
Jasm has powerful high-level objects and operations.
Portable:
Maximum portability.
Productivity:
The end goal is more code done better in less time.
It does not look like any
existing
programming language, but all of the parts are well known and
understood. Jasm
is easy to understand.
Jasm invents some new things
out of
necessity, but mostly it combines existing concepts in new ways to do
things
better. That makes it easier to adopt.
Programmers
want
a language like the ones they already use, but better, gets it done
twice
as fast, and makes their lives easier. That is Jasm in a nutshell.
Jasm will allow large project
completion in half the time of a hypothetical average language.
Creating simplicity is not simple, it has been my
life’s
work.
Programmers spend more than
half their
time debugging, anything that reduces that is a big time-saver.
Jasm uses strictness,
checking, and
other high-integrity techniques because human error always happens.
High-integrity languages
ensure that
data will always be within range.
More than 50% of common bugs
will not
happen with Jasm, and more than 80% of the serious bugs will also be
prevented.
High-integrity languages
reduce the
cost of development by 50% because there are 70% fewer fixes and 90%
fewer bugs
seen by the customer.
The most common bugs
The most difficult types of bugs to solve
These can cause project-killing quagmires.
Other bug prevention
Programmers spend half their
time
debugging; yet no language has been designed for debug before.
Most languages can debug, but
you have
to write code in special ways to do it effectively. Jasm does this for
you.
The four types of
multi-tasking are
single-threaded, multi-threaded, multi-process, and distributed. Each
is
different from the other.
Jasm provides a seamless
multitasking
interface to all four, so the same code can run single-threaded, or
use any
type of multi-tasking in a blocking or non-blocking way.
Remote interfaces (TCP/IP, VXI, etc)
of every type are virtualized, so your code handles all of them
without any
changes.
All of this is done in a
simple and
straightforward way.
A graphical Integrated Development Environment is
something
new, only one other language has it.
Provides high-level
productivity-increasing commands and objects.
Half of the programming
languages do
not implement enumerations, and those that do implement them
incompletely.
Enumerations must be partially or completely hand-coded in all other
languages.
No programming language
implements
symbol lists, state machines, binary search trees, language
localization, or
relational file managers. They must be hand-coded.
Jasm implements all of these
things,
and allows them to be extended to reduce program complexity.
The compiler & tools will be written in C++ for
performance and portability. With two easy ports it will run on
Windows, Linux/Unix,
and Mac. This covers most compile platforms in use today.
Output can be set to one of several standard
byte-code
engines or transpilers. This will allow
execution
just about everywhere.
No other language has the combination of simplicity
and bug
prevention that Jasm does. These things reduce development time and
cost
significantly.
Jasm has a functional
programming mode.
Use it whenever possible. You can cut back and forth between
functional and
imperative programming.
Jasm makes functional code
easy to
write & understand, and allows it to be used in most types of
programming;
This alone is worth making a new language.
FP uses a different
programming
paradigm. FP is simple, good at multitasking, and prevents most bugs.
It’s
great if you can use it. Unfortunately, pure FP has these limitations:
I have been programming for
over 40
years and did many types of programming. Every project I have been on
did lots
of I/O, had to fit into available memory, and was fundamentally a
state
machine. Functional programming has never been an option. This is
largely why
only one functional language has caught on, and only in its niche.
The best way to make money in
pure FP
seems to be to teach it; the ratio of jobs to practitioners is not
good.
Jasm has native support for reactive programming.
Jasm will benefit from artificial intelligence more
than any
other language.
If we had to pick only one
thing to do
well, it should be making a large multitasking/distributed
application.
Whatever the future of programming brings, it will probably be heavily
parallel
and/or distributed. Jasm pays a lot of attention to this target.
// Water temperature
may only
be 0 to 100C
typedef float as water_temperature_in_c(
0.0 to 100.0 )

proc
<err_ret> ConvertWaterTemperatureToC(
temperatureInC is ref to water_temperature_in_c,
value is float,
units is TemperatureUnits.sym_type)
; e
#test
// Element test
proc <err_ret>
Temperature_ElementTest( args
is list of const text ) ; e
proc <err_ret>
ConvertWaterTemperatureToC(
temperatureInC is ref to water_temperature_in_c,
value
is float,
units
is TemperatureUnits.sym_type):
// Hidden checking for all
arguments
autogenerated here
if (units
== TemperatureUnits.CELSIUS):
temperatureInC
:= value
else: //
(units == TemperatureUnits.FAHRENHEIT):
temperatureInC
:= (value-32) * 5.0 / 9.0
//
Hidden
checking for temperatureInC autogenerated
here
return ERROR_NONE
#test
// Element test
// Autogenerated
element test
code goes here
// Not included in
this example