quinta-feira, 22 de abril de 2010

Parrot VM

Parrot Parrot VM é a máquina virtual criada com base nas linguagens de programação Python e Perl que proporciona o ambiente para a criação, a implementação e o uso de linguagens de programa. As linguagens suportadas pela máquina virtual estão listadas na página do projeto, com destaque para a curiosa e elegante linguagem tutorial Squaak.


Um dos exemplos de Squaak é factorial.sq:
# Copyright (C) 2008, Parrot Foundation.
# $Id: factorial.sq 36833 2009-02-17 20:09:26Z allison $

print("Please enter number: ")
x = read()

sub factorial(n)
## test for < 2 because all numbers are represented by
## floating-point numbers, and equality checks on those
## do not work (yet?)
if n < 2 then
return 1
else
return n * factorial(n - 1)
end
end

print("factorial of ", x, " is: ", factorial(x))


Voltando à Parrot VM, ela possui uma linguagem própria, um assembly.

Seguem aqui dois exemplos de seu assembly. Ambos gravam o que é digitado pelo usuário em um arquivo (test.text) e depois exibem o conteúdo do arquivo. Simples.

O objetivo de dois códigos é mostrar como pode ser feita a escrita e leitura em arquivo usando descritor de arquivo, de modo totalmente procedimental (como em C), e usando manipulador de arquivo, lançando mão da orientação a objetos.

Descritor de arquivo (procedimental)


.sub 'main' :main
.local string filename
.local string line
.local pmc STDIN
.local pmc fd

filename = 'test.text'
STDIN = getstdin

# Writing operation
fd = open filename, 'w'
print "> "
line = readline STDIN
print fd, line
close fd

# Reading operation
fd = open filename, 'r'
line = read fd, 10240
print line
close fd
.end


Manipulador de arquivo (OO)


.sub 'main' :main
.local string filename
.local string line
.local pmc STDIN
.local pmc file_handle

filename = 'test.text'
STDIN = getstdin
file_handle = new 'FileHandle'

# Writing operation
file_handle.'open'(filename, 'w')
file_handle.'encoding'('utf-8')
print "> "
line = readline STDIN
file_handle.'print'(line)
file_handle.'close'()

# Reading operation
file_handle.'open'(filename, 'r')
line = file_handle.'readall'()
print line
file_handle.'close'()
.end


[]’s
Cacilhας, La Batalema
blog comments powered by Disqus