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]
Firstappeared2012
Stable release
2.3.5
/ February 19, 2025
| P | |
|---|---|
![]() P | |
| Developer | Ankush Desai, Vivek Gupta, Ethan Jackson, Shaz Qadeer, Sriram Rajamani, Microsoft |
| First appeared | 2012 |
| Stable release | 2.3.5
/ February 19, 2025 |
| OS | Cross-platform |
| License | MIT License |
| Filename extensions | .p |
| Website | p-org |
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;
}
}
}
