Sunday, September 11, 2005

Programming Language Features

This article was first posted on the web sometime before 2002. It is presented here as part of my Retro series.

Things I'd like to see in a programming language suitable for text, database, interface, and system scripting work. Each feature is followed by a brief description.

Package and general features:
  • Orthogonal structure: Constructed from a small number of powerful constructs for ease of learning and understanding.
  • Reasonable syntax: Simple, clean, readable.
  • Portable: To all major platforms.
  • Access to system calls: UNIX and Win32.
  • Interface to external programs: Ability to catch errors, note the exit status, and redirect I/O.
  • Foreign function interface: Ability to dynamically load and execute functions written in another language.
  • Module system: With protected namespace.
  • Extensive standard library: For functionality not provided by the language.
  • Language standard: One implementation.
  • Freely distributable: Avoids license fees and restrictions.
  • Interpreted implementation: For quick ad-hoc development and machine independence.
  • Compiled implementation: For faster execution and protected code if distributed.
  • Embedded implementation: For use within another application (eg: web server).
  • Interactive source debugger.
  • High-level portable GUI: For easy data entry.
Specific language features:
  • Automatic memory management
  • Full set of data types: Support for strings, lists, arrays, records / structs, tuples, sets, unions.
  • Fully assignable data types: Ability to make list of lists, array of strings, etc. without recourse to pointers.
  • Recursive functions
  • Binary (8-bit) data handling
  • Unicode (16-bit) data handling: Needed for proper XML.
  • An object system: Multiple inheritance a plus as it allows a high degree of code-reuse.
  • Strong typing: To prevent type mismatches.
  • Exception handling: For better error checking.
  • Static typing: Catch type errors at compile-time.
  • Definable control structures: A macro system or normal order evaluation.
  • Pattern matching: regular expression support.
  • Dynamic calling sequences.: The ability for functions to accept optional or unlimited arguments.
  • Dynamic typing and name resolution.: Allows expression of generic operations.
  • Multiple return values from functions
  • Circular data structures: In a natural syntax.
  • Reflexivity: Ability to access data about the language and programming environment itself.
Following this analysis, I chose Python.



Anonymous said...

Unicode is 32 bit, not 16. the standard broken implementation of unicode standard with Java is 16; hyper-unicode used by ninjas from the future to represent ultra-japanese glyphs is 64.

robin said...

Er, yes, sheesh, my bad.

Post a Comment