Explorando 3-movimento – um ambiente inspirado lambdamoo comprar com bitcoin

Eu era um fã de MUDs de minha primeira introdução a computadores. Lembro-me de escrever para Richard Bartle quando eu era jovem perguntando sobre a possibilidade de acessar MUD1 da Nova Zelândia, depois de ter lido sobre isso em uma revista quantas bitcoins você pode mina em um dia. A resposta foi muito positiva, mas infelizmente o custo de 300 acesso por modem de transmissão em taxas de telefone internacionais era proibitivo. Foi mais tarde na vida que o meu primeiro uso da internet e uma conta shell no meu ISP foi para compilar e executar um cliente MUD.

As variantes MOO de lamas são particularmente interessantes como eles são multi usuário,, sistemas interativos programáveis. Eles são como IRC, onde os usuários podem criar objetos, quartos e mundos escrevendo programas dentro do sistema. Isto resultou em sistemas com sistemas de programação interessantes com modelos de permissão para diferentes níveis de usuários.


Conteúdo, incluindo o código, foi armazenado em um banco de dados objeto persistente bitcoin hardware mineração 2016. LambdaMOO foi um exemplo muito popular de um MOO.

Um tempo atrás eu tropeçou em 3-Move, um ambiente baseado em texto de multi usuário de rede on-line programável, por Tony Garnock-Jones. É um sistema legal que inclui:

Não há muito escrito na forma de documentação sobre começá-lo funcionando assim esta postagem documentos como eu tenho que trabalhar. Parece não ser ativamente desenvolvido mais, mas é um pequeno sistema de bom para aprender. Construção

Isso produz o executável movimento que é a máquina virtual e um posto de controle-limpeza que é um programa de ajuda para limpar arquivos de ponto de verificação do banco de dados.

O executável movimento requer um banco de dados como um argumento. Este banco de dados armazena o estado do mundo persistente. Ele é carregado na memória quando a jogada é executado e pode ser salvo por ocasionalmente pontos de verificação do sistema Você pode comprar bitcoin com paypal. Argumentos opcionais são arquivos de código fonte movimento que são compilados e executados.

No diretório db uma série de arquivos de origem movimento que contêm o código para um bónus de inscrição ambiente virtual multiusuário bitcoin livre. O analisador de comando, utilização do soquete, editor de linha, etc são todos escritos nesses arquivos movimento. Base de dados

Isso cria o banco de dados em um arquivo, db e um link simbólico para o executável movimento no diretório atual para execução fácil. Todo o script de construção não é executado movimento em arquivos na ordem certa para a construção do banco de dados. É equivalente a: $ ./move db root.move mv move.checkpoint.000 db

Cada execução de movimento cria um novo banco de dados chamado move.checkout.000, contendo o estado da base de dados antiga mais quaisquer alterações feitas pelo arquivo movimento. Este é então renomeado volta para db e correr novamente na próxima imagem. O resultado final é um banco de dados completo com um ambiente virtual padrão. Corrida

Ele chama as funções de set-realuid e set-effuid para o assistente antes de chamar para garantir que o sistema pode acessar o usuário Assistente padrão que tem todas as permissões para chamar as funções relacionadas com soquete.

iniciar-escuta é implementado no cartão de mineração bitcoin login.move. Ele cria um soquete de servidor que aceita conexões na porta 7777. Ele pode ser conectado a via telnet, netcat, ou programa similar: $ nc 127.0.0.1 7777

Estes são usuários especiais que, em nome de qualquer login do convidado irá escolher entre os usuários visitantes atuais que não estão logados. Isso permite que as pessoas a explorar o sistema sem criar um usuário. usuários específicos também podem ser criados: @build jogador como Chris

Os usuários normais pode criar quartos, mas não pode cavar caminhos para a nova sala dentro de uma sala existente não criaram-se taxa de câmbio bitcoin. Eles podem usar ir para ir para o quarto criado e construir salas de lá. A Wizard amigável pode vincular os quartos mais tarde, se desejar. A lógica quarto está em room.move bitcoin tamanho do bloco. programas

Os programas podem ser escrito e executado dentro do ambiente. Isto é feito através da criação de um objeto de programa, editá-lo e compilá-lo: @build Programa como Olá

O código para o objeto do programa está em program.move bitcoin moeda virtual. Note-se que o verbo @compile envolve o código do programa dentro de uma função (TARGET) {… código aqui …}. TARGET pode ser definida usando o verbo @Target em um programa. Isso permite escrever programas que podem adicionar verbos para objetos. O subdiretório truques tem algum exemplo disto, por exemplo ps.verbs.move que adiciona o verbo @ps ao alvo: definir método (TARGET) @ ps-verbo (b) {

Todas as mudanças no sistema são feitas na memória. Um método de ponto de verificação deve ser chamado ocasionalmente para salvar o estado atual do banco de dados. Um exemplo de como fazer isso está em checkpoint.move mas também pode ser feito por qualquer @checkpoint chamando Wizard.

Checkpoints não substituir o banco de dados existente – que poupar para um novo arquivo do move.checkpoint.000 forma, onde 000 é um número incremento bitcoin cronograma preço. Ao reiniciar um sistema que é importante usar o último ponto de verificação para começar. Linguagem de programação

A linguagem de programação usada por 3-Move não está documentada, mas é muito fácil de seguir os exemplos como comprar bitcoins instantaneamente. As primitivas pode ser visto no PRIM. *. Arquivos c no diretório movimento. As funções são da forma: esta função é-uma-função (Arg1, argn) define {

O sistema usa um sistema protótipo de objeto. Os objetos são criados chamando clone em um objeto existente: // cria um objeto clonado a partir do objeto raiz

Os campos são acedidos utilizando o operador ponto (.) E métodos com o operador de dois pontos (:). Há namespace separado para campos e métodos.

Objetos e campos podem ter bandeiras definidas para as permissões de controle. Um exemplo da fonte: // Somente o proprietário de um objeto pode ver o campo de conexão

De dentro de um método, é possível consultar o usuário que a chamou e de lá verificar dinamicamente permissões: definir método (Coisa) add-Alias ​​(n) {

Isso garante que adicionam-alias só pode ser chamado no objeto coisa se o chamador é o proprietário do objeto e se eles são um usuário privilegiado como comprar bitcoin nos EUA. Outro exemplo é a seguinte: Método (Coisa) adicionar-verbo (selfvar, methname, padrão) define {

Aqui adicionar-verbo só pode ser chamado se o objeto é gravável mundo, ou gravável grupo eo chamador é um membro do grupo, ou gravável proprietário eo chamador é o proprietário, ou o chamador é privilegiada.

funções anônimas e funções de ordem superior estão disponíveis. Infelizmente não há nenhuma REPL mas trechos pode ser testada em objetos programa quando logado, ou adicionado a um arquivo de movimento e executada contra o banco de dados. O resultado vai ser impresso como parte da saída: definir função reduzir (f, r, vec) {

threads leves são gerados usando garfo e garfo / quota. A primeira versão, garfo leva uma função para desovar em segundo plano. Ele usa uma quota CPU padrão de 15.000 ciclos antes de terminar: fork (function () {

Threads são salvas no banco de dados quando checkpointed e retomado quando o banco de dados é iniciado. fork / quota permite definir um valor quota diferente do padrão de 15.000 ciclos. Ele também permite que três valores especiais bitcointoyou com. Um valor da cota de 0 significa que o segmento deve sair o mais rápido possível. -1 significa que o segmento deve correr para sempre, sem quota, e pode ser checkpointed e retomou na reinicialização como fios normais. Um valor de -2 significa que o segmento é executado para sempre, mas não é checkpointed e, portanto, não retomou na inicialização. #define VM_STATE_DYING 0

A linguagem tem suporte para primeiros continuações classe através da chamada / cc primitiva tempo garfo bitcoin. Isso funciona da mesma forma a função de esquema de call-com-presente de continuação. Um exemplo da página Wikipedia: definir função foo (ret) {

Há um diretório truques que contém o código de utilidade e exemplos. Isso inclui um servidor HTTP escrito em movimento, o código para o envio de e-mail via SMTP, e alguns exemplos do bot. Conclusão

A linguagem movimento parece bastante bom. Eu suspeito que seria útil para outros fins que os mundos virtuais coisas – aplicações do lado do servidor que podem ser estendidos com scripts são seguramente um caso de uso comum. Eu coloquei um servidor de exemplo na porta bluishcoder.co.nz 7777 para experimentar com preço histórico de bitcoin. Existem algumas contas de convidado configurado: $ nc bluishcoder.co.nz 7777