P (programming language)

{{Short description|Event-driven programming language}}

{{Infobox programming language

| name = P

| logo = P logo.png

| logo_size = 120px

| logo caption =

| paradigm =

| designer =

| developer = Ankush Desai, Vivek Gupta: not the politician, Ethan Jackson, Shaz Qadeer, Sriram Rajamani, Microsoft

| latest release version = 2.3.5

| latest release date = {{Start date and age|2025|02|19}}

| typing =

| implementations =

| dialects =

| influenced =

| operating system = Cross-platform

| year = {{Start date and age|2012}}

| turing-complete = Yes

| influenced_by =

| file ext = .p

| license = MIT License

| website = {{url|https://p-org.github.io/P/}}

}}

P is a programming language for asynchronous event-driven programming and the IoT that was developed by Microsoft and University of California, Berkeley.[https://www.infoworld.com/article/3130998/microsoft-open-sources-p-language-for-iot.html Microsoft open-sources P language for IoT]

P enables programmers to specify systems consisting of a collection of state machines that communicate asynchronously in terms of events.{{cite web |url=https://www.microsoft.com/en-us/research/publication/p-safe-asynchronous-event-driven-programming/ |title=P: Safe Asynchronous Event-Driven Programming |author=Ankush Desai |author2=Vivek Gupta |author3=Ethan Jackson |author4=Shaz Qadeer |author5=Sriram Rajamani |website=Microsoft |date=November 2012 |access-date=20 February 2017}} 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.{{cite web|last1=Sergio De Simone|title=Microsoft Open-Sources P Language for Safe Async Event-Driven Programming|url=https://www.infoq.com/news/2016/10/microsoft-p-language-opensourced|website=InfoQ|access-date=20 October 2016}}

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

{{Portal|Free and open-source software}}

References

{{Reflist}}

Further reading

  • P: Safe asynchronous event-driven programming. Ankush Desai, Vivek Gupta, Ethan Jackson, Shaz Qadeer, Sriram Rajamani, and Damien Zufferey. In Proceedings of ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI), 2013.
  • Systematic testing of asynchronous reactive systems. Ankush Desai, Shaz Qadeer, and Sanjit A. Seshia. In Proceedings of the 2015 10th Joint Meeting on Foundations of Software Engineering (ESEC/FSE 2015).
  • Building Reliable Distributed Systems With P. Ankush Desai, Ethan Jackson, Amar Phanishayee, Shaz Qadeer and Sanjit A. Seshia. University of California, Berkeley. Technical Report No. UCB/EECS-2015-198.