Forth é uma linguagem incomum. É principalmente um intérprete, e tem uma interface de linha de comando para que possa ser usado em tempo real. Mas também tem a capacidade de pegar em conjuntos de código e compilá-lo. Então é algo como um híbrido.
Por causa disto, Forth é comumente usado em hardware que não tem um sistema operacional tradicional. Também é amplamente utilizado para controlar máquinas, e tem sido usado na exploração espacial – mesmo na Philae, a sonda que aterrou no cometa 67P/Churyumov-Gerasimenko.
História
Forth foi desenvolvido por Charles Moore a partir de 1968, enquanto fazia programação gráfica na Mohasco Industries. Mas a primeira implementação completa do Forth só veio em 1971, quando Moore criou um sistema independente para controlar o telescópio de 11 metros no US National Radio Astronomy Observatory (NRAO).
Versões anteriores do Forth chamaram a atenção da comunidade de programação. Mas neste ponto, ele se tornou muito popular na comunidade astronômica. Assim, em 1973, Moore fundou a FORTH, Inc com seus colegas do NRAO Elizabeth Rather e Edward Conklin.
A empresa portou o programa para muitos sistemas diferentes. E a FORTH, Inc continua a ser uma empresa importante, fornecendo produtos relacionados à Forth para pessoas nos negócios, na academia e no governo.
Visão geral da Forth
Existem vários aspectos únicos à linguagem de programação Forth. Vamos discutir os mais importantes aqui.
Forth Features
Forth oferece muitas características únicas:
- Interactive programming
- Criação de extensões compiladas da linguagem chamada “words”
- Stacks and Reverse Polish Notation
- Conexão direta entre usuário e hardware.
Reverse Polish Notation
Forth faz cálculos matemáticos usando Reverse Polish Notation. Isto depende do armazenamento de números numa pilha.
Consulte o cálculo: 2 + 3
. Em Forth, isto seria feito colocando o 2 na pilha, depois colocando o 3 na pilha, e depois adicionando-os. Isto seria algo parecido com isto: 2 3 +
.
Parece um pouco estranho, mas é mais fácil para o computador analisar, porque esta é a forma como os computadores fazem os cálculos. E uma vez que você se acostuma a ele como um codificador, torna-se bastante natural.
Além disso, não há necessidade de parênteses. Considere os dois exemplos seguintes. (Nota: o caractere da barra invertida inicia um comentário.)
2 3 + 5 * This is the same as (2 + 3) * 52 3 5 * + This is the same as 2 + 3 * 5
No primeiro exemplo, 2 é empurrado na pilha seguido de 3. Então 2 é o segundo na pilha e 3 é o primeiro. O operador “+” é aplicado aos dois primeiros elementos da pilha. Isto remove estes dois elementos da pilha, e deixa 5 (2 + 3) no topo da pilha.
Então empurramos 5 para a pilha. Isso coloca um 5 na primeira e segunda posições da pilha. Finalmente, aplicamos o operador “*”, o que resulta em 25 (5 * 5) sendo colocado no topo da pilha.
No segundo exemplo, colocamos 2, 3, e 5 na pilha, de modo que 5 esteja na primeira posição, 3 na segunda, e 2 na terceira. Então aplicamos o operador “*” nos dois elementos superiores da pilha (5 * 3), resultando em 15 ser colocado no topo da pilha.
Neste ponto, 15 está na primeira posição e 2 está na segunda posição. Quando o operador + é aplicado, ele deixa 17 (15 + 2) no topo da pilha.
Programa de exemplo
O programa seguinte é muito simples, mas demonstra muito do que acontece na linguagem.
: OUTMATH Output a mathematical calculation ." We will now calculate: (2 + 3) * 5" CR 2 3 + 5 * ." This equals: " . CR ; OUTMATH
A primeira coisa que este programa faz é definir uma função chamada OUTMATH
. As linhas que o seguem são parte da função através da linha que termina com um ponto-e-vírgula. A primeira linha imprime o texto: “Vamos agora calcular: (2 + 3) * 5” e segue-o com um retorno de carro.
A próxima linha faz o cálculo que discutimos acima, resultando em 25 a serem colocados no topo da pilha. A última linha da função sai, “Isto é igual: ” seguido pelo valor no topo da pilha (representado por “.”) e um retorno de carruagem.
A seguir, simplesmente executamos a função. Então quando o programa é executado, ele sai:
We will now calculate: (2 + 3) * 5This equals: 25
Learning Forth
Para a maioria dos programadores, esta é uma nova forma de pensar. Mas é surpreendente como parece natural quando se começa a trabalhar com ele. Aqui estão alguns tutoriais e livros que o farão trabalhar com a linguagem.
Forth Tutorials
Existem muitos tutoriais online. Porque Forth é estranho para os programadores não-Forth ao mesmo tempo em que é evidente para os usuários atuais, muitos dos tutoriais brilham sobre coisas que podem ser confusas para os iniciantes. Estes tutoriais não têm este problema.
- Easy Forth: este pequeno Ebook é uma excelente introdução. A única desvantagem é que ele não é grande coisa em exemplos. Então veja alguns dos exemplos abaixo.
- A Beginner’s Guide to Forth: esta é outra boa introdução. É um pouco mais técnica, mas tem mais exemplos.
- E So Forth…: esta é uma introdução muito completa a Forth – quase tão boa como um livro.
Forth Books
É muitas vezes mais fácil aprender uma nova língua ao obter um livro que pode levá-lo passo a passo através do processo. Há muitos livros bons sobre Forth – especialmente datando dos anos 80, quando Forth realmente decolou. Aqui está uma coleção dos melhores e mais importantes.
- Descubra a Forth: Learning and Programming the Forth Language (1982) por Thom Hogan: esta é uma boa e concisa introdução à linguagem Forth.
- Starting Forth: An Introduction to the Forth Language and Operating System for Beginners and Professionals (1982) por Leo Brodie: esta é uma introdução clássica e uma ótima maneira de aprender Forth. Está esgotado mas as cópias usadas não são difíceis de encontrar por pouco dinheiro. Também está online de graça. Programadores avançados do Forth talvez queiram conferir o mais recente de Brodie, Thinking Forth.
- Programming a Problem Oriented Language: Forth – How the Internals Work (2014) por Charles Moore: esta é uma versão Kindle do livro que o criador do Forth escreveu há muito tempo. Ele ainda fornece uma visão aguçada da linguagem, mas não é a melhor escolha para começar com.
- Forth Programmer’s Handbook (2007) de Elizabeth Rather e Edward Conklin: este é um livro mais avançado sobre Forth pelos outros dois pioneiros da Forth. Veja também o livro do Forth, Forth Application Techniques (2006).
Outros Recursos
- Forth Interest Group: este site tem todo tipo de informação interessante incluindo documentos históricos antigos. Infelizmente, ele também tem muitos links quebrados. Mas ainda vale a pena conferir.
- Links para Programas Forth: esta é uma grande coleção de exemplos reais de programas como uma planilha e um solucionador de quebra-cabeças Sudoku.
- Forth Google Group: este é um grupo muito ativo de usuários do Forth que fazem e respondem perguntas.
- Forth Subreddit: este não é um fórum terrivelmente ativo, mas ainda há pessoas com conhecimento sobre ele.
Forth Implementations
Existiram muitas implementações do Forth ao longo dos anos. O Forth Interest Group tem uma longa página do Forth Compilers. Então se você tiver uma configuração PDP-11 na sua garagem, você pode obter um compilador Forth para ele! Mas para sistemas mais modernos, aqui estão as opções mais comuns.
bigFORTH
Em meados dos anos 80, Dietrich Weineck, Georg Rehfeld, e Klaus Schleisiek desenvolveram o volksFORTH para máquinas 16-bit como o 8086 IBM PC e as máquinas 6502 Apple, Commodore, e Atari.
Eventualmente, eles criaram uma versão 32-bit para o (16-bit bus) 68000 baseado no Atari ST. Mesmo que volksFORTH estivesse progredindo, o projeto praticamente morreu (embora tenha sido reiniciado mais tarde).
Bernd Paysan estava suficientemente interessado nesta versão do volksFORTH (chamado turboFORTH até então), no entanto, que ele fez dela a base do bigFORTH.
Its primeira versão foi lançada para o Atari ST em 1990. Em 1995, bigFORTH tinha sido portado para o 386, e no ano seguinte estava disponível no Windows NT, OS/2, e Linux.
Interface Gráfica
Naquele momento, Paysan começou a trabalhar no MINOS. (Tecnicamente, é “MINOS”, mas normalmente é referido como simplesmente “MINOS”)
É uma interface gráfica para o bigFORTH. Talvez seja mais fácil pensar nele como “Visual bigFORTH” como o Visual Basic, porque é mais ou menos isso que ele é. Ele foi criado pela primeira vez para o sistema X-Windows. Mas logo foi disponibilizado também para Windows.
Desenvolvimento tanto no bigFORTH quanto no MINOS parecem ter parado por volta de 2010. No entanto, ambos estão facilmente disponíveis e são bastante úteis (bigFORTH é compatível com ANSI). Na verdade, MINOS é muito divertido de jogar com.
bigFORTH Resources
Se você quiser usar bigFORTH ou mesmo desenvolver para ele, você terá todas as ferramentas que você precisa:
- Código Fonte: este é o código do último lançamento oficial em 22 de março de 2010, Versão 2.4.
- Pacote Debian: um pacote facilmente instalado para qualquer distribuição Linux baseada em Debian (por exemplo, Ubuntu, Mint). Ele instala-se em /usr/local/bin, e inclui MINOS, embora seja chamado xbigforth.
- Windows Self-Installing Executable: o mesmo que o pacote Debian, mas para Windows. MINOS é até chamado xbigforth.exe.
- Documentação (PDF): este livro de quase 300 páginas funciona como tutorial e referência, escrito por JL Bezemer. Grande parte dele está no genérico Forth e é o que “And So Forth…” é retirado de.
- Homepage de Bernd Paysan: esta página tem muitas informações e exemplos interessantes relacionados ao Forth. De nota particular é a linguagem de marcação baseada em Forth de Paysan.
- bigFORTH Repository: o destino final para todas as suas necessidades bigFORTH.
Gforth
Gforth é a implementação GNU de Forth. Ele tem um pedigree distinto.
O projeto Gforth foi iniciado em 1992 pelo criador do bigFORTH Bernd Paysan e Anton Ertl, com contribuições substanciais de Jens Wilke.
Foi uma combinação do bigFORTH e do muito mais antigo fig-FORTH (veja abaixo). Mas a história dele é distorcida, já que bigFORTH veio de volksFORTH, que foi baseado em fig-FORTH.
Sendo um projeto GNU, muito trabalho tem sido feito nele desde o seu início. Ele agora é completamente compatível com o ANSI e alcançou todos os seus objetivos originais. A versão mais recente é 0.7.3, com a última entrada (por Paysan) em 25 de fevereiro de 2013.
Em termos de implementações livres Forth, Gforth é a mais comumente usada. Parte disso é apenas porque ele é parte do projeto GNU e sua disponibilidade. Mas é também porque é poderoso e rápido.
Gforth Resources
Gforth tem todos os recursos que você precisa para colocá-lo em qualquer uso que você precisar:
- Código Fonte: esta página fornece o código fonte do Gforth da versão 0.2.1 até a atual, 0.7.3.
- Pacotes Debian: há vários pacotes disponíveis para a distribuição Debian Linux. Note que dependendo do pacote que você escolher, você pode precisar instalar um ou mais pacotes primeiro.
- Windows Self-Installing Executable: esta é uma versão anterior (0.7.0) do Gforth, mas uma maneira rápida de começar.
- Documentação (PDF): este livro de 250 páginas se aplica à versão 0.7.0 do Gforth. Também está disponível em formato HTML.
- Repositório Gforth: praticamente tudo relacionado ao Gforth pode ser encontrado aqui.
pbForth
pbForth não parece mais ser suportado, mas é uma implementação tão interessante do Forth que vale a pena conferir.
Como já discutimos, o Forth sempre foi associado ao controle de hardware. Então não foi nada surpreendente que tenha sido criada uma implementação Forth para o kit robótico LEGO MINDSTORMS – especificamente, o RCX de 16 bits que saiu em 1998.
Parece nunca ter sido atualizado para trabalhar com a segunda geração, a série NXT, que saiu em 2006, nem o MV3 atual, que saiu em 2013.
Embora não exista um site oficial para o pbForth, ainda é possível aprender sobre ele e até mesmo usá-lo. No entanto, pode haver uma curva de aprendizagem íngreme, pois não há muita informação. E claramente, você precisaria de um LEGO MINDSTORMS RCX (eles não são tão difíceis de encontrar usados).
O NXT usa um processador completamente diferente (e 32-bit), então o pbForth certamente não funcionaria com ele. Mesmo assim, poderia ser divertido. E se você estiver à altura, você poderia concebivelmente portá-lo para kits de segunda e terceira geração.
pbForth Recursos
Que informação está disponível na internet normal é geralmente tersa e sempre ligada à página inicial do pbForth, que não está em funcionamento desde pelo menos 2010. É apenas graças ao Arquivo da Internet que grande parte disto está disponível.
- História da LEGO Robótica: embora não seja sobre a pbForth, fornece uma rápida visão geral dos produtos LEGO MINDSTORMS.
- Introdução à pbForth (PDF): este tutorial de 30 páginas irá ajudá-lo a começar com a linguagem.
- phForth Source Code: note que pbForth é escrito em linguagem assembly e Tcl, então você precisará ter essas ferramentas disponíveis.
- Windows GUI: este arquivo roda, embora obtê-lo para fazer qualquer coisa possa ser mais complicado. Se você quiser pbForth para Linux ou Mac, você terá que usar o código fonte.
- phForth Home Page Circa 2009: esta página fornece links para um pouco de informação interessante sobre pbForth, mais notavelmente uma meia dúzia de exemplos de scripts.
Outras Implementações
- fig-FORTH: esta foi uma das primeiras implementações Forth, criada pelo Forth Interest Group. É uma implementação de 16 bits. Está disponível para alguns maravilhosos computadores antigos como o Data General Eclipse e o Alpha Micro, assim como para computadores baseados em 8086- e 6502. O problema é que não há arquivos executáveis – apenas código de linguagem assembly. E na maioria dos casos, apenas arquivos bitmap PDF do código. O código real parece estar disponível apenas para 8088/8086, PDP-11, e 6800. (O 6800 é um processador de 8 bits, então aparentemente, houve uma versão 8-bit do fig-FORTH.)
- SP-Forth: esta é uma implementação Forth livre para Windows e Linux.
- 4tH: esta é uma implementação Forth fácil de usar que está disponível para uma grande variedade de hardware (incluindo o Raspberry Pi), e inclui boa documentação.
- SwiftForth™: este é o compilador Forth da empresa original que trouxe o Forth para o mundo. É um produto comercial, mas tem um preço razoável.