Avaliação das Linguagens de Programação Clipper e Perl Vicente Hercílio da Costa e Silva Andrade Curso de Ciência da Computação Fundação Universidade Federal do Tocantins - UFT Palmas, Brasil
[email protected] Resumo—Este artigo avalia as linguagens de programação Clipper e Perl sob os principais aspectos avaliativos estabelecidos por Sebesta (2000) para uma linguagem de programação. (Resumo) Clipper; Perl; legibilidade; ortogonalidade, escrita (palavras chave)
I. INTRODUÇÃO Com a crescente evolução de hardware para suprir as exigências da natural evolução de software, as linguagens de programação tiveram que acompanhar e evoluírem ou serem criadas para proporcionar a sociedade softwares cada vez mais sofisticados, modernos e seguros. Muitas das linguagens criadas não evoluíram com o passar do tempo ou tiveram que ser remodeladas de acordo com as novas exigências de projetos para poderem ser utilizadas adequadamente de acordo com o contexto. O objetivo deste artigo é avaliar duas linguagens de programação (uma linguagem antiga e outra contemporânea) sobre os critérios estabelecidos por Sebesta (2000). II. HISTÓRICO DA LINGUAGEM CLIPPER: A linguagem Clipper cujo nome original era Nantuket Clipper inspirado em um restaurante de frutos do mar o qual seus idealizadores frequentavam, era uma linguagem para inicialmente inicialmente compilar para o banco de dados dBase. Com o lançamento da versão 5.0, o compilador aos poucos foi desvinculando-se do dBase, nesta mesma época (meados ( meados de 1990), a empresa Computer Associates Computer Associates tinha a intenção de comprar a Nantuket Nantuket (empresa (empresa idealizadora idealizadora do Clipper). Clipper). Em paralelo as negociações, os funcionários da Nantuket desenvolviam um projeto chamado informalmente de “ ASPEN ”, ”, internamente conhecido como Clipper for Windows. Os diferenciais deste projeto eram a introdução introdução de Orientação a Objetos (OO), ambiente gráfico para plataformas Windows e um desempenho comparado a de linguagens como o C++. Foi então que um dos maiores fracassos da tecnologia aconteceu quando a Computer Associates (CA) resolver comprar a Nantucket e adotar os novos projetos da empresa (programação para Windows VO (Visual Object)). Um dos principais motivos da não aceitação era a falta de
compatibilidade com versões anteriores. Neste momento a empresa CA resolveu chamar o Clipper de CA-Clipper. O período de apogeu do Clipper se deu durante dos anos de 1980 e 1990 [4]. O grande destaque eram o tamanho dos programas gerados serem bem pequenos, em uma época em que as unidades de armazenamento em massa não passavam de 10 MB. E a velocidade de compilação e execução em computadores com processadores como o 386 e 486 e cuja memória RAM não passava dos 2MB. Atualmente o Clipper é considerado obsoleto, mas existem iniciativas como a do projeto open-source “ Project Harbour Harbour ” que continuam oferecer suporte a sistemas baseados em XBASE mesmo sem o apoio da empresa que detém os direitos, a CA. III. HISTÓRICO DA LINGUAGEM PERL A linguagem Perl foi fundada por Larry Wall em dezembro de 1987. O nome foi inspirado em uma passage bíblica de Mateus 13. Inicialmente a linguagem foi chamada de Pearl (Pratical Extraction And Language Report ), ), mas por problemas de registro foi omitida a letra ‘a’ e a linguagem recebeu o nome vigente: Perl ( Pathologically Eclectic Rubbish Liste).
Larry Wall criou a linguagem ao ser pressionado pelo seu chefe para desenvolver um sistema que controlasse todos os seis sistemas VAXen e todos os seis Suns. Surgiu então nesse contexto, uma nova linguagem para que gerenciasse todos os sistemas mencionados, não fosse necessário reescrever tudo do zero e que pudesse emitir relatórios de problemas [3]. IV.
CRITÉRIOS PARA AVALIAÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO CLIPPER E PERL
A. Legibilidade (Capacidade de Leitura)
Segundo Sebesta (2000), a legibilidade é um dos quesitos mais importantes para se julgar j ulgar uma determinada linguagem de programação. Legibilidade em uma linguagem de programação é a capacidade com que os programas podem ser lidos. Em termos de custo, a manutenção de um software é algo muito considerado nos dias atuais principalmente pela redução do custo. Um software cujo código estiver legível será mais fácil de ser trabalhado e entendido.
1) Simplicidade global: Para Sebesta (2000), a simplicidade global em uma linguagem de programação afeta diretamente a legibilidade da mesma. Linguagens com um grande número de componentes básicos certamente será mais difícil de aprender se comparadas a linguagens com menos componentes. A multiplicidade de recursos, que se caracteriza como a forma de se escrever uma mesma operação, deve ser considerado como fator que pode vim a reduzir a legibilidade de uma linguagem de programação.
Outro quesito que deve ser analisado como fator que pode contribuir ou não com a legibilidade é a sobrecarga de operadores que consiste em um único símbolo possuir mais de um significado. Linguagens que oferecem uma grande quantidade de sobrecargas de seus operadores tornam o código menos legível. Em Clipper, existe multiplicidade de recursos na utilização do operador GET que pode ser combinado com outros GET’s. Já com relação à sobrecarga de operadores, o operador “@” é utilizado para operações na tela do usuário/sistema. Mas somente para esta função. No geral, Clipper possui uma aceitável simplicidade global. Em Perl, há utilização de pacotes/ namespaces para a modularização do código. “Pragma script” explicita as coisas em Perl como, por exemplo, o escopo das variáveis e “Pragma overload” a sobrecarga de operadores em classes específicas. 2) Ortogonalidade: Ortogonalidade em uma linguagem de programação significa dizer que para um determinado número de primitivas (instruções simples) pode ser gerado um número maior de instruções válidas. É um conceito que deve ser utilizado de maneira limitada, pois uma linguagens muito ortogonal afeta a legibilidade e uma pouco ortogonal apesar de melhorar a legibilidade, diminuirá a flexibilidade de escrita [1]. Clipper possui ortogonalidade com o operador de adição e subtração que podem realizar operações tanto entre inteiros como pontos flutuantes e somatórios de valores para variáveis de controle de bordas e de elementos gráficos [2]. Perl possui operadores para concatenação se strings, operadores para repetição de string, operadores de soma e subtração em uso unário e binário, operadores relacionais para strings e variáveis numéricas. Ou seja, a ortogonalidade em Perl é alta. Em parte, a revolução nas linguagens estruturadas durante a década de 70 foi devido à falta de estruturas eficientes para controle das instruções. O uso indiscriminado da instrução goto reduz a legibilidade do programa [1]. Já com relação ao Clipper, este possui instruções de controles suficientes para elaboração de algoritmos claros. Instruções para condicionais como if , else, case estão presentes assim como while, do while. 3) Instruções de Controle:
Em Perl, encontramos instruções para controle de fluxo como o if e elseif e instruções para implementação de loops como o while, for, foreach, next last .
4) Tipos de Dados e Estruturas: Tipos de dados podem contribuir com a legibilidade em uma linguagem. Linguagens que não contem tipos booleanos são menos legíveis neste aspecto se comparadas com as que contêm o mencionado tipo. O mesmo pode-se dizer com relação às estruturas de dados para armazenamento e operações sobre registros. Uma linguagem de programação que não contém estruturas de dados será bem menos legível se comparada com uma que contém [1]. Clipper é uma linguagem de tipagem dinâmica, ou seja, os tipos são definidos em tempo de execução. A partir da versão 5, foi introduzida a possibilidade de se informar os tipos às variáveis. Clipper possui os tipos para variáveis: NUMÉRICO, CARACTER, DATA, LÓGICO, MEMO, ARRAY, CODEBLOCK. Com relação a estruturas de dados, arrays multidimensionais são utilizados. Orientação a objetos também esta presente com a definição de TADs, métodos, objetos [2].
Em Perl, a tipagem de variáveis também é dinâmica e em tempos de execução. As variáveis podem ser consideradas nos seguintes grupos: “Escalar” que são valores individuais, “Array” para variáveis plurais (coleções), “Hash” para grupo de valores indexado por string, “Sub-rotina” e “Typeglob” para tudo que é chamado struckt [3]. Com relação ao uso de estruturas de dados em Perl são utilizados Arrays para operações com pilhas, filas, listas, árvores. E o uso de Orientação a Objetos (OO) é utilizado para refinar a abstração no uso de estruturas de dados. São implementadas em OO as classes, métodos e objetos, heranças e sobrecarga de métodos. A sintaxe ou a forma dos elementos de uma linguagem tem um impacto significativo na legibilidade dos programas. Os três principais exemplos de projetos sintáticos a considerar são [1]: Formas identificadoras: Prejudicam a legibilidade caso os identificadores sejam pequenos demais ou grandes demais. 5)
Considerações sobre a Sintaxe:
•
•
•
Palavras especiais: As palavras especiais podem ter impacto na legibilidade de uma linguagem quando as mesmas não forem claras o suficiente para serem distinguidas e diferenciadas no código (chaves no C, end if e end loop em Ada) ou quando palavras especiais também puderem ser variáveis no programa. Formas e significado: É um auxilio para a legibilidade quando instruções são projetadas a fim de indicar pelos menos, parcialmente sua finalidade.
Variáveis em Clipper precisam ser declaradas com letras no início ou caractere de sublinhado e podem conter letras e dígitos nas outras posições. Um detalhe que não se deve passar despercebido é o fato da linguagem trabalhar com no máximo 10 (dez) caracteres para nome de variáveis. Uma boa prática para se declarar estas são utilizando letra maiúscula sempre que se for iniciar nomes, exemplo: “PullDown1”, “PullDown2”. Palavras reservadas podem ser utilizadas em declaração de variáveis o que pode afetar a legibilidade do código [2].
Na linguagem Perl, as variáveis precisam de identificadores especiais para a identificação do seu respectivo tipo ($, @, %, &, *). As variáveis que tiverem valores singulares são chamadas de escalares e as que possuem múltiplos elementos são os arrays. As palavras reservadas em Perl podem ser utilizadas somente para nomear labels ou handles [3]. B.
Capacidade de escrita
Tem-se na capacidade de escrita de uma linguagem como uma medida do quão facilmente, determinada linguagem pode ser utilizada para criar programas para um domínio de problema escolhido. Escrever um programa exige do programador a releitura do mesmo, então a maioria dos problemas que afetam a capacidade de leitura, afetará a capacidade de escrita de uma linguagem [1]. 1) Simplicidade e Ortogonalidade: Um grande número de construções em uma linguagem pode levar um programador à escrita de códigos absurdos para um determinado problema caso ele não esteja familiarizado com a maioria das construções da linguagem a se trabalhar. Certamente, um número menor de construções primitivas e um conjunto consistente de regras para combiná-las é melhor que um grande número de primitivas [1]. Em Clipper, um grande número de combinações pode ser realizado com operadores relacionais, binários e unários. Um exemplo está no uso de operadores relacionais em comparação de strings, binários, reais [2]. Em Perl, a capacidade de escrita é diretamente relacionada com sua grande ortogonalidade. Existem classes de operadores relacionais distintas para strings e números, assim como classes de operadores de igualdade. São encontrados também operadores de bit, operadores lógicos, operadores de atribuição [3]. 2) Suporte para Abstração: Abstração significa a capacidade de definir e, depois usar estruturas ou operações complicadas de uma maneira que permita ignorar muitos dos detalhes. A abstração influencia a capacidade de escrita em uma linguagem. Existem duas categorias distintas em linguagens de programação para a abstração: processo e dados. Abstração por processo consiste no uso de subprograma para implementar um algoritmo de classificação exigido diversas vezes em um programa. Já a abstração de dados consiste em aproximar o quanto for possível a solução que a linguagem proporciona do domínio do problema [1]. Em Clipper, um pacote adicional disponibiliza para a linguagem o paradigma de orientação a objetos o que torna a abstração de problemas e reutilização do código em uma tarefa mais simplificada[2]. Já em Perl a abstração também é realçada, porém com maior intensidade e modernidade que na linguagem Clipper pela Orientação a Objetos [3]. A expressividade pode-se referir a muitas características em uma linguagem. Na maioria das vezes, significa dizer existem formas bem mais convenientes 3)
Expressividade:
de se especificar computações em vez de formas mais desajeitadas ( cont ++, for, while, and then) [1]. Em Clipper o uso de operadores pré-fixados e pós-fixados demonstra a expressividade na linguagem. A expressão cont++ pode ser escrita também como cont=cont+1. Já em Perl, operadores unários podem ser utilizados em notações diferentes para poderem expressar a mesma operação, como por exemplo, cont++ que equivale a cont=cont+1. C. Confiabilidade
Um programa é dito confiável quando ele se comportar de acordo com suas especificações sob todas as condições [1]. 4) Verificação de Tipos: Verificar tipos nada mais é do que em tempos de execução ou compilação, verificar se o tipo que esta sendo passado pela variável é realmente o tipo esperado. A verificação de tipos em tempos de compilação é algo mais seguro e menos dispendioso que a verificação em tempos de execução [1]. Em Clipper a verificação de tipos de variáveis é feita no momento de sua utilização. Ou seja, a tipagem é realizada dinamicamente [2].
Em Perl, a situação de verificação de tipos de variáveis é bem parecida com a de Clipper. A diferença esta no uso de operadores para distinguir os tipos de variáveis. E a forma como a linguagem trata os tipos não explicitados que são tidos como escalares [3]. 5) Manipulação de Exceções: Manipular exceções significa tratar em tempos de execução (na maioria das vezes) e por em prática medidas corretivas em programas o que pode influenciar significativamente a segurança e confiabilidade [1]. As exceções em Clipper são tratadas pelas instruções BEGIN SEQUENCE/END em tempos de execução. Já em Perl, as práticas mais adotadas para manipulação de exceções é a utilização do “eval BLOCK”. 6) Aliasing: É o recurso em uma linguagem de ter dois ou mais métodos, ou nomes, distintos que fazem referência a mesma área de memória (célula de memória) em um sistema computacional. O alisiang pode comprometer drasticamente a confiabilidade em uma linguagem [1]. Em Clipper, assim como na linguagem C, o uso de distintos ponteiros que referenciam uma mesma área de memória também é permitido. Perl também permite este recurso. 7) Legibilidade e Capacidade de Escrita: Quanto mais fácil de escrever um programa, melhor será do programador entende-lo e mais seguro será. Já a relação entre a legibilidade e a confiabilidade será em programas onde a leitura é fácil e certamente será melhor de realizar escrita e manutenção neste código [1]. Clipper possui como a maioria das linguagens suporte a comentários, o que facilita na manutenção do código e consequentemente influencia na segurança. O uso de tipos reservados da linguagem como variáveis não é uma boa prática se usada em demasia. A sobrecarga de operadores também deve ser levada em consideração durante a etapa de
implementação de um projeto, pois seu excesso pode resultar em um não entendimento por parte de outros programadores [2]. Em Perl, a alta ortogonalidade dos operadores tende a dificultar a escrita do código. O uso de tipos reservados também é permitido, porém com algumas restrições de uso o que tende a deixar o código mais legível e seguro do que o uso indiscriminado. As implementação de loops e condicionais para controle de fluxo além de deixaram o código mais elegante tendem a tornar as coisas mais claras do que o uso de gotos. Esses por sua vez existem em Perl, porém não são vistos com bons olhos o seu uso. Comentários em Perl são suportados o que facilita a escrita, documentação e por conseqüência a segurança no código e sua manutenção [3]. D. Custo
O custo para implantação da linguagem Clipper em termos financeiros não chega a ser tão alto devido ao fato de a linguagem não ter sido mais atualizada pela CA e ter sido descontinuada a produção em fábrica de seus kits. Existe uma vasta documentação disponível sobre Clipper disponível em meios eletrônicos e meios impressos. Porém o custo benefício de implementar a linguagem em projetos atuais não é positivo devido ao fato da linguagem não ter se atualizado juntamente com a evolução de hardware e software. O que pode tornar as aplicações limitadas e com aspecto datado se comparada com aplicações desenvolvidas em linguagens atuais. Com relação à linguagem Perl, ela é um dos alicerces da programação para a Web e possui uma ativa comunidade que auxilia na manutenção e continuidade da mesma. Outro fator a se considerar para com a linguagem Perl é o fato de ter custo zero em sua implementação, pois sua licença é open-source. O que de fato teria como custo apenas o treinamento de pessoal para lidar com a linguagem. REFERENCIAS [1] SEBESTA, Robert W.. Conceitos de Linguagens de Programação . 4. ed. Porto Alegre: Bookman, 2000. 624 p. [2] SPENCE, Rick. Clipper 5.2. São Paulo: Makron Books, 1994. 874 p. [3] WALL, Larry; CHRISTIANSEN, Tom; ORWANT, Jon. Programação Perl. 3. ed. Rio de Janeiro: Campus, 2001. 1084 p. [4] FEDELI, Ricardo Daniel; POLLONI, Enrico Giulio Franco; PERES, Fernando Eduardo. Introdução à Ciência da Computação . São Paulo: Thomson, 2003. 238 p.