-
Notifications
You must be signed in to change notification settings - Fork 6
/
intro_sffaq.html
679 lines (496 loc) · 29.9 KB
/
intro_sffaq.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/transitional.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<META NAME="description" CONTENT="SparForte language documentation">
<title>SparForte - Intro - FAQ</title>
<link rel="StyleSheet" type="text/css" media="screen" href="art/sparforte.css">
</head>
<body bgcolor="#FFFFFF"><a name="top"></a>
<table width="100%" cellspacing="0" cellpadding="0" summary="page layout">
<tr><td align="left"><img src="art/sparforte.png" alt="[SparForte]"></td><td align="right"><img src="art/header_cloud.png" alt="[Banner]"></td></tr>
<tr><td background="art/header_border.png" height="10" colspan="2"></td></tr>
<tr><td colspan="2"><table width="100%" border="0" cellspacing="0" cellpadding="0" summary="top menu">
<tr>
<td width="10"><img src="art/menu_left.png" alt="[Top Main Menu]"></td>
<td width="85" background="art/menu_border.png" align="center"><a class="menutext" href="intro_preface.html"><b>Intro</b></a></td>
<td background="art/menu_border.png" align="center"><span class="menutext">|</span></td>
<td width="85" background="art/menu_border.png" align="center"><a class="menutext" href="tutorial_1.html">Tutorials</a></td>
<td background="art/menu_border.png" align="center"><span class="menutext">|</span></td>
<td width="85" background="art/menu_border.png" align="center"><a class="menutext" href="ref_adascript.html">Reference</a></td>
<td background="art/menu_border.png" align="center"><span class="menutext">|</span></td>
<td width="85" background="art/menu_border.png" align="center"><a class="menutext" href="packages.html">Packages</a></td>
<td background="art/menu_border.png" align="center"><span class="menutext">|</span></td>
<td width="85" background="art/menu_border.png" align="center"><a class="menutext" href="../examples/index.html">Examples</a></td>
<td background="art/menu_border.png" align="center"><span class="menutext">|</span></td>
<td width="85" background="art/menu_border.png" align="center"><a class="menutext" href="cont_vision.html">Contributors</a></td>
<td background="art/menu_border.png" align="center"> </td>
<td background="art/menu_border.png" align="right"><a href="intro_compare.html"><img src="art/left_arrow.png" width="27" height="24" alt="[Back Page]" border="0"></a><span class="menutext"> </span><a href="tutorial_1.html"><img src="art/right_arrow.png" width="27" height="24" alt="[Next Page]" border="0"></a></td>
<td background="art/menu_border.png"> </td>
</tr></table></td></tr>
</table>
<noscript>
<a href="#submenu">[Jump to Submenu]</a>
<hr />
</noscript>
<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="content and right submenu">
<tr>
<td align="left" valign="top">
<!-- Content Area -->
<h2>Frequently Asked Questions</h2>
<p>This section contains answers to frequently asked questions on Sparforte.</p>
<p>See also: Git-Hub Wiki at
<a href="https://github.com/kburtch/SparForte/wiki">https://github.com/kburtch/SparForte/wiki</a>.</p>
<h3>General Questions</h3>
<h4>What does Sparforte Stand For?</h4>
<img class="padded_left" src="pictures/sf2_ryu.png" width="128" height="103" alt="[Ryu]" \>
<p>To "Spar" is to duel. "Forte" (pronounced FORE-tay) is a music term
for loudness. If you are going to spar, spar loud. Together "Sparforte"
expresses "sound design".</p>
<img class="padded_right" src="pictures/roosevelt_bridge.jpg" width="128" height="92" alt="[Roosevelt Bridge]" \>
<p>"Spar" is also a stout naval mast or boom and "Forte" is a proficiency
or skill. So, alternatively, "Sparforte" can also mean a proficient or
skillful programming framework.</p>
<p>Spar can also mean to argue in a non-aggressive way, as with critics.</p>
<p>"Sparforte" expresses confident strength and quality engineering. Work
fast. Work well.</p>
<h4>What is the Difference between Bush (Business Shell) and Sparforte?</h4>
<p>The Business Shell (or Bush) was the original name of the project.</p>
<p>There were frequent complaints that Bush was a poor choice for Internet
searches. "Bush" results in millions of page hits for a famous family.
"Business Shell" resulted in millions of pages hits for a petroleum
company.</p>
<p>After several dozen names were reviewed, "Sparforte" was chosen as the
new name for the project.</p>
<h4>Can Sparforte run Bush (Business Shell) scripts?</h4>
<p>Yes. The only exception is that web template tags must be
<?spar instead of <?bush.</p>
<h4>What is AdaScript? How does it relate to Sparforte?</h4>
<p>AdaScript is the programming language used by Sparforte. Sparforte
is the original AdaScript interpreter. Since the language and the
interpreter names are different, other projects can be developed using
AdaScript--even other interpeters.</p>
<h4>Do I need to know Ada to learn AdaScript?</h4>
<p>No. In fact, AdaScript may be easier to learn than Ada. Also, the
documentation doesn't assume knowledge of another language.</p>
<h4>What are the biggest differences between Ada and AdaScript?</h4>
<p>AdaScript is intended to be a subset of Ada 95 with extensions
for the Bourne shell and SQL. However, if you come from an Ada
background, you'll notice some key differences:</p>
<ol>
<li>AdaScript is case sensitive</li>
<li>Numeric and character literals are universal types.</li>
<li>String literals are unbounded_strings not fixed strings / arrays.</li>
<li>Ada attributes are implemented as built-in package functions.</li>
<li>"with" and "use" are not available. Built-in functions have similar
package names but may not be identical.</li>
</ol>
<h4>What is Sparforte/BUSH 2.0?</h4>
<p>This is an advanced protoptype for upcoming features. The prototype
is prerelease and unstable: it may not compile or function. It is
intended for use by Sparforte developers. Periodic snapshots are put
on the Sparforte home page.</p>
<h4>Is Sparforte a "cloud" language or an "agile" language? Is there a
single thing it excells at? What is it's "killer app"?</h4>
<p>Sparforte is designed to improve speed and quality in development over
rival tools while managing the SDLC, scaling and code aging better. These, of
course, are not things that will excite your coworkers or management.
These are general things that impact many aspects of development. I'm not
a marketer and I don't have trendy buzzwords word attach to Sparforte.</p>
<h3>Using Sparforte</h3>
<h4>How Do I Use Vim with Sparforte?</h4>
<p>Even with many popular IDE's available, vi continues to be the most
commonly used editor for writing programs on Linux/UNIX systems.</p>
<p>The Sparforte download page has a file called "spar.vim". If you have
access to the vim syntax folder (usually /usr/share/vim/.../syntax),
you can copy this file to that folder.
<p>If you can't install the spar.vim file, you use it as a local, custom
syntax file as described at <a href="http://www.fleiner.com/vim/create.html">http://www.fleiner.com/vim/create.html</a>.</p>
<p>To make vim use the syntax hilighting, you can add this to your .vimrc
configuration file.</p>
<pre>
syntax on
filetype on
vim autoload it for spar files with au BufNewFile,BufRead *.sp set filetype=spar.
</pre>
<p>Or enable modeline support with "set modeline" in your .vimrc</p>
<pre>
syntax on
filetype on
set modeline
</pre>
<p>and include the file type in vim instructions embedded in a comment in your
program like this:</p>
<pre>
-- vim: ft=spar
</pre>
<p><img src="pictures/spar_on_vim.png" width="616" height="433" alt="[Screenshot of Sparforte script on vim]"><br>
<b>Screenshot</b>: camel.sp script in Vim 7.3 using Sparforte mode</p>
<h4>How Do I Use kdevelop with Sparforte?</h4>
<p>Switch the editor language to Ada. This will provide around 90% of the
highlighting and other features you are looking for. This is located
under Editor / Tools / Highlighting / Source menu.</p>
<p><img src="pictures/spar_on_kdevelop.png" width="724" height="500" alt="[Screenshot of Sparforte script on kdevelop]"><br>
<b>Screenshot</b>: camel.sp script in KDevelop 4.2 using Ada mode</p>
<h4>How Do I Use Eclipse with Sparforte?</h4>
<p>Eclipse has support for Ada (though I've never tried it). There is
a AdaCore's GNATBench plug-in for GCC Ada, AonixADT for the Aonix Ada
compiler, and an Ada Developer Tools project. There may be others. See
if you can configure one of these plug-ins to recognize Sparforte scripts
as Ada. This may give you 90% of the hilighting and other features you are
looking for.</p>
<h4>How Do I Use NetBeans with Sparforte?</h4>
<p>NetBeans has support for Ada (though I've never tried it). There is
an Ada Plug-in. See if you can configure the plug-in to recognize
Sparforte scripts as Ada. This may give you 90% of the hilighting and
other features you are looking for.</p>
<h4>Why are the documentation colours wrong in Firefox on Linux?</h4>
<p>Firefox colour correction feature behaves oddly with certain graphics
drivers on Linux. Try opening the URL about:config, confirm the warning
and change gfx.color_management.mode from 2 to 0 to disable colour
management.</p>
<h4>When I use spar as a login shell, why can't I use Control-D to log out?</h4>
<p>This is the same behaviour as in the Bash shell if you use the
ignoreeof option. It is to prevent you from accidentally logging
yourself out when exiting several shells quickly using Control-D.</p>
<h4>How Do I Install Sparforte?</h4>
<p>Follow the instructions in the INSTALL text file included with
your download.</p>
<h4>Are there any Linux distributions that carry Sparforte?</h4>
<p>At the last time I checked, Sparforte is available on ArchLinux.</p>
<h4>How Do I Report a Sparforte Bug?</h4>
<p>Follow the instructions in the Intro/Preface section of this
documentation.</p>
<h3>Programming Questions</h3>
<h4>Why do I get an error when I run commands in backquotes?</h4>
<p>Sparforte requires all commands to be terminated with a semi-colon. This
includes commands in backquotes. For example,</p>
<p><tt>files : string := `ls;`;</tt></p>
<h4>Why do I get an error when I run a command with a long option on the command prompt?</h4>
<p>In a command like "ls --help", Sparforte appends a semi-colon before
running the command. But "--" is the comment symbol and the semi-colon
is hidden as part of the comment, producing a "shell word or semi-colon
expected" or "End of File" error. The solution is to escape the
double-minus. For example, use quotes around the long option, or
backslashes before each minus sign, or use AdaScript parameters.</p>
<h4>Why can't I use put_line, ?, etc. to start a command pipeline?</h4>
<p>There are 3 kinds of subprograms in Sparforte: commands, procedures
and functions. Commands can have the I/O redirected. Functions can
be used in expressions. Procedures are stand-alone. put_line and
related are procedures so they can't be used in a command pipeline.</p>
<h4>I declared a variable inside of a pragma debug but it wasn't declared.
Why not?</h4>
<p>The commands in the backquotes aren't evaluated until the script runs.
When the script syntax is checked, the variable declaration hasn't
executed yet so the variable doesn't exist.</p>
<h4>I used "with separate" inside of a pragma debug but it nothing seemed
to happen. Why not?</h4>
<p>The commands in the backquotes are a small script. When the commands
run, the "with separate" subscript is loaded into the running script...the
small script in the backquotes not the main script.</p>
<h4>How do I convert strings to numbers?</h4>
<p>There are built-in functions to do this. <tt>numerics.value</tt> converts
a string to its equivalent value: numerics.value("5") returns 5.
<tt>numerics.pos</tt> returns the Latin-1 value: numerics.pos( "A" )
returns 65.</p>
<h4>When I convert numbers to strings, why do they sometimes have a leading space character?</h4>
<p>For historical reasons, the Ada language uses a leading space for
positive numbers and a leading minus for negative numbers. Sparforte
also follows this convention for GCC Ada compatibility. So "?",
strings.image, put_line, etc. will put a leading space before a
positive number.</p>
<p>To remove the leading space, use strings.trim().</p>
<h4>How do I read in a number like scanf, readln, etc?</h4>
<p><tt>get_line</tt> returns a universal type, not a string,
so it can save to a string or numeric variable.
<p><tt>n : integer := get_line</tt></p>
<p>You can also cast the result using <tt>numerics.value</tt> like this:</p>
<p><tt>n := numerics.value( get_line );</tt></p>
<h4>How do I format numbers like printf?</tt>?</h4>
<p>The built-in <tt>put</tt> procedure (not <tt>put_line</tt>) can
do this. The optional final parameter is a picture string
describing the number's layout. See the put in the package
section.</p>
<h4>How do I create a C-style string?</h4>
<p>Create a string and append an ASCII or Latin_1 NUL character.</p>
<pre>
c_string1 : string := "This is a C string" & ASCII.NUL
c_string2 : string := "This is a C string" & Latin_1.NUL
</pre>
<h4>What does it mean when a type is <tt>limited</tt>?</h4>
<p>A limited type is a type that cannot be assigned in an assignment
statement. It can still be used in paramters. Typically a limited
type is used to protect against "shallow copying" of data structures.
Although Sparforte has no pointers and thus no shallow copying issues,
some types are treated as limited
for compatibility with GCC Ada. An example is the
<tt>file_type</tt> type.</p>
<h4>How do I use an environment variable like <tt>LOGNAME</tt>?</h4>
<p>You have to import it first:</p>
<p><tt>LOGNAME : string;</tt><br><tt>pragma import( shell, LOGNAME );</tt></p>
<p>If you want to make LOGNAME available to other programs as an
environment variable, you'll also have to <tt>export</tt> it.</p>
<h4>What's the difference between an <tt>in</tt>, <tt>out</tt> and
<tt>in out</tt> parameters?</h4>
<p>An <tt>in</tt> parameter is one that is used by a subprogram but
will not be altered. An <tt>out</tt> parameter is one that is
created by the subprogram and any initial value is ignored. An
<tt>in out</tt> parameter is one that is used by the subprogram but
may be altered by the time the subprogram is finished.</p>
<p>There is no equivalent of pass-by-value or pass-by-reference.</p>
<h4>How do I change my command prompt?</h4>
<p>Use <tt>pragma prompt_script</tt>. More information is in the
reference section.</p>
<h4>How do I run a command with spaces in the name?</h4>
<p>Put double quotes around the command name.</p>
<h4>How do I write a shell command over multiple lines?</h4>
<p>Sparforte supports shell commands over multiple lines. You do not use
a backslash at the end of a line as in a Bourne Shell. For example,
these commands are the same:</p>
<span><tt>ls -l;</tt></span><br>
<span><tt>ls</tt></span><br>
<span><tt>-l;</tt></span><br>
<h4>Can I use out or in out mode parameters?</h4>
<p>The current version supports only in parameters in user-defined
subprograms. Other parameter modes will be implemented in the
future.</p>
<h4>How do I create session variables?</h4>
<p>Web session variables are on our to-do list. In the meantime,
you can create your session variables yourself. Create a file
in the /tmp directory. Use a filename that is secure and
consistent for the user's session: for example,
the filename can be the MD5 value of the user's id. Read and
write variables to this file. Write a cron task to periodically
clean old files out of /tmp. If performance is an issue, it
is a common trick on web servers to move /tmp to a ramdisk.</p>
<h4>Why can I only import and export string variables?</h4>
<p>Variables in Sparforte may be of many different types and
the values are represented in ways specific to the language.
When Ken designed pragma import/export, strings were believed
to be the most fundamental way of transferring information
between Sparforte and other languages. In addition,
environment variables are actually strings.</p>
<p>However, passing a numeric variable through import and
export between Sparforte scripts means converting the variable
to/from a string, which is inconvenient. It is possible that
the importing/exporting other types of variables will be done in the
future.</p>
<h4>Can you do Continuous Integration with Sparforte?</h4>
<p>CI is a technique were tests are automatically run on a regular basis to
detect errors as quickly as possible. This requires a set of test programs
that can perform tests without human intervention. Most CI frameworks
will run a shell command or script to start the tests. As long as you can
create a start script and a set of test programs, you can use CI with
Sparforte.</p>
<p>Sparforte includes a test mode that can run unit tests and report on
the success of the tests. The tests can be embedded in the source
code.</p>
<p>You can get a rough idea of test coverage by running Sparforte with
the trace feature turned on. This displays the lines the language reads,
not the lines it executes, but it will give you and idea a script is
doing during a test.</p>
<h4>Can you do Test-driven Development with SparForte?</h4>
<p>Develop your programs with "spar --test", treating them as permanently
in the testing phase.</p>
<h4>Is there a libspar I can call to run Spar scripts from another
language, like I can with lua?</h4>
<p>AdaScript is an interpreted language: the "spar" interpreter must be used
to run a program.</p>
<p>Business Shell 2.0 had a "libbush" that could be called to run
scripts from C. Expect this feature to be backported eventually
into Sparforte 1.x.</p>
<h4>Is there something like "use" or "static with" so I can use "length" instead of "strings.length"?</h4>
<p>Not yet. There will be more information on this in future versions.</p>
<h4>What is a "style issue"?</h4>
<p>A style issue is an error caused by something that is technically
allowed by the language but may cause debugging or maintenance problems.
These can rules of common sense based on the human nature. For example,
lowercase L cannot be used as a variable name (it looks like a one),
nor can the name "NULL" (it looks like a reserved word).</p>
<h4>Can you do Test-driven Development with SparForte?</h4>
<p>Develop your programs with "spar --test", treating them as permanently
in the testing phase.</p>
<h3>Design Questions</h3>
<h4>Is Sparforte a real shell?</h4>
<p>Yes. Sparforte implements its command line features natively. It is not
a preprocessor for another shell.</p>
<h4>Isn't Sparforte just another "my favourite language" shell?</h4>
<p>There are several open source shells such as Java's bean shell and
Perl's zoidberg. These attempt to create shells with a structure
famillar to practicioners of those languages.</p>
<p>SpareForte chose compatibility with Ada because Ada was the only
top 20 language that had the capability to meet Sparforte's vision.
This is the same reason that NASA, aerospace, air traffic control,
robotics, and financial institutions chose Ada over Java, Perl, etc.</p>
<h4>"Code Complete 2" calls Ada a dinosaur that has been surplanted
by other languages.</h4>
<p>Ada is standard on most versions of Linux. It remains one of the
the top 10/top 20 (depending on which survey you read) langauges in
the world. It is the most popular language for high-reliability
applications. Ada has not been surplanted by Java or PHP because
those languages traditionally solve different problems and target
different audiences than Ada.</p>
<p>"Code Complete 2" also states that Ada is not expressive. "Expressive"
could mean different things. See my article on The Lone Coder site on the
myth of agile languages, "What is an Agile Language?".</p>
<h4>Many popular languages are "mash-ups" of other languages. Isn't
Sparforte just another example?</h4>
<p>The Bourne shell features in AdaScript are a compatibility layer
provided for command line and scripting convenience. It is a
strictly-defined alternative syntax in recognition of a standard
lasting decades. It can also be turned off.</p>
<p>The command line SQL support is an attempt to address the problem
of "mode errors" (right command typed in the wrong interpeter or
"mode". This also can be turned off.</p>
<h4>Is AdaScript an enterprise language?</h4>
<p>There is no strict definition of an enterprise language. However, if you
consider "enterprise" to mean large applications with code reuse and features
such as strong typing to support quality programming, then you could consider
Sparforte an enterprise language.</p>
<h4>Is AdaScript a cloud language?</h4>
<p>There is no strict definition of an cloud language. However, if you
consider "cloud" to mean to ability to create networked applications and to
access shared services like memcached, then you could consider Sparforte to
be a cloud language.</p>
<h4>Can strong typing be used successfully in a shell?</h4>
<p>Sparforte makes allowances by supplying universal types (a form
of weak typing) and using "duck typing" when automatically declaring
variables at the command prompt.</p>
<h4>Why can't I undo <tt>pragma restriction</tt>, <tt>pragma ada_95</tt>, running in restricted shell mode, etc.?</h4>
<p>As a general rule, when restrictions are enforced they cannot be undone.
First, restrictions may be applied for security purposes. Allowing them
to be undone would be a security risk. Second, restrictions may be applied
for style or design reasons by architects or team leaders. For example,
they might use pragma ada_95 make source code as reuseable as possible. In
either case, the restrictions should not be undone.</p>
<h4>Where does the idea of "itself" come from?</h4>
<p>The itself operand was a part of "Pegasus Pascal", a Python-like
language Ken wrote for the Apple II in the mid-1990's before Ken
had heard of Python and before Python was popular.</p>
<h4>Why are there no objects or exceptions?</h4>
<p>Objects, exceptions, user-defined packages, etc. are scheduled to be added to Sparforte. See the project roadmap map.</p>
<h4>Why does AdaScript allow global variables? Some experts say they
are bad.</h4>
<p>Currently, the only way to limit scope is a subprogram or a declare
statement. A variable is global if it is declared at the top level of the
main script. Expect more ways to control scope in the future.</p>
<p>More generally, opponents of global variables are concerned that these
variables can be unexpectedly modified by any piece of programming
and can lead to thread-unsafe programs. Supporters of global variables
point out their convenience for short scripts, how large parameter lists
with repeated variables are difficult to read and maintain, and that
globals can be safely used by tacit agreement between programmers.</p>
<p>Since AdaScript is a shell and scripting language, global variables are
often useful. They are also necessary for compatibility with Ada.</p>
<h4>Why does AdaScript lack goto statments? Some experts say they are bad.</h4>
<p>AdaScript doesn't have a goto statements because of the complexity of
implementing gotos.</p>
<p>The goto has had opponents back to the 1960's when programming languages were
less developed. The belief was that an inexperienced programmer could misuse
the statement and create programs that were difficult to read and maintain.
Supporters of goto believe that the statement can improve readability and
maintenance in some cases: it is useful for breaking out of deeply nested loops,
handing certain types of errors (like retry conditions), implementing alternate
entry/exit points for initialization/cleanup (eliminating duplicate code),
that labels can improve readability by documenting intent. They also
believe that goto statements can improve performance as a result.</p>
<p>The goto statement may be implemented in the future.</p>
<h4>Is Sparforte innovative?</h4>
<p>For many years Ken has had many ideas for programming languages. Some have
started appearing in popular languages. Some have not.</p>
<p>AdaScript has always been a language based on standards and solving real-world
problems has always been its main objective.</p>
<p>While many of its features many not be innovative, it solves design problems
that other languages may find difficult.</p>
<h4>Won't big project features slow development of small nimble project?</h4>
<p>While reducing keystrokes is not a goal of Sparforte, it does have
several convenience features for the command prompt. However, outside of
the command prompt, the number of keystokes has little to do with the
speed of project development. Projects are dominated by reading,
debugging, maintenance, etc. and these are managed by Sparforte's
design.</p>
<h4>Why target code reading, debugging and maintenance? A programming
language cannot make a person think faster.</h4>
<p>While reading, debugging and designing/extending software are
think-intensive tasks, studies show that choice of language has
a measurable impact on these tasks.</p>
<h4>Isn't your idea of Code Evolution is all about General Purpose languages? I believe in Domain Specific languages which tailor solutions to specific environments.</h4>
<p>This is a false dichotomy. A language doesn't have to be completely
general or completely incompatible with another language. Part of
Sparforte's design uses domain-specific features, aspects of the
language that target specific environments such as the command prompt.
These features may be disallowed outside of their intended
environment.</p>
<p>Not everything evolves to produce superior features endure.
Is a shell's if statement really tailor-made to solve
shell scripting problems? It's a throwback to when memory was critical
and shells did not have the ability to process an if expression.
If shells standardized the if statement, it wouldn't mean that the
shell was less effective at doing "shell stuff".</p>
<h4>Doesn't a web framework like Rails make a bigger difference than
Sparforte?</h4>
<p>Web frameworks only work while you use them the way the designers
intended. If you try to add advanced features, you end up working
against the framework, and that increases your work. Some frameworks
use complicated configuration files so you use configuration files as
if they were programs. Rails, in particular, is well-known to speed
up quick demos or samples but doesn't scale to real web sites.</p>
<h4>Does the choice of language really improve productivity and reduce maintenance?</h4>
<p>Robert L. Glass, Tom Demacro and other industry leaders say that choice of
language doesn't have a significant impact on the product. Fred Brooks'
"No Silver Bullet" essay suggests choice of a language has less than 5%
impact on a project.</p>
<p>Most programming languages focus on the initial implementation phase
of a project, which is a small percentage of a developer's time. Sparforte
(and Ada, the language Sparforte is modelled on) includes features
that improve other stages of software building and facilliate team communication.
Ada has been shown in large studies to have productivity improvements as much as
double other programming languages. Expect Sparforte to address more of these
kind of time-consuming issues that other languages neglect.</p>
<h4>How fast is Sparforte?</h4>
<p>Sparforte programs will likely run slower than other languages you are
used to. There are several reasons for this.</p>
<p>First, Sparforte version 1.x is focused on implementing core features,
not on optimizing performance. Some features are not optmized for speed.
Arrays, for example, are very slow compared to other languages.</p>
<p>Second, Sparforte is built with the maximum error checking possible.
This included checks done by GCC Ada (which does more compile time and run
time checking compared to most langauges), as well as Sparforte's own
extensive error checking.</p>
<p>Third, it is has more powerful features than other languages, and these
features may require more setup to use. As a general rule, the simpler
the language, the faster the interpreter will run. Sparforte is more
high level than many languages.</p>
<p>These things mean that your scripts will probably run slower. For example,
Sparforte takes around twice as long as PHP 5.3 to initialize prior to running
a program. A simple test of a palindrome checker took about twice as long as
PHP to run.</p>
<p>When evaluating performance, consider the trade-offs for loss of
execution speed compared to Sparforte's other benefits.</p>
<p>Expect performance improvements as the language continues to evolve.</p>
<h4>What do you see as the biggest barriers to adopting Sparforte?</h4>
<p>Sparforte is designed to save time and money: most businesses don't
know how to evaluate the risk of trying Sparforte with the money and
time they will save. Most programmers are concerned about immediate
gratification, performance and what language will help them get their
next job: Sparforte does not deliver these things. Most architects
are afraid of trying something new because it could damage their
reputation: as the expression goes, no one got fired for recommending
the status quo.</p>
<br>
</td>
<td bgcolor="#d3c7f8" width="150" align="right" valign="top"><noscript><hr /></noscript><img src="art/right_menu_top.png" width="150" height="24" alt="[Right Submenu]"><br><a name="submenu"></a>
<p class="rmt"><a class="rightmenutext" href="intro_preface.html"> Preface</a></p>
<p class="rmt"><a class="rightmenutext" href="intro_whyworks.html"> Why It Works</a></p>
<p class="rmt"><a class="rightmenutext" href="intro_compare.html"> Comparisons</a></p>
<p class="rmt"><a class="rightmenutext" href="intro_sffaq.html"> <b>FAQ</b></a></p>
</td>
</tr>
<tr>
<td bgcolor="#d3c7f8" align="left" valign="middle"><a href="#top"><img src="art/up_arrow.png" border="0" width="24" height="27" alt="[Back to Top]"><span> Back To Top</span></a></td>
<td bgcolor="#d3c7f8" align="center" valign="middle"><img src="art/forte_small.png" width="26" height="32" border="0" alt="[Small Forte Symbol]"></td>
</tr>
</table>
</body>
</html>