Алексей Махоткин

домашняя страница

Критика Standard ML — полиморфные типы

Andrew W. Appel, «Критика Standard ML», оглавление

Неявный параметрический полиморфизм ML предоставляет массу удобств. При написании на Pascal или C программы, которая работает, например, со связными списками нескольких различных типов объектов, становится слишком утомительно копировать почти без изменений определения функций, которые создают списки, отображают списки с помощью некоторой функции, переставляют список в обратном порядке, вычисляют длину списка, и так далее. В ML, как и в Lisp, одна и та же функция map может работать со списком любого типа; то же самое относится и к функциям length, reverse и cons. Функция length полиморфна: она имеет как тип int list → int, так и тип string list → int, а также множество других типов. В объектно-ориентированных языках с наследованием добиться полиморфизма не слишком трудно (хотя зависит от языка). В языке C полиморфизма можно добиться только с помощью приведения типов, чтобы избежать проверки типов; в Pascal это можно сделать только с помощью уродливых вариантных записей.

Comments