home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / languages / elisp / packages / HyperActiveFTP / survey-interpreted-languages < prev    next >
Encoding:
Text File  |  1993-02-25  |  22.3 KB  |  727 lines

  1. Info file: survey-interpreted-languages,    -*-Text-*-
  2. produced by texinfo-format-buffer
  3. from file: interpreted-languages.texi
  4.  
  5.  
  6.  
  7.      
  8. 
  9. File: survey-interpreted-languages  Node: Top, Prev: (DIR), Up: (DIR), Next: Overview
  10.  
  11. The purpose of this FAQ is to expose people to several languages which
  12. can cutdown/eliminate shell programming and C programming.
  13.  
  14. All of these languages are quick interpreted languages which can do
  15. things in a few lines which might take hundreds of lines of C/shell
  16. code. 
  17.  
  18. This new version contains two new sections and a lot of hope for the
  19. future and a fair shake to all languages listed.
  20.  
  21. Many thanks to Tom Christiansen (tchrist@convex.com) for his input on
  22. Perl -- both commentary and source code.
  23.  
  24. Suggestions to Terrence Brannon <tbrannon@mars.eecs.lehigh.edu>. 
  25.  
  26. * Menu:
  27.  
  28. * Overview::            
  29. * Power::            
  30. * Documentation::        
  31. * Ease of Use and Learning::    
  32. * Extensibility::        
  33. * Test Suite::            
  34. * Sample Programs::        Sample Programs
  35. * The Future::            
  36. * Obtaining::            
  37.  
  38.  
  39. 
  40. File: survey-interpreted-languages  Node: Overview, Prev: Top, Up: Top, Next: Power
  41.  
  42. Overview
  43. ********
  44.  
  45.  
  46. Emacs Lisp
  47. ==========
  48. Anything Emacs does is done in Lisp, so you can do it to. This means you
  49. can have automatic completion of input, full screen editing, buffering
  50. routines and much more. But you can only do it inside of Emacs Lisp for
  51. the most part. The two work arounds are: (1) use emacs-server.el which
  52. allows Emacs to send/receive onsockets (2) use emacs server mode. (3) I
  53. am currently working on extracting the interpreter from Emacs so that it
  54. is callable from C.
  55.  
  56. Emacs' only interaction with other programs is through its batch mode
  57. which is callable from C or shell scripts. C
  58. programs cannot use Emacs routines and Emacs cannot call C. Emacs can
  59. call shell scripts and supply command line arguments as well.
  60.  
  61.  
  62. Perl
  63. ====
  64. Combines the best features of awk, sed, and shell programming. The
  65. latest version can be embedded in C programs. It is also easy to call
  66. from the shell. 
  67.  
  68. The embeddable version, which is perl5, is not yet out for public release
  69. quite yet.  I would say that you should include C as "the best features"
  70. of list, since one of its strong points is easy access to unix syscalls
  71. and C library features.
  72.  
  73. Perl can be linked with external C libraries, such as curses or 
  74. database accessing libraries, like oracle or sybase, making for 
  75. easy access to screen-based form programs to deal with your dbase.
  76.  
  77. The Wafe server lets you get at X from perl.
  78.  
  79.  
  80.  
  81. Python
  82. ======
  83. An object-oriented interpreted language. Callable from C as well as the
  84. shell. Interpretation may be sidestepped through the use of the
  85. byte-compiler on files. Python played a major role in testing Amoeba, a
  86. distributed operating system developed at CWI.
  87.  
  88.  
  89. Tcl
  90. ===
  91. Extremely strong in X-windows. It can do a 5 page x-windows program in
  92. *2* lines and more. Callable from C and from the shell.
  93.  
  94. 
  95. File: survey-interpreted-languages  Node: Power, Prev: Overview, Up: Top, Next: Graphics
  96.  
  97. Power
  98. *****
  99.  
  100. All of the systems will be evaluated in terms of the following:
  101.   1. Graphics
  102.   2. String Handling
  103.   3. Process Control
  104.   4. Extensions
  105.  
  106. 
  107. File: survey-interpreted-languages  Node: Graphics, Prev: Power, Up: Top, Next: String Handling
  108.  
  109. Graphics
  110. ========
  111.  
  112.  
  113. Emacs Lisp 
  114. -----------
  115. None internally, but the ability to spawn inferior unix
  116. processes and issue shell commands allows it to use tcl's WAFE or fire
  117. up a Python process and control it with ease.
  118.  
  119.  
  120. Perl
  121. ----
  122. Again none interally, but the author of WAFE, the tcl/tk graphic
  123. interpreter wrote all of his example programs in Perl (wafemail,
  124. wafenews, wafeftp).
  125.  
  126. Certainly perl can issue external commands (inferior processes in lisp
  127. parlance).  There is also a version of guiperl I've seen Larry demo
  128. for me, so there's at least proof-of-concept that you can link in 
  129. the X libs.  Whether it will come out with perl5 I don't know.
  130.  
  131.  
  132.  
  133. Python
  134. ------
  135. Through the use of the STDWIN paradigm, the same source code
  136. can do graphics in the following systems:
  137.  
  138.   1. X-windows
  139.   2. Macintosh using either Think C 4.02 or MPW C 2.02
  140.   3. Atari ST
  141.   4. DOS
  142.   5. Silicon Graphics SGI workstations
  143.  
  144. This approach allows flexibility but means that no one graphics system's
  145. potential is maximized. 
  146.  
  147.  
  148. Tcl
  149. ---
  150. Overloaded with all types of very very easy to do attractive
  151. graphics in X-Windows only. Easy to learn, and has many nice widgets
  152. added to it such as a photo widget for display of scanned PBM images,
  153. a bar graph widget, an editable text widget and much more. 
  154. Powerful tcl-based graphics systems come to mind:
  155.  
  156.   1. xy-graph - includes a Hypertext widget. This means that regardless of
  157.      what stream of information comes at your Tcl program, you can create
  158.      windows and paths through the stream on the fly. A major example of the
  159.      hypertext widget is Joseph Wang's World Wide Web Hypertext browser.
  160.   2. VOGLE - 3D rendering, fonts
  161.   3. BYO Interface Builder. A snap to use.
  162.   4. WAFE . Send text string from anywhere (C language, Emacs, shell) to
  163.      a server and have the graphics done for you.
  164.   5. BOS - An object oriented extension for Tcl which also has some
  165.      widgets added to it.
  166.  
  167. 
  168. File: survey-interpreted-languages  Node: String Handling, Prev: Graphics, Up: Top, Next: Process Control
  169.  
  170. String Handling
  171. ===============
  172.  
  173.  
  174. Emacs Lisp
  175. ----------
  176. Strong. Many good string handling functions for operation on buffers as
  177. well as string. Search replace backward and forward with regexps. Many
  178. good string handling functions are found in tree-dired.el in gmhist*.el.
  179. As well as in ange-ftp.el.
  180.  
  181.  
  182. Perl
  183. ----
  184. Very strong.
  185.  
  186. String-handling is one of Perl's strongest features: they are quite
  187. powerful and extensive.  Strings can be as long as you want, and contain
  188. binary data and nulls.  This works:
  189.     $kernel = `cat /vmunix`;
  190.  
  191. Perl has a wealth of string-accessing functions, including matching,
  192. substitution, transliteration, splitting, and direct substring accessing.
  193. Strings and numbers are interchangeable.  The regexps are a superset of
  194. other regexp syntaxes, with extensions.  Parsing is very easy:
  195.          ($name, $number, $host) = /(\w+)=(\d+)( from @(\w+))?/;
  196. Subexpressions can nest, and be arbitrarily deep: you don't have
  197. to stop with \9, but can keep going.
  198.  
  199. Perl's substitution operator works like sed's:
  200.     s/foo/bar;
  201. or
  202.     $a =~ s/foo/bar/g;
  203. but can do much more, like:
  204.     s/(\d+)/sprintf("0x%08x", $1)/ge;
  205. to find all the numbers in the pattern space and replace them 
  206. with the hex representation of the same.  It has other powerful
  207. features I don't have time or space to go into.
  208.  
  209. Perl also lets you treat strings as raw bitwise data, so 
  210.     substr($a,0,3) &= "\177\177\177";
  211. would clear the high bits on the first 3 bytes of $a.  You
  212. can also access strings bitwise, say, to check the 2456th bit 
  213. of a string.
  214.  
  215.  
  216.  
  217.  
  218. Python
  219. ------
  220. It has a string module and regexp module. It has all the string
  221. *search* capabilities of Emacs, but since strings are immutable in
  222. Python, it understandably does not have Emacs Lisp's string replace power.
  223.  
  224.  
  225. Tcl
  226. ---
  227. Everything in Tcl is a string. It is very easy to map certain
  228. string-intensive applications to Tcl. For example, I wrote a program to
  229. do parallel library database searches in Tcl in about two weeks. Ranking
  230. the 4 languages in terms of how easy it would have been: Tcl, Python,
  231. Emacs, and I cant say about Perl because I gave up on Perl quickly after
  232. buying the book and seeing all those registers and the confusing
  233. context-intensive syntax. 
  234.  
  235.  
  236. 
  237. File: survey-interpreted-languages  Node: Process Control, Prev: String Handling, Up: Top, Next: Extensions
  238.  
  239. Process Control
  240. ===============
  241.  
  242.  
  243. Emacs Lisp
  244. ----------
  245. Has specialized modes for controlling Common and other lisps to
  246. facilitate debugging, execution, and programming. Has shell modes with
  247. command history. Has an excellent ftp program (ange-ftp). Can
  248. asynchronously or synchronously call the shell and store the output in a
  249. buffer or string. Can filter output from a process. However, the
  250. filtering is somewhat hairy because you cannot be sure of the packet
  251. size that the data will arrive in. In other words, it is easy to open a
  252. pipe with Perl/Python/Tcl and just read lines at a time but you have to
  253. write an accumulator function to do this in Emacs Lisp. However, the
  254. interactor mode for GNU Smalltalk has an excellent accumulator function
  255. that you could use in your own code. 
  256.  
  257.  
  258. Perl
  259. ----
  260. Perl has all the process control primitives available to you from C, plus
  261. higher level constructs as well.  It's easy to open a pipe to or from
  262. another process.  You can even open a pipe to an implicitly forked version
  263. of yourself.   Standard Perl library routines allow bidirectional pipes
  264. and running things over a pty via a package that works much like Don
  265. Libes's Expect, save that it uses Perl instead of tcl as an extension
  266. language.  Perl can also access all the socket and ipc functions on your
  267. system without calling a program to do it.
  268.  
  269.  
  270.  
  271.  
  272. Python
  273. ------
  274. You would use pipes to do this in Python.
  275.  
  276.  
  277. Tcl
  278. ---
  279. Even stronger than Emacs. A package by Don Libes called Expect allows
  280. the programmer to specify a set of expected regexps from the process and
  281. what to do upon the receipt of the process output. Several of his papers
  282. including "expect: Curing Those Uncontrollable Fits of Interaction"
  283. available in postscript format for anonymous ftp from durer.cme.nist.giv
  284. in pub/expect. 
  285.  
  286. There are also numerous process control extensions in Extended Tcl,
  287. which will be detailed in the section titled extensions.
  288. 
  289. File: survey-interpreted-languages  Node: Extensions, Prev: Process Control, Up: Top, Next: Documentation
  290.  
  291. Extensions
  292. ==========
  293.  
  294. An important feature of these languages is how much is already there for
  295. you to use.
  296.  
  297.  
  298. Emacs Lisp
  299. ----------
  300. Emacs is light years ahead of any of these other languages in this respect.
  301.   1. 4 mail readers (rmail, vm, mh-e, elm interface)
  302.   2. 2 Usenet news readers (gnus, rnews+)
  303.   3. Ange-FTP -- An excellent ftp utility which allows transparent
  304.      file access/modification with the ease of a few keystrokes.
  305.   4. Countless interfaces for everything from Archie to MUD.
  306.   5. AUC-TeX allows you to do anything you would want to do with
  307.      TeX/LaTeX from an Emacs buffer quickly and easily.
  308.   6. Calc is a poor man's Mathematica
  309.   7. VIP -- vi emulation for emacs
  310.   8. Calendar/Diary -- calendar manager within Emacs
  311.   9. Tree Dired -- better directory editor for Emacs
  312.  10. Hyperbole -- extensible hypertext management system within Emacs
  313.  11. Ispell -- spell checker in C with interface for Emacs
  314.  12. Patch -- program to apply "diffs" for updating files
  315.  
  316. Emacs' use of switchable modes allows for easy creation of new packages
  317. with their own set of keyboard macros or they can simply use a
  318. predefined mode.
  319.  
  320.  
  321. Perl
  322. ----
  323. Having been publicly available for six years now, Perl has a truly huge
  324. body of code already written for it.  I couldn't begin to document all of
  325. them.  More than any other language listed herein, it is the tool of
  326. choice for Unix system administrators.  Perl comes with a symbolic
  327. debugger, a bunch of libraries, various tools, and and numerous example
  328. programs, but that's just the start.  
  329.  
  330.  
  331.  
  332.  
  333. Python
  334. ------
  335.   1. ?? -- Multimedia interface. 
  336.   2. ?? -- Remote Procedure Call debugger
  337.   3. texfix -- Crude convert latex to texinfo
  338.   4. throughput -- measure tcp throughput
  339.   5. dutree -- format du(1) output at a tree sorted by size
  340.   6. findlinks -- recursively find links to a given path prefix
  341.   7. lpwatch -- watch BSD line printer queues
  342.   8. suff -- sort a list of files by suffix 
  343.  
  344.  
  345. Tcl
  346. ===
  347.   1. Basic Object System -- adds object oriented capabilities to Tcl. It is
  348.      not class-based but prototype-based whatever that means.
  349.   2. Extended TCL -- adds keyed lists, a debugger and profiler
  350.      and the following process control
  351.      primitives:
  352.         * interaces to pipe, dup, fcntl, sleep, getpid, fork, exec
  353.   3. Artcls -- a graphic Usenet newsreaderp 
  354.   4. CD Rom Interface
  355.   5. MXEdit -- Text editor
  356.   6. tclTCP/rawTCP -- tcp/ip for tcl remote procedure calls and connect
  357.      activity 
  358.   7. VOGLE -- awesome full-color 3-D rendering package with a ton of
  359.      fonts, both american and foreign.
  360.  
  361. * Menu:
  362.  
  363.  
  364. * Documentation::
  365. * Top::
  366.  
  367.  
  368. 
  369. File: survey-interpreted-languages  Node: Documentation, Prev: Extensions, Up: Top, Next: Ease of Use and Learning
  370.  
  371. Documentation
  372. *************
  373.  
  374.  
  375. Emacs Lisp
  376. ==========
  377. Excellent. Both for using Emacs and programming Emacs Lisp.
  378.  
  379.  
  380. Perl
  381. ====
  382. Excellent. A book is out by Larry Wall called Programming in Perl. The
  383. manual page is 80 pages typeset. The newsgroup comp.lang.perl is very
  384. active and helpful and the newsgroup archives are available
  385. on-line, and come with literally thousands of code snippets and fully
  386. fledged programs doing more different things than I can begin to
  387. enumerate.  There is also an excellent quick reference guide, and
  388. professionally-taught courses for Perl available.
  389.  
  390.  
  391.  
  392. Python
  393. ======
  394. Good. Covers everything but how to extend Python through C.
  395.  
  396.  
  397. Tcl
  398. ===
  399. Good. The author of Tcl, John Ousterhout, will mail you the manual
  400. pages. 
  401.  
  402. 
  403. File: survey-interpreted-languages  Node: Ease of Use and Learning, Prev: Documentation, Up: Top, Next: Extensibility
  404.  
  405. Ease of Use and Learning
  406. ************************
  407.  
  408. Emacs Lisp
  409. ==========
  410. The best. Has a debugger. Since you are in Emacs, you can immediately
  411. test whatever you are writing. Documentation on every function and
  412. variable in memory is available in 2 keypresses. The tags system allows
  413. you to jump to functions and global variable declarations without
  414. knowing which file they are in. 
  415.  
  416. Perl
  417. ====
  418. I would say strong.  To use Perl, you only need to know a little bit to
  419. start to use it.  The interactive debugger allows you to type any kind of
  420. Perl code you want and get an immediate answer, as well as providing
  421. standard sym debugger capabilities such as breakpoints, single-stepping,
  422. and stack tracebacks.  Other tools available but not included with the
  423. Perl src kit include profilers, tags generators, cross referencers, and
  424. tools to assemble large Perl programs using makefiles and a lintlike
  425. checker.  Other tools provide perl-mode for vi as well as tightly coupling
  426. the debugger with a slave vi session that autopositions by file and line.
  427.  
  428.  
  429. Python
  430. ======
  431. Good. The concept of immutable strings takes some getting used to.
  432.  
  433.  
  434.  
  435. Tcl
  436. ===
  437. Ok. Debugger available under Extended Tcl and as a separate library. (*Note Obtaining::) The language
  438. itself is straightforward except for mathematics and 
  439. boolean conditionals.
  440. Writes spm2d@ash.cs.virginia.edu:
  441.      For instance, in order to do something like "x=math.sin(a)+5*3" (ala
  442.      Python), in Tcl it would be something like:
  443.  
  444.      set x [expr [sin $a] + [expr 5 * 3]]
  445.  
  446.      We also spent a few weeks figuring out how to do conditionals in IF
  447.      statements. (if a and b...) I won't even mention what kind of syntax
  448.      it wanted.
  449.  
  450. Contrast this with two snippets of code from Perl:
  451.  
  452.  
  453.          $x = sin($a) + 5*3;
  454.  
  455.      or if there were a special math package, it would be
  456.  
  457.          $x = &math'sin($a) + 5*3;
  458.  
  459.  
  460. 
  461. File: survey-interpreted-languages  Node: Extensibility, Prev: Ease of Use and Learning, Up: Top, Next: Test Suite
  462.  
  463. Extensibility
  464. *************
  465.  
  466. When I say extensibility I mean the ability to add a new keyword or data
  467. type to a language as opposed to adding a new utility.
  468.  
  469.  
  470. Emacs Lisp
  471. ==========
  472. Writing new lisp functions is only feasible by using the
  473. already-available lisp functions. To write new lisp functions in C would mean
  474. re-compiling Emacs every time. 
  475.  
  476.  
  477. Perl
  478. ====
  479. You can extend Perl through linking with C routines.  The example
  480. with the perl kit explains how to do this for the curses library,
  481. but can be done for many other applications as well.  This is adding
  482. new function calls.
  483.  
  484. What I don't think is easy is changing the perl syntax.
  485.  
  486. What you would probably do is define a package and use acccessor
  487. functions.  I did this to allow perl user's to get at C struct and union
  488. types to interract with C programs.  A package is semi-reminiscent of a
  489. C++ class, perhaps best described as a protected namespace with private
  490. and public data declarations and initialization code, as well as both
  491. private and public functions.  I wonder how the other languages stack up
  492. on this kind of thing.
  493.  
  494.  
  495.  
  496. Python
  497. ======
  498. Its possible in C. How to do it in C is not well documented.
  499.  
  500.  
  501. Tcl
  502. ===
  503. Its possible and well-docuemented and has been down well by many
  504. people in C.
  505.  
  506. 
  507. File: survey-interpreted-languages  Node: Test Suite, Prev: Extensibility, Up: Top, Next: Sample Programs
  508.  
  509. Test Suite
  510. **********
  511.  
  512.  
  513. Emacs Lisp
  514. ==========
  515. Well, if you compile Emacs then Emacs Lisp will run. This is
  516. irrelevant criteria for Emacs Lisp.
  517.  
  518.  
  519. Perl
  520. ====
  521. Perl comes with an exhaustive test suite.
  522.  
  523.  
  524. Python
  525. ======
  526. Exhaustive test suite
  527.  
  528. Tcl
  529. ===
  530. Exhaustive test suite
  531.  
  532.  
  533. 
  534. File: survey-interpreted-languages  Node: Sample Programs, Prev: Test Suite, Up: Top, Next: The Future
  535.  
  536. Sample Programs
  537. ***************
  538.  
  539. To give you a taste of how each of these languages does its thing, I
  540. have created some simple programs to give you an idea of how easy each
  541. language can do some routine tasks.
  542.  
  543. None of the programs have been written for any of the languages for
  544. this version of the FAQ. If you would like to contribute source, feel
  545. free. Or if you have a program done in one of these languages that you
  546. think would have been very difficult in one of the others let me know.
  547.  
  548. The programs are:
  549.  
  550.  
  551.   1. Write a program to count the number of files in the current directory.
  552.  
  553.  
  554.      Perl
  555.      ====
  556.  
  557.               #!/usr/bin/perl
  558.               $count = @files = <*>;
  559.               print "Directory file count: $count\n";
  560.  
  561.               #!/usr/bin/perl
  562.               $count++ while <*>;
  563.               print "Directory file count: $count\n";
  564.  
  565.               #!/usr/bin/perl
  566.               print "Directory file count:", `ls | wc -l`;
  567.  
  568.           # those didn't have dot files.  if you want dot files,
  569.           # use <* .*> instead.
  570.  
  571.               #!/usr/bin/perl
  572.               opendir(DOT, '.');
  573.               $count = @files = readdir(DOT);
  574.               print "Directory file count: $count\n";
  575.  
  576.               #!/usr/bin/perl
  577.               opendir(DOT, '.');
  578.               $count++ while readdir(DOT);
  579.               print "Directory file count: $count\n";
  580.  
  581.  
  582.   2. Write a program to run under X-Windows and Macintosh which opens a
  583.      window and prints `"Hello, World"' in it. 
  584.  
  585.  
  586.      Perl
  587.      ====
  588.      I'd just talk to Wafe or Stdwin.  Or call xterm. :-)
  589.  
  590.   3. Given a file with 4 occurrences of the string "Hello Bob" find the file,
  591.      replace the last 3 occurrences of "Hello Bob" with "Hi James" and save
  592.      the file. The double quotation marks are for delineation purposes only.
  593.  
  594.  
  595.      Perl
  596.      ====
  597.           # the orig file will be in file.BAK -- if you don't want a backup,
  598.           # use just -i.
  599.  
  600.           # remember that s//foo/ will match the last match
  601.  
  602.           perl -i.BAK -p -e '/Hello Bob/ && $seen++ && s//Hi James/g'
  603.  
  604.           or 
  605.               perl thisprog < file.in > file.out
  606.  
  607.  
  608.               #!/usr/bin/perl
  609.               while (<>) {
  610.               if (/Hello Bob/ && $seen++) {
  611.                   s//Hi James/g;
  612.               } 
  613.               print;
  614.               } 
  615.  
  616.  
  617.   4. A lengthy file has been entered with records of the form:
  618.      `<\n>NAME<\n>ADDRESS<\n>PHONE<\n>----------'
  619.      where <\n> represents a line feed and the ----------- is used to
  620.      separate records. Convert all entries in the file to a new format of
  621.      the form:
  622.      `<\n>NAME::ADDRESS::PHONE'
  623.  
  624.  
  625.               #!/usr/bin/perl
  626.               $/ = "\n----------";      # set record separator
  627.               while (<>) {        # read a record
  628.               s!$/$!!;          # remove record terminator
  629.               s/^\n//;        # trim first line feed
  630.               s/\n/::/g;        # turn rest into double dolon
  631.               print "\n";        # new record starts with \n
  632.               print;            # output current pattern space
  633.               } 
  634.  
  635.           # Did you know that the last record in the file will no longer
  636.           # have a terminating newline?  Make sure the others get this right.
  637.  
  638.  
  639.  
  640.  
  641.  
  642. 
  643. File: survey-interpreted-languages  Node: The Future, Prev: Sample Programs, Up: Top, Next: Obtaining
  644.  
  645. The Future
  646. **********
  647.  
  648.    * Emacs Lisp does not have object-oriented extensions yet Python does.
  649.  
  650.      Python does not yet have a robust ftp interface like Emacs' ange-ftp nor
  651.      does it have an advanced desk top calculator like Emacs's calc. However
  652.      it does have STDWIN, an easy-to-use windowing system. 
  653.  
  654.      Expression of mathematics in Tcl is cumbersome yet X11 graphics is very
  655.      very easy. 
  656.  
  657.      Perl has excellent string and manipulation tools and a ton of sysadmin
  658.      utilities written in it.
  659.  
  660.      The bottom line is that all of these languages have powerful tools ready
  661.      to use. Each language also has its weak points. Instead of being stuck
  662.      in each language and slaving through its weakness (or lack of a certain
  663.      utility), one should be able to fire up an interpreter in any of these
  664.      other languages and let it perform on it strong points and return the
  665.      answer.
  666.  
  667.      I expect this type of hybrid programming to become almost necessary with
  668.      excellent packages and large being written for each langauge. 
  669.  
  670.    * I am currently working on socketed interprocess communication between a
  671.      Python interpreter and Emacs Lisp. Next will be Tcl. Perhaps next will
  672.      be postscript or maybe Perl. 
  673.  
  674.    * A trans-language browser. If you see that a Perl script has been
  675.      written to traverse a directory tree and count the number of files
  676.      ending in .o whose age is more than 20 days but you are not a Perl
  677.      programmer, that Perl script should become and OBJECT to which you SEND
  678.      a message to get that work done.
  679.  
  680.  
  681.  
  682.  
  683.  
  684. 
  685. File: survey-interpreted-languages  Node: Obtaining, Prev: The Future, Up: Top
  686.  
  687. Obtaining
  688. *********
  689.  
  690. All of these packages are publicly available via ftp.
  691. I have chosen the ange-ftp method of representing ftp
  692. connections for its conciseness. The following:
  693. "/anonymous@src.doc.ic.ac.uk:/pub/gnu" means make an anonymous ftp
  694. connection to src.doc.ic.ac.uk then cd to /pub/gnu.
  695.  
  696. As a side note, if you had Hyperbole (an Emacs-based hypertext package)
  697. installed and running under X-Windows, you could just click on the
  698. quotation-mark-enclosed pathname above and you would automatically be
  699. connected to the above directory. 
  700.  
  701. All documentation and source code have their copyright status with the
  702. distribution. Consult the distribution for information on using these
  703. products as part of your own creative work.
  704.  
  705.  
  706. Emacs Lisp
  707. ==========
  708. "/anonymous@src.doc.ic.ac.uk:/pub/gnu"
  709. "/anonymous@prep.ai.mit.edu:/pub/gnu"
  710.  
  711. Perl
  712. ====
  713. "/anonymous@convex.com:/pub/perl"
  714. "/anonymous@archive.cs.ruu.nl:/DOC"
  715.  
  716. Python
  717. ======
  718. "/anonymous@ftp.cwi.nl:/pub"
  719.  
  720. Tcl
  721. ===
  722. "/anonymous@ftp.uu.net:/languages/tcl"
  723. "/anonymous@barkley.berkeley.edu:/tcl"
  724.  
  725.  
  726.  
  727.