Annotation of 43BSDReno/share/doc/usd/01.begin/u4, revision 1.1

1.1     ! root        1: .\"    @(#)u4  6.1 (Berkeley) 6/2/86
        !             2: .\"
        !             3: .SH
        !             4: IV.  PROGRAMMING
        !             5: .PP
        !             6: There will be no attempt made to teach any of
        !             7: the programming languages available
        !             8: but a few words of advice are in order.
        !             9: One of the reasons why the
        !            10: .UC UNIX
        !            11: system is a productive programming environment
        !            12: is that there is already a rich set of tools available,
        !            13: and facilities like pipes, I/O redirection,
        !            14: and the capabilities of the shell
        !            15: often make it possible to do a job
        !            16: by pasting together programs that already exist
        !            17: instead of writing from scratch.
        !            18: .SH
        !            19: The Shell
        !            20: .PP
        !            21: The pipe mechanism lets you fabricate quite complicated operations
        !            22: out of spare parts that already exist.
        !            23: For example,
        !            24: the first draft of the
        !            25: .UL  spell 
        !            26: program was (roughly)
        !            27: .P1
        !            28: .ta .6i 1.2i
        !            29: cat ...        \f2collect the files\f3
        !            30: | tr ...       \f2put each word on a new line\f3
        !            31: | tr ...       \f2delete punctuation, etc.\f3
        !            32: | sort \f2into dictionary order\f3
        !            33: | uniq \f2discard duplicates\f3
        !            34: | comm \f2print words in text\f3
        !            35:        \f2  but not in dictionary\f3
        !            36: .P2
        !            37: More pieces have been added subsequently,
        !            38: but this goes a long way
        !            39: for such a small effort.
        !            40: .PP
        !            41: The editor can be made to do things that would normally
        !            42: require special programs on other systems.
        !            43: For example, to list the first and last lines of each of a
        !            44: set of files, such as a book,
        !            45: you could laboriously type
        !            46: .P1
        !            47: ed
        !            48: e chap1.1
        !            49: 1p
        !            50: $p
        !            51: e chap1.2
        !            52: 1p
        !            53: $p
        !            54: .ft R
        !            55: etc.
        !            56: .P2
        !            57: But you can do the job much more easily.
        !            58: One way is to type
        !            59: .P1
        !            60: ls chap* >temp
        !            61: .P2
        !            62: to get the list of filenames into a file.
        !            63: Then edit this file to make the necessary
        !            64: series of editing commands
        !            65: (using the global commands of
        !            66: .UL ed ),
        !            67: and write it into
        !            68: .UL script .
        !            69: Now the command
        !            70: .P1
        !            71: ed <script
        !            72: .P2
        !            73: will produce
        !            74: the same output as the laborious hand typing.
        !            75: Alternately
        !            76: (and more easily),
        !            77: you can use the fact that the shell will perform loops,
        !            78: repeating a set of commands over and over again
        !            79: for a set of arguments:
        !            80: .P1
        !            81: for i in chap*
        !            82: do
        !            83:        ed $i <script
        !            84: done
        !            85: .P2
        !            86: This sets the shell variable
        !            87: .UL i
        !            88: to each file name in turn,
        !            89: then does the command.
        !            90: You can type this command at the terminal,
        !            91: or put it in a file for later execution.
        !            92: .SH
        !            93: Programming the Shell
        !            94: .PP
        !            95: An option often overlooked by newcomers
        !            96: is that the shell is itself a programming language,
        !            97: with variables,
        !            98: control flow
        !            99: .UL if-else , (
        !           100: .UL while ,
        !           101: .UL for ,
        !           102: .UL case ),
        !           103: subroutines,
        !           104: and interrupt handling.
        !           105: Since
        !           106: there are
        !           107: many building-block programs,
        !           108: you can sometimes avoid writing a new program
        !           109: merely by piecing together some of the building blocks
        !           110: with shell command files.
        !           111: .PP
        !           112: We will not go into any details here;
        !           113: examples and rules can be found in
        !           114: .ul
        !           115: An Introduction to the
        !           116: .ul
        !           117: .UC UNIX
        !           118: .IT Shell ,
        !           119: by S. R. Bourne.
        !           120: .SH
        !           121: Programming in C
        !           122: .PP
        !           123: If you are undertaking anything substantial,
        !           124: C is the only reasonable choice of programming language:
        !           125: everything in
        !           126: the
        !           127: .UC UNIX
        !           128: system
        !           129: is tuned to it.
        !           130: The
        !           131: system
        !           132: itself
        !           133: is written in C,
        !           134: as are most of the programs that run on it.
        !           135: It is also a easy language to use
        !           136: once you get started.
        !           137: C is introduced and fully described in
        !           138: .ul
        !           139: The C Programming Language
        !           140: by
        !           141: B. W. Kernighan and D. M. Ritchie
        !           142: (Prentice-Hall, 1978).
        !           143: Several sections of the manual
        !           144: describe the system interfaces, that is,
        !           145: how you do I/O
        !           146: and similar functions.
        !           147: Read
        !           148: .ul
        !           149: UNIX Programming
        !           150: for more complicated things.
        !           151: .PP
        !           152: Most input and output in C is best handled with the 
        !           153: standard I/O library,
        !           154: which provides a set of I/O functions
        !           155: that exist in compatible form on most machines
        !           156: that have C compilers.
        !           157: In general, it's wisest to confine the system interactions
        !           158: in a program to the facilities provided by this library.
        !           159: .PP
        !           160: C programs that don't depend too much on special features of 
        !           161: .UC UNIX
        !           162: (such as pipes)
        !           163: can be moved to other computers that have C compilers.
        !           164: The list of such machines grows daily;
        !           165: in addition to the original
        !           166: .UC PDP -11,
        !           167: it currently includes
        !           168: at least
        !           169: Honeywell 6000,
        !           170: IBM 370 and PC families,
        !           171: Interdata 8/32,
        !           172: Data General Nova and Eclipse,
        !           173: HP 2100,
        !           174: Harris /7,
        !           175: Motorola 68000 family (including machines like Sun Microsystems and
        !           176: Apple Macintosh),
        !           177: VAX 11 family,
        !           178: SEL 86,
        !           179: and
        !           180: Zilog Z80.
        !           181: Calls to the standard I/O library will work on all of these machines.
        !           182: .PP
        !           183: There are a number of supporting programs that go with C.
        !           184: .UL lint
        !           185: checks C programs for potential portability problems,
        !           186: and detects errors such as mismatched argument types
        !           187: and uninitialized variables.
        !           188: .PP
        !           189: For larger programs
        !           190: (anything whose source is on more than one file)
        !           191: .UL make
        !           192: allows you to specify the dependencies among the source files
        !           193: and the processing steps needed to make a new version;
        !           194: it then checks the times that the pieces were last changed
        !           195: and does the minimal amount of recompiling
        !           196: to create a consistent updated version.
        !           197: .PP
        !           198: The debugger
        !           199: .UL adb
        !           200: is useful for digging through the dead bodies
        !           201: of C programs,
        !           202: but is rather hard to learn to use effectively.
        !           203: The most effective debugging tool is still
        !           204: careful thought, coupled with judiciously placed
        !           205: print statements.\(dg
        !           206: .FS
        !           207: \(dg The "dbx" debugger, supplied starting with 4.2BSD, has extensive facilities
        !           208: for high-level debugging of C programs and is much easier to use than "adb".
        !           209: .FE
        !           210: .PP
        !           211: The C compiler provides a limited instrumentation service,
        !           212: so you can find out
        !           213: where programs spend their time and what parts are worth optimizing.
        !           214: Compile the routines with the
        !           215: .UL \-p
        !           216: option;
        !           217: after the test run, use
        !           218: .UL prof
        !           219: to print an execution profile.
        !           220: The command
        !           221: .UL time
        !           222: will give you the gross run-time statistics
        !           223: of a program, but they are not super accurate or reproducible.
        !           224: .SH
        !           225: Other Languages
        !           226: .PP
        !           227: If you 
        !           228: .ul
        !           229: have
        !           230: to use Fortran,
        !           231: there are two possibilities.
        !           232: You might consider
        !           233: Ratfor,
        !           234: which gives you the decent control structures
        !           235: and free-form input that characterize C,
        !           236: yet lets you write code that
        !           237: is still portable to other environments.
        !           238: Bear in mind that
        !           239: .UC UNIX
        !           240: Fortran
        !           241: tends to produce large and relatively slow-running
        !           242: programs.
        !           243: Furthermore, supporting software like
        !           244: .UL adb ,
        !           245: .UL prof ,
        !           246: etc., are all virtually useless with Fortran programs.
        !           247: There may also be a Fortran 77 compiler on your system.
        !           248: If so,
        !           249: this is a viable alternative to 
        !           250: Ratfor,
        !           251: and has the non-trivial advantage that it is compatible with C
        !           252: and related programs.
        !           253: (The Ratfor processor
        !           254: and C tools
        !           255: can be used with Fortran 77 too.)
        !           256: .PP
        !           257: If your application requires you to translate
        !           258: a language into a set of actions or another language,
        !           259: you are in effect building a compiler,
        !           260: though probably a small one.
        !           261: In that case,
        !           262: you should be using
        !           263: the
        !           264: .UL yacc
        !           265: compiler-compiler, 
        !           266: which helps you develop a compiler quickly.
        !           267: The
        !           268: .UL lex
        !           269: lexical analyzer generator does the same job
        !           270: for the simpler languages that can be expressed as regular expressions.
        !           271: It can be used by itself,
        !           272: or as a front end to recognize inputs for a
        !           273: .UL yacc -based
        !           274: program.
        !           275: Both
        !           276: .UL yacc
        !           277: and
        !           278: .UL lex
        !           279: require some sophistication to use,
        !           280: but the initial effort of learning them
        !           281: can be repaid many times over in programs
        !           282: that are easy to change later on.
        !           283: .PP
        !           284: Most
        !           285: .UC UNIX
        !           286: systems also make available other languages,
        !           287: such as
        !           288: Algol 68, APL, Basic, Lisp, Pascal, and Snobol.
        !           289: Whether these are useful depends largely on the local environment:
        !           290: if someone cares about the language and has worked on it,
        !           291: it may be in good shape.
        !           292: If not, the odds are strong that it
        !           293: will be more trouble than it's worth.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.