I think these operators can be compiled into rolling aggregates, e.g.,
SELECT rank() OVER (ORDER BY col),
can be
count(*) over (ORDER BY col RANGE BETWEEN UNBOUNDED PRECEDING and CURRENT ROW)
dense_rank corresponds to count(distinct).
row_number however is more tricky with non-unit weights, so that one may still need a custom implementation.