P (programming language)

Event-driven programming language From Wikipedia, the free encyclopedia

P is a programming language for asynchronous event-driven programming and Internet of things developed by Microsoft and University of California, Berkeley.[1]

DeveloperAnkush Desai, Vivek Gupta, Ethan Jackson, Shaz Qadeer, Sriram Rajamani, Microsoft
Firstappeared2012; 14 years ago (2012)
Stable release
2.3.5 / February 19, 2025; 12 months ago (2025-02-19)
Quick facts Developer, First appeared ...
P
P
DeveloperAnkush Desai, Vivek Gupta, Ethan Jackson, Shaz Qadeer, Sriram Rajamani, Microsoft
First appeared2012; 14 years ago (2012)
Stable release
2.3.5 / February 19, 2025; 12 months ago (2025-02-19)
OSCross-platform
LicenseMIT License
Filename extensions.p
Websitep-org.github.io/P/
Close

P enables programmers to specify systems consisting of a collection of state machines that communicate asynchronously in terms of events.[2] P programs can run and be analyzed on any platform supported by .NET. Additionally, P programs can generate C# and C code.

P is open source, licensed under MIT License, and available on GitHub.[3]

Example

machine BankServer
{
  var database: Database;

  start state Init {
    entry (initialBalance: map[int, int]){
      database = new Database((server = this, initialBalance = initialBalance));
      goto WaitForWithdrawRequests;
    }
  }

  state WaitForWithdrawRequests {
    on eWithDrawReq do (wReq: tWithDrawReq) {
      var currentBalance: int;
      var response: tWithDrawResp;

      // read the current account balance from the database
      currentBalance = ReadBankBalance(database, wReq.accountId);
      // if there is enough money in account after withdrawal
      if(currentBalance - wReq.amount >= 10)
      {
        UpdateBankBalance(database, wReq.accountId, currentBalance - wReq.amount);
        response = (status = WITHDRAW_SUCCESS, accountId = wReq.accountId, balance = currentBalance - wReq.amount, rId = wReq.rId);
      }
      else // not enough money after withdraw
      {
        response = (status = WITHDRAW_ERROR, accountId = wReq.accountId, balance = currentBalance, rId = wReq.rId);
      }

      // send response to the client
      send wReq.source, eWithDrawResp, response;
    }
  }
}

See also

References

Further reading

Related Articles

Wikiwand AI