Да, всё верно, Алексей. Упустил.
Вот сделать процедуру, которая будет работать так:
VAR r: RECORD ptr: MyObject END;;
New(r)
- можно.
Только, насколько я понимаю тут опять же тип будет вытаскиваться в рантайме и размер тоже. Что не слишком эффективно (ну, то есть жаба душит делать в рантайме то, что гарантированно могло быть сделано в compile time). Впрочем, это уже мелочи :-)
В Обероне NEW штука волшебная. Самое забавное что NEW то процедура с возвратом значения через параметр, а вот NewRec в BB вполне себе функция, которая принимает тип и возвращает указатель: PROCEDURE NewRec* (typ: INTEGER): INTEGER; (кстати, а почему тут сэкономили одну букву - вместо type написали typ? в этом какое-то великий смысл?)