Skip to content

Vdloisem/MCC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Collaboration Metric between Programming Paradigms

This project implements an innovative metric to assess the collaboration and compatibility between different programming paradigms. Our goal is to provide a quantitative framework to deeply examine the fundamental characteristics, computational capacities, and hierarchical relations among paradigms to identify potential synergies and facilitate effective collaboration.

Overview of the Metric

The Collaboration Metric (MC) is based on a formal mathematical definition that considers structural characteristics, parent-child relationships, as well as essential computational and behavioral properties of the paradigms. It is designed to offer a quantitative measure of compatibility and collaboration potential by assigning adjustable weights to various factors.

Metric Formulation

The metric is defined as follows:

MC(P_1, P_2) = α × I(C_1, C_2) + β × R(F_1, S_2) + γ × R(F_2, S_1) + δ × M(M_1, M_2) + ε × TC(T_1, T_2) + ζ × NDO(O_1, O_2)

  • where:
    • α, β, γ, δ, ε, ζ ∈ [0,1] and α + β + γ + δ + ε + ζ = 1
      • The coefficients α, β, γ, δ, ε, and ζ are weights assigned to different aspects of the metric, reflecting the relative importance of each factor in the collaboration between paradigms.
    • P_1 and P_2 are the programming paradigms being compared.
    • C_1, C_2 represent the sets of characteristics for paradigms P_1 and P_2, including elements like {record}, {procedure}, {closure}, etc.
    • F_1, F_2 are the sets of "parent" paradigms for P_1 and P_2, including themselves. These represent the paradigms from which P_1 and P_2 have evolved or derived.
    • S_1, S_2 are the sets of "child" paradigms for P_1 and P_2, including themselves. These are the paradigms that have evolved from P_1 and P_2.
    • M_1, M_2 are the meta-paradigms associated with P_1 and P_2, which might be {Functional}, {Shared_state}, etc.
    • T_1, T_2 indicate Turing-completeness for P_1 and P_2. An indicator is true if the corresponding paradigm is Turing-complete.
    • O_1, O_2 are the indicators of observable non-determinism for P_1 and P_2. An indicator is true if the paradigm allows for observable non-determinism.

Functions Used

  • Intersection of Concepts (I): I(C_1, C_2) = |C_1 ∩ C_2| / |C_1 ∪ C_2|
  • Parent-Child Relationship (R): R(F, S) = 1 if F ∩ S ≠ ∅, else 0
  • Meta-paradigm Compatibility (M): M(M_1, M_2) = 1 if M_1 = M_2, else 0
  • Turing-completeness (TC): TC(T_1, T_2) = 1 if both T_1 and T_2 are Turing-complete, else 0
  • Observable Non-determinism (NDO): NDO(O_1, O_2) = 1 if O_1 and O_2 either both allow or both do not allow observable non-determinism, else 0

Application and Implementation

Our implementation in Haskell calculates this metric by leveraging the language's capabilities to manipulate complex data structures and perform precise mathematical computations. The source code included in this repository demonstrates how we apply the metric to various programming paradigms to assess their collaboration potential.

Implementation Details

The Haskell codebase is structured into several modules, each responsible for a distinct aspect of the metric calculation process:

Modules and Their Roles

  • ParadigmData and LanguageData: These modules define the programming paradigms and languages, including their characteristics such as concepts, parents, children, Turing-completeness, and observable nondeterminism.

  • ParadigmType and LanguageType: Contain type definitions for paradigms and languages. These types are used throughout the code to ensure type-safe operations on data.

  • MetricFunctions: Implements the core functions used to calculate the collaboration metric between paradigms. It includes functions for generating all combinations of paradigms, calculating intersections and unions of characteristics, and computing the metric based on a formal mathematical definition.

  • MetricFunctionsForLanguages: Extends the functionality to calculate the collaboration metric between programming languages. It leverages the paradigm data to assess collaboration potential based on the paradigms supported by each language.

Detailed Core Functionalities

Generating Combinations: combinations

This function is pivotal for the framework as it generates all possible pairs from a given list of paradigms or languages. Each pair is used as input for metric calculations, ensuring a comprehensive exploration of potential collaboration between every possible combination within the dataset.

Intersection and Union: intersection, union

  • intersection: Calculates the common elements between two sets of characteristics, essential for identifying conceptual overlaps. This measure of similarity can indicate potential areas for collaboration.
  • union: Amalgamates the unique elements from two sets, providing insight into the combined characteristics' diversity and complementary nature.

Calculating the Metric: calculateMCMetric

Central to the metric calculation, this function processes two paradigms to compute the Collaboration Metric (MC) based on a sophisticated mathematical formula. Key aspects include:

  • Intersection Over Union (I Function): Quantifies conceptual similarity.
  • Parent-Child Relationship (R Function): Assesses evolutionary connections, reflecting historical influences or derivations.
  • Meta-paradigm Compatibility (M Function): Evaluates shared overarching programming models or philosophies.
  • Turing Completeness (TC Function) and Observable Nondeterminism (NDO Function): Examine fundamental computational capabilities and behaviors.

This multifaceted score reflects different dimensions of potential collaboration, from conceptual similarity to functional compatibility.

Writing Results to CSV: calculateMCForAllCSV, calculateLanguageCollaborationForAllCSV

These functions orchestrate the metric's calculation across all paradigm or language pairs and save the results in CSV format. This approach allows for:

  • Broad Analysis: By computing and storing metrics for every pair, it highlights areas for promising cross-paradigm integration or language interoperability.
  • Result Sharing: Exporting to CSV enables sharing findings with the broader community, fostering further exploration and validation.

Workflow Integration

Seamlessly integrated into the project workflow, these functions are coordinated by the main function, which guides the calculation process from generating combinations to writing the comprehensive results to CSV files. This showcases the practical application of mathematical concepts and functional programming in software engineering research.

For R scripts

The directory MC_Analysis_In_R/ contains R scripts that utilize the results from the Haskell implementation to provide an in-depth analysis and visualizations of the collaboration potentials between paradigms. To start the analysis, make sure you have both Haskell and R installed, then follow the specific instructions in the corresponding subfolders.

License

This project is comprised of two main components: the source code and the generated data. Each component is covered by a different license to best meet the project's goals of openness, contribution, and data protection.

Source Code

The source code of this project is licensed under the Apache License 2.0. This license provides you with extensive freedoms to use, modify, and distribute the code, even within commercial contexts, under the condition that the original copyright notice and license text are included in any distributions. For more details, please see the LICENSE file included with the code.

In addition to the terms of the Apache License 2.0, we kindly ask for an explicit attribution whenever the project's code is used in a product or another project. This request is not legally binding under the terms of the Apache License 2.0 but is made in the hope that users will acknowledge and credit the contribution made by the original developers.

Generated Data

The datasets produced by this project are licensed under the Creative Commons Attribution Non-Commercial 4.0 International License (CC BY-NC 4.0). This license allows others to share, copy, distribute, and use the data freely, but only for non-commercial purposes and with appropriate attribution to the original creator. When using or distributing the data, please provide credit by mentioning the name of the data creator, the title of the dataset, a link to the license, and indicate if any changes were made.

For detailed information on the requirements of the CC BY-NC 4.0 license, including how to provide proper attribution, please refer to the Creative Commons website.

We hope that these licensing arrangements encourage the use, sharing, and development of both the code and the data in a manner that respects and acknowledges the creators' efforts.

Acknowledgments

We would like to thank everyone who contributed to this project, especially those who provided valuable insights into programming paradigm theory and mathematical analysis.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors