6,247 research outputs found
A Reflexive Extension to Arachne's Aspect Language
International audienceAspect weaving at run time has proven to be an effective way of implementing software evolution. Nevertheless, it is often hard to achieve adequate modularization and reusability in face of run time and implementation issues. Arachne is an AO system that features a run time aspect weaver for C applications, and a language close to the C syntax. In this paper we present a reflexive extension of Arachne's aspect language. We show through extracts of a deadlock detection aspect, how this extension improves the modularization of crosscutting concerns and the reusability of aspects
Static Trace-Based Deadlock Analysis for Synchronous Mini-Go
We consider the problem of static deadlock detection for programs in the Go
programming language which make use of synchronous channel communications. In
our analysis, regular expressions extended with a fork operator capture the
communication behavior of a program. Starting from a simple criterion that
characterizes traces of deadlock-free programs, we develop automata-based
methods to check for deadlock-freedom. The approach is implemented and
evaluated with a series of examples
Automatic detection and resolution of deadlocks in Go programs
The Go programming language is acquiring momentum in the development of concurrent
software. Even though Go supports the shared-memory model, the message-passing
alternative is the favoured idiomatic approach. Naturally, this practice is not exempt of
the usual difficulties: programs may deadlock and the language run-time has only very
basic support for deadlock detection. Previous research on deadlock detection mainly
focused on shared-memory concurrency models. For mainstream languages, tools and
approaches specific to the message-passing paradigm are scarce and incipient. There is
however a large body of work on models of concurrency that only recently started to be
applied to languages like Go. Since the Go run-time lets many deadlocks pass unnoticed,
and the existing solutions provided by third party tools detect many deadlocks but only
try to fix a limited set of specific patterns, imposing severe conditions to do so, there is a
clear need for more general deadlock resolution strategies, going beyond prevention and
avoidance. To gain insight on real-world deadlock bugs, we first built and categorized a
collection of bugs sourced from high-profile open-source Go projects. Next, we extended
and implemented an algorithm that takes an abstraction of the communication behaviour
of the program and, when all the communication operations on channels necessary for
progress are present, but a deadlock is possible, presents the problem and offers a possible
resolution for the error. The extensions allows our approach to analyse a much wider
range of real world programs. We conclude with an evaluation, comparing with two other
state-of-the-art solutions.A linguagem de programação Go tem ganhado tração no desenvolvimento de software
concorrente. Apesar de o Go suportar o modelo de partilha de memória, o modelo
alternativo de partilha de mensagens é a abordagem idiomática. Naturalmente, esta
prática não está isenta das dificuldades usuais: os programas podem bloquear e o runtime
da linguagem só possui um suporte muito básico para a deteção destes bloqueios.
Investigação anterior na deteção de bloqueios focou principalmente no modelo de partilha
de memória. Para linguagens convencionais, ferramentas e abordagens dedicadas ao
paradigma de passagem de mensagens são escassas e incipientes. No entanto, existe
um grande conjunto de trabalhos sobre modelos de concorrência que só recentemente
começou a ser aplicado em linguagens como o Go. Visto que o run-time do Go deixa
muitos bloqueios passar despercebidos e as soluções existentes detetam muitos bloqueios,
mas só tentam resolver um conjunto muito pequeno de padrões. De modo a ganhar
conhecimento sobre erros de bloqueio reais, nós começámos por construir e categorizar
uma coleção de erros obtidos a partir de projetos Go open-source de alto perfil. De
seguida, nós estendemos e implementámos um algoritmo que recebe uma abstração
do comportamento da comunicação de um programa e quando todas as operações de
comunicação nos canais necessários para o progresso estão presentes, mas um bloqueio
é possível, apresenta o erro e oferece uma possível resolução do erro. A nossa extensão
permite analisar um conjunto muito maior de programas reais. Concluímos com uma
avaliação, comparando com duas outras soluções do estado da arte
Type Inference for Deadlock Detection in a Multithreaded Polymorphic Typed Assembly Language
We previously developed a polymorphic type system and a type checker for a
multithreaded lock-based polymorphic typed assembly language (MIL) that ensures
that well-typed programs do not encounter race conditions. This paper extends
such work by taking into consideration deadlocks. The extended type system
verifies that locks are acquired in the proper order. Towards this end we
require a language with annotations that specify the locking order. Rather than
asking the programmer (or the compiler's backend) to specifically annotate each
newly introduced lock, we present an algorithm to infer the annotations. The
result is a type checker whose input language is non-decorated as before, but
that further checks that programs are exempt from deadlocks
- …