home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #27 / NN_1992_27.iso / spool / comp / programm / 3206 < prev    next >
Encoding:
Internet Message Format  |  1992-11-23  |  23.3 KB

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