Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
fifty_questions_for_a_prospective_language_designer [2007-06-10 11:20] – external edit 127.0.0.1fifty_questions_for_a_prospective_language_designer [2007-07-10 18:21] (current) 71.60.251.17
Line 1: Line 1:
 +
 +
  
  
Line 60: Line 62:
  
  
-If you allow type declarations, you will want to think about whether you want parameterized types.  If you go whole hog with, say, F-bounded polymorphism, you can get performance **and** +If you allow type declarations, you will want to think about whether you want parameterized types.  If you go whole hog with, say, F-bounded polymorphism, you can get performance **and** type safety **and** ease of use, but it's hard to get this exactly right.
-  type safety **and** ease of use, but it's hard to get this exactly right.+
  
  
Line 97: Line 98:
  
  
- Here is how Jonathan Rees has characterized the very fuzzy term "OO". + Here is how Jonathan Rees has characterized the very fuzzy term "OO": 
- 1. Encapsulation -- the ability to hide the implementation of a type +  Encapsulation -- the ability to hide the implementation of a type 
- 2. Protection -- the inability of the client of a type to detect its implementation, guaranteeing that any changes to an implementation that preserve the behavior of the interface will not break any clients.  This also gives some measure of "security", because things like passwords can't leak out.  ) +  Protection -- the inability of the client of a type to detect its implementation, guaranteeing that any changes to an implementation that preserve the behavior of the interface will not break any clients.  This also gives some measure of "security", because things like passwords can't leak out.  )
   - Ad hoc polymorphism -- functions and data structures with parameters that can take on values of many different types.   - Ad hoc polymorphism -- functions and data structures with parameters that can take on values of many different types.
   - Parametric polymorphism -- functions and data structures that parameterize over arbitrary values, such as "a list of anything").  ML and Lisp both have this.  Java doesn't quite because of its non-Object primitive types.   - Parametric polymorphism -- functions and data structures that parameterize over arbitrary values, such as "a list of anything").  ML and Lisp both have this.  Java doesn't quite because of its non-Object primitive types.
Line 129: Line 129:
 **hugely** simplified FFI issues.)  Good integration with native code probably means that you will end up using a conservative collector, and that will effect the semantics of "finalization" (if you have it). **hugely** simplified FFI issues.)  Good integration with native code probably means that you will end up using a conservative collector, and that will effect the semantics of "finalization" (if you have it).
  
-Do you want to be able to return multiple values?  How about &rest arguments?  These affect function call/return, tail-call elimination, and stack vs. heap allocation optimizations.+Do you want to be able to return multiple values?  How about &rest arguments?  These affect function call/return, tail-call elimination, and stack vs. heap allocation optimizations.
  
 What's your order of evaluation in expressions?  This affects what sort of optimizations can be safely done. What's your order of evaluation in expressions?  This affects what sort of optimizations can be safely done.
  • fifty_questions_for_a_prospective_language_designer.1181474420.txt.gz
  • Last modified: 2007-06-15 19:51
  • (external edit)