[mercury-users] "What do you think about Mercury ?"

Renaud Paquay rpa at miscrit.be
Sat Aug 28 02:22:02 AEST 1999

> - Why are you using Mercury ? (instead of another imperative/declarative
> language)

We try to use a highly expressive language to build
mission-critical applications.

> - What are you developing in Mercury ? (the main idea is enough, we
> don't need all the details !)  [Tyson's answer : "A Mercury compiler !!"
> ;-)]

I am currently writing a Mercury module generator to give
Mercury applications access to COM (ActiveX) components.
I wrote 2 years ago a HTML page generator from a DB.

> - What do you like/don't you like in Mercury ?
- types
- modes
- determinism
- high-order predicates
- typeclasses
- module system

Don't like
- syntax is heavy
- io state
- a lot of "if then else error(...)" to make code deterministic
- a lot of "if then else" when using ADT, whereas it is not needed
  when using lists.
- Type system: no name for members of a functor
- Type system: can't easily extend an existing type
     :- type base ---> a(int); b(int).
     :- type derived ---> base(base); c(int).
  I would like to express 
     :- type derived extends base ---> c(int).
- Threading variables is a pain (DCG is not an elegant solution)
     foo(In, Out):-
         pred1(In, Out1),
         pred2(Out1, Out2),
         pred3(Out2, Out3),
         pred4(Out3, Out4),
         pred5(Out4, Out).

     Adding a call between pred2 and pred3 will force me to rename
     every variable from pred2.
> - What are the advantages working in Mercury ?
See "Like"

> - What features do you specially appreciate in the language ?
See "Like"

> - Couldn't you find these in other programming languages ? Why ?
>   Can you find these in other programming languages ? Why ?
- Many other programming languages have "pointers", which
  often make a program harder to write and understand.
- The other ones I know don't have strong type system

> - What do you find "really usefull" in Mercury ?
- types
- modes
- determinism
- high-order predicates
- typeclasses
> - What weaknesses/drawbacks do you find in Mercury ?
Performance of the compiler
Performance of the generated applications
No "native" support for exceptions
io__states are a pain

> - What would you change in the language/implementation ?
Add native exceptions handling
Use of typeclasses in the library
Don't use "C" as a "portable assembler"
Fix all the bugs with the "unique" modes
Use of typeclasses (currently) makes the compiler unstable

> - What kind of problems/errors have you encountered when you came to
> Mercury, coming from another language -Prolog?- or not ? Could you
> describe your experience ?

I simply can't stand Prolog. With Mercury,
- I never get a "no" after 20 minutes of execution because of a typo error.
- I never get into infinite loops because of a missing "cut"
- I have access to high-order term
- I can write functions
- When I want deterministic code, I simply declare it and
  the compiler checks my code.
- When I update a type definition, the compiler will often
  tell me where are the impacts
- All the declarations serve as a documentation for other people, 
  _and_ are checked by the compiler.

Renaud Paquay
Mission Critical
mercury-users mailing list
post:  mercury-users at cs.mu.oz.au
administrative address: owner-mercury-users at cs.mu.oz.au
unsubscribe: Address: mercury-users-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-users-request at cs.mu.oz.au Message: subscribe

More information about the users mailing list