Қазіргі заманғы бағдарламалау тілін дамыту үшін Process Calculi және PL Teorem пайдалану

Біраз уақыттан бері тіл теориясы мен процестерді программалауға аса қызығушылық таныттым және оларды зерттей бастадым. Шынын айтсам, бұл мансапқа баруға қарсы емеспін. Мен теорияны керемет қызықты деп санаймын. Мен PL теориясы немесе Process Calculi қазіргі заманғы бағдарламалау тілін дамытуда ешқандай маңызы жоқ болса, мен айналысамын. Мен Pi-Calculus-да көптеген нұсқаларды көріп тұрмын және оларда белсенді зерттеу бар, бірақ олар қажет бола ма немесе маңызды қосымшалар бар ма? Мен бағдарламалау тілдерін дамытуды жақсы көретіндіктен, мен шын мәнінде мақсатты мақсатты ПД-ды құру үшін қолдануға болатынын сұраймын. Мен жазған материалдар үшін, шын мәнінде, теорияға ешқандай қатысы жоқ.

7

5 жауаптар

Бағдарламалау тілін жобалау ғылымы оның егде жасында өте көп. Теория (қандай бағдарламаларды меңгерген және тілдің эффективтілігі) және эмпиризм (қандай бағдарламашылар басқарады немесе жасай алмайды) тіл жасау кезінде бір немесе бірнеше салмақты дәлел алуға мүмкіндік береді. Бірақ біз сирек шешім қабылдауға сандық негіз бар.

Кейбір теория инновацияның практикалық программалау тілінде қолданылуы үшін жеткілікті түрде тұрақтандыратын уақыты арасындағы уақытша кешігу бар және бұл жаңалық «негізгі» тілдерде пайда болады. Мысалы, қоқыс жинауды автоматты түрде жады басқаруды 1960 жылдардың ортасында өнеркәсіптік пайдалану үшін жетілдірілген деп айтуға болады, бірақ 1995 жылы Java-мен тек негізгі желілерге қол жеткізді. Параметрлік полиморфизм 1970-ші жылдардың соңында жақсы түсінді және оны жасады Java-ге 200-ші жылдардың ортасында. Зерттеушінің мансап шкаласы бойынша 30 жыл - бұл ұзақ уақыт.

Тіл үйренудің кең ауқымды индустриалды тануы - әлеуметтанушыларға зерттеу жүргізу және ғылымның егде жасында одан да көп болуы. Нарықтың маңызды факторы - егер Sun, Microsoft немесе Apple тілдерді итермесе, бұл POPL және PLDI құжаттарының кез келген санына қарағанда әлдеқайда көп әсер етеді. Тіпті таңдау мүмкіндігі бар бағдарламашылар үшін тіпті, кітапхананың қолжетімділігі әдетте тілдің дизайнынан әлдеқайда маңызды. Тілдік дизайн маңызды емес деп айтуға болмайды: жақсы ойластырылған тілге ие болу жеңілдік! Әдетте бұл шешуші фактор емес.

Процесс балансы теория әлі тұрақтандырылмаған кезеңде. Біз дәйекті есептеулерді түсінетінімізге сенімдіміз - біз дәйекті есептеуді ұнататын барлық модельдер баламалы (бұл Шіркеу-Туринг диссертациясы). Бұл бір мезгілде сақталмайды: әртүрлі технологиялық процесте экспрестивтіліктің нашар айырмашылығы болады.

Процестің калькуляциясы практикалық салдары бар. Көптеген есептеулер таратылды - олар серверлермен, серверлермен, басқа серверлермен сөйлесумен айналысатын серверлермен сөйлесетін клиенттерді тартады. Тіпті жергілікті есептеулер бірнеше процессорлардан параллелизмді пайдалану үшін және қоршаған орта арасындағы өзара әрекеттесу (тәуелсіз бағдарламалар және пайдаланушымен).

Ғылыми жетістіктер бағдарламалық қамтамасыз етуді жақсарту үшін қажет пе? Өйткені, миллиардтаған индустрия бар, ол аспандағы пирогтан пи-картаны айта алмайды. Содан кейін, бұл сала миллиардтаған доллар жұмсайды, қателерді түзетеді.

«Оларға қажет бола ма?» - зерттеудің ешбір маңызды мәселесі емес. Ұзақ мерзімді салдары қандай болатынын алдын ала болжау мүмкін емес. Мен тіпті одан әрі қарай барамын және кез-келген зерттеудің бір күннің салдары болатынын сенімді болжам деп айта аламын - біз сол күні не келесі мыңжылдықта болатынын білмейміз.

8
қосылды

Менің жауапым, шын мәнінде, Джиллесді ойлап тапқан жоқ Мен өзім жазғанға дейін оқы. Мүмкін бәрі де пайдалы.

Сұрағыңызға жауап беруге тырысып көрейік бағдарламалау тілдерінің екі өлшемі арасындағы өзара байланысты жалпы алғанда тілдік теорияны және процесті бағдарламалауға айырмашылығы бар әсіресе есептеу.

  • Таза зерттеу.

  • Өнімді мақсатты зерттеу және дамыту.

Соңғысы, әдетте, қамтамасыз ету мақсатында өнеркәсіпте орын алады бағдарламалау тілдерін өнім ретінде. Java-ны жасайтын командалар Microsoft корпорациясындағы Oracle және C# мысалдары. Керісінше, таза зерттеу өнімге байланысты емес. Оның мақсаты бағдарламалауды түсіну тілдерді ішкі қызығушылықтың объектілері ретінде қарастыруға және зерттеуге мүмкіндік береді барлық бағдарламалау тілдерінің негізінде жатқан математикалық құрылымдар.

Because of divergent goals, Different aspects of programming language theory are relevant in pure research and in product focused R&D The picture below may give an indication what's important where.

enter image description here

Осы жағдайдың екі өлшемі неге соншалықты көрінетінін сұрауы мүмкін әртүрлі және олар қалай болғанымен байланысты.

Негізгі түсінік - бағдарламалау тілін зерттеу және дамыту Техникалық, әлеуметтік және экономикалық өлшемдері бар. Іс жүзінде анықтамасы, саланың экономикалық шығынға қызығушылығы бар бағдарламалау тілдері. Microsoft және басқалар тілдерді дамытпайды олардың жүректерінің игілігі, бірақ олар бағдарламалауға сенеді тілдер оларға экономикалық артықшылық береді. Және олар зерттеді неге бағдарламалау тілдерінің кейбіреулері табысты болып жатқандығын, ал басқалары көрініп тұр ұқсас немесе неғұрлым озық сипаттамалары бар, жоқ. Және олар оны тапты бірде-бір себеп жоқ. Бағдарламалау тілдері және олардың тілі орталар күрделі, сондықтан оларды қабылдаудың себептері де бар кез келген нақты тілге назар аудармау. Бірақ ең үлкен фактор бағдарламалау тілінің жетістігі - бұл преференциалды қосымшалар қазірдің өзінде кеңінен пайдаланылатын тілдерге программистер: көп адамдар тілді қолдану, кітапханалардың, құралдардың, оқу материалдарының көбі бар қол жетімді және бағдарламашы неғұрлым өнімді болса, оны пайдалана алады тілі. Бұл желі эффектісі деп те аталады. Тағы бір себеп бар жеке тұлғалар үшін және жоғары деңгейлі коммутация тілдері ұйым: тіл меңгеру, әсіресе өте тәжірибелі бағдарламашы және тілге деген семантикалық қашықтық болғанда үлкен, көп уақытты талап ететін күш. Осы фактілерді ескере отырып, біреуі сұрай алады, неге жаңа тілдер тартуға болады? Неліктен компаниялар? мүлдем жаңа тілдерді дамыту керек пе? Неге біз тек Java-мен қалмаймыз Кобол? Меніңше, тілді сарымдастырудың бірнеше негізгі себебі бар сәттілікке жетіп, бастапқыда танымал белсенділерді ауыстырады.

  • Бағдарламаның жаңа домені ашылмайды, оған ешқандай әрекет жасалмайды ауытқу. Алғашқы мысал - біртектес көтерілуімен жел

  • Тілдің жабысқақ. Бұл мен өзгерудің жоғары бағасын білдіреді тілі. Бірақ кейде бағдарламашылар әр түрлі салаларға көшеді, олармен бағдарламалау тілін меңгеріп, табысты болу жаңа өрістегі ескі тіл.

  • Тілге айтарлықтай қаржы жұмсалған үлкен компания жіберіледі өрт қуаты. Бұл қолдау бала асырап алу қаупін төмендетеді, себебі ертерек асырап алынғандар тіл әлі де болатынына сенімді болуы мүмкін бірнеше жыл бойы қолдады. Бұның жақсы мысалы C #.

  • Тілдің ықпалды құралдар мен эко-жүйе болуы мүмкін. Мұнда да C # және бұл Net және Visual Studio эко-жүйе ретінде аталуы мүмкін мысалы.

  • Ескі тілдер жаңа мүмкіндіктерді алады. Java ойға келеді, ол Әрбір иерархия функциядан жақсы идеяларды қабылдайды бағдарламалау дәстүрі.

  • Соңында, жаңа тілде техникалық техникалық артықшылықтар болуы мүмкін, мысалы, анағұрлым мұқият болуы, жақсы синтаксисі, теру жүйелері бар көп қателіктер және т.б.).

Бұл фонды ескере отырып, бұл таңқаларлықтай болмауы керек таза программалау тілін зерттеу арасындағы үзіліс, және коммерциялық бағдарламалау тілін дамыту. Бірақ екеуі де мақсат қойды әсіресе бағдарламалық жасақтаманың құрылуы мен эволюциясын тиімдірек ету кең ауқымды бағдарламалық қамтамасыз ету үшін индустриялық программалау тілі жұмыс істеуі керек сыни көзқарасқа қол жеткізу үшін жедел қабылдауды жеңілдетуге мүдделі массасы және желі әсерін алу. Бұл зерттеуге назар аударады бағдарламашылар жұмыс істейтін заттар. Және бұл ұқсайды кітапхананың қол жетімділігі, компилятор жылдамдығы, құрастырылған сапасы сияқты нәрселер код, портативті және т.б. Бүгінгі тәжірибемізді процесті есептеу негізгі жобалар бойынша жұмыс істейтін бағдарламашылар үшін өте аз (дегенмен, болашақта өзгеретініне сенемін).

Таза бағдарламалау тілін зерттеу мүлдем басқаша. Ол жұмыс істейді бағдарламалау тілдерінің оңайлатылған үлгілері: $ \ lambda $ -calculus функционалдық бағдарламалауды массивтік оңайлату. Сол сияқты $ \ pi $ -calculus - бір мезгілде үлкен жеңілдетеді бағдарламалау. Бұл массивтік жеңілдетулер табысты кілт болып табылады зерттеу. Олар негізгі есептеу механизмдеріне назар аударуға мүмкіндік береді (мысалы, $ \ beta $ - функционалды бағдарламалау үшін, логикалы-программалауға арналған шешімді/біріктіру, атау беру бір мезгілде есептеу). Скала секілді тілдерді білу үшін өмір сүрудің толық түрі бар, біз JVM туралы алаңдатудың қажеті жоқ. JVM туралы ойлау шынымен жақсы түсінуден нашарлайды түрі-шығару. Міне, сондықтан есептеуді азайту негізгі калькулий өмірлік және қуатты.

Сондықтан сіз бағдарламалау тілін зерттеуді массивтік құмсалғыш деп ойлайсыз онда адамдар ойыншықтармен ойнайды және қызықты нәрсе таба алады ойыншықпен ойнағанда және ойыншықты зерттеген мұқият, содан кейін бұл қызықты ойыншық өзінің ұзақ маршына қарай бастайды негізгі өнеркәсіптік қабылдау. Мен көптен бері жүремін, себебі тіл бағдарламалау тілін зерттеуші ойлап тапқан ерекшеліктер кеңінен қабылданғанға дейін ондаған жылдар қажет. Мысалы, қоқыс коллекция 1950 жылдары ойлап шығарылды және кеңінен қол жетімді болды 1990 жылдары Java. Үлгіге сәйкес келетін харц 1970 жылға дейін кеңінен таралған тек Scala-дан бастап қолданылған.

Process calculus is an especially interesting toy. But it's too new to be investigated thoroughly. That will take another decade of pure research. What currently going in process theory research is to take the single biggest success story of programming language research, the theory of (sequential) types and develop the theory of types for message passing concurrency. Typing systems of moderate expressivity for sequential programming, say Hindley-Milner, are now well-understood, ubiquitous and accepted by working programmers. We'd like to have moderately expressive types for concurrent programming. Research on this started in the 1980s by pioneers like Milner, Sangiorgi, Turner, Kobayashi, Honda, and others, often based, explicitly or implicitly, on the idea of linearity which comes from linear logic. The last few years have seen a major increase in activity and I expect this upwards trajectory to continue for the foreseeable future. I also expect this work to start leaking into product focused R&D, in parts for the pragmatic reason that young researchers who have been trained in process calculus will go and work in industrial R&D labs, but also because of the evolution of CPU and computer architecture away from sequential forms of computation.

Қысқаша айтқанда, мен сіздердің кесірін білмейтіндігіңе алаңдамаймын бағдарламалау тілінің теориясы сияқты процестерді есептеу пайдалы Құрылыс тілдерінің өз жұмысы. Бұл жай ғана кесіп өткендіктен теория қазіргі бағдарламалауға байланысты емес тілдер. Болашақ тілдер туралы. Бұл үшін біраз уақыт қажет «шынайы әлем» жетеді. Тілдерді жасау үшін пайдаланатын білім бүгінгі күннің бағдарламалау тілінің теориясы. Мен сізді шақырамын процесті есептеу туралы көбірек білу үшін, себебі бұл ең біреуі компьютерлік ғылымның барлық теориялық салаларының шығатын орындары.

6
қосылды
Мәссаған! Бұл диаграмманы жасау үшін қанша уақыт қажет болды және оны болашақта пайдалана аламын ба?
қосылды автор cody, көзі
@cody OmniGraffle арқылы бірнеше секунд алды және оны пайдалануға еркін сезінеді.
қосылды автор PKG, көзі

Мен Pi-Calculus-да көптеген нұсқаларды көріп тұрмын және белсенді зерттеу көп, бірақ олар қажет бола ма немесе маңызды қосымшалар бар ма?

     

Мен бағдарламалау тілдерін дамытуды жақсы көретіндігімнің себебі мен шындықтың түпкі мақсаты - теорияны шын мәнісінде құру үшін қолдануға болады. Мен жазған материалдар үшін, шын мәнінде, теорияға ешқандай қатысы болмады.

Бұл күрделі мәселе! Мен сізге жеке пікірімді айтамын және бұл менің пікірін деп атап көрсетемін.

Пи-есептеудің бір мезгілде бағдарламалау үшін белгілер ретінде тікелей қолайлы деп санамаймын. Дегенмен, менің ойымша, сіз белгілі бір керек бір мезгілде бағдарламалау тілін жобалау алдында. Мұның себебі pi-calculus төмен деңгейлі --- бірақ маңызды, композициялық береді! --- параллельділік есебі. Нәтижесінде ол қалағаныңызды білдіре алады, бірақ әрқашан ыңғайсыз.

Бұл түсініктемені түсіндіру түрлері туралы ойлануды қажет етеді. Біріншіден, пайдалы бағдарламалау тілдері әдетте абстракцияны құру үшін типтік пәннің кейбір түріне қажет. Атап айтқанда, бағдарламалық жасақтаманы құрастыру кезінде процедуралық абстракцияларды пайдалану үшін сізге функцияның бір түрі қажет.

Пи-кистиканың жаратылыстану пәні классикалық сызықтық логиканың кейбір нұсқалары. Қараңыз, мысалы, Абрамскийдің « Процесстің орындалуы , қарапайым мезгілдегі бағдарламаларды сызықтық логиканың ұсыныстарының дәлелі ретінде қалай түсіндіретінін көрсетеді. (Әдебиет pi-calculus бағдарламаларын енгізу үшін сеанстың түрлерінде көп жұмыс жасайды, бірақ сеанстың түрлері мен сызықты түрлері өте тығыз байланысты.)

Дегенмен, pi-calculus-дың табиғи түрі пәні classical сызықты логика болып табылады және бұл бағдарламалау тілі ретінде оны пайдаланудағы қиындықтың көзі. Классикалық сызықтық логиканың көптеген көрсетілімдерінде $ A \ multimap B $ функциясының (сызықты) функциясы қарабай емес. Оның орнына, сіз Morgan duality $ A ^ \ bot ⅋ B $ арқылы функция түрлерін кодтаңыз.

Бұл POV түрі теориясынан жақсы, бірақ бағдарламалау кезінде бұл ыңғайсыз. Себебі, бағдарламашылар өздерінің функционалдық қоңырауларын ғана емес, сонымен қатар қоңырау стакасын басқаруды аяқтайды. (Шынында да, лиганың лиганың есептеуі пи-котормаға аударылады, әдетте CPS түрлендіреді). Енді теру оларды ешқашан бұрмаламайтындығына кепілдік береді, бірақ бәрібір программистке арналған бухгалтерлік есеп.

Бұл параллелизм теориясы үшін бірегей емес мәселе --- mu-calculus қоңыраулар/cc сияқты дәйекті басқару операторларының жақсы дәлелді-теориялық есебін береді, бірақ оны стикспен анықтап, оны ыңғайсыз программалау тілі етеді.

Сондықтан бір мезгілде бағдарламалау тілін құрастырғанда, менің ойымша, сіз өзіңіздің тіліңізді шикі пи-есептеуден гөрі жоғары деңгейлі абстракциямен жобалауыңыз керек, бірақ оны мағыналы терілген процестің есептеуіне таза түрде аударылғанына көз жеткізіңіз. (Жақсы өткен мысал Тонхино, Каир және Пфенингтің Жоғары- Тапсырыс процестері, функциялары және сеанстары: Monadic Integration .)

2
қосылды
@MartinBerger: Мен сені жауап беруге сендіргім келеді деп үміттімін! Егер сіз $ \ pi $ шикізатын бағдарламалауды қаласаңыз, сондай-ақ функцияларды қолданғыңыз келсе, онда сіз Milner аудармасының кескінінде жазылған терминдерді аяқтайтыныңызды білдіреді және сіз «басқаруға стак «дегенді білдіреді, бұл сіз шын мәнінде үздіксіздік пен айқын ауыстыруларды басқаратын боласыз. (Сонымен қатар, мен ван Bakel/Vigliotti қағазы туралы білмедім - рахмет!)
қосылды автор Justin Yost, көзі
IMO-дің «пайдаланушыға бағытталған» үдеріс тілі сізге ламбдалар мен айнымалы мәндерді беруі керек және (а) олардың жоғары деңгейлі тілдің өзі бойынша ақылға қонымды теңдеулер теориясы бар екенін және (b) қажетті параллельдік примитивтерді және в) төменгі деңгейлі пи-регистрлерді өңдеуге мүмкіндік береді. Демек, бұл бағдарламашы функцияны қант ретінде қарауға тура келмейді, бірақ олар базалық есептеулерден консервативті болып табылады, сонымен қатар кодтау бір мезгілде қолданылатын функцияларды (бұл мезгілдегі тілдің жобалау нүктесі) пайдалануына кедергі келтірмейді.
қосылды автор Justin Yost, көзі
Қандай мағынада $ \ pi $ -calculus-дегі қоңыраулар стакасын басқару керек? Бұл Milner-дің $ \ lambda $-ны $ \ pi $-ға кодтауда, сондай-ақ жаңа Van Bakel/Vigliotti кодтауында автоматты түрде орын алады. Функциялар $ \ pi $ -calculus-дегі синтаксистік қанттың мінсіз жақсы формасы.
қосылды автор PKG, көзі
Сондай-ақ, $ \ lambda \ mu $ -calculus - бұл қоңырау/cc сияқты жүйелі басқару операторларының шынымен ыңғайсыз есебі. Осындай операторлар әлдеқайда оңай және табиғи түрде $ \ pi $ -caluclus ішінде көрінеді, себебі секіру - хабарлама жіберудің айқын нысаны. $ \ lambda $ -calculus-де сіз секіруге болатын атау туралы табиғи түсінік жоқ, сондықтан сіз оны funciton қосымшасы ретінде кодтауыңыз керек немесе қосымша заттар қосуыңыз керек.
қосылды автор PKG, көзі
Функциялар туралы жемісті ойлаудың бір жолы - олар клиенттік-серверлік өзара әрекеттесу болып табылады, онда қайтарушы арна аффин болып табылады және серверлік арна репликацияланады. Бұл оңай жазылуы мүмкін. Сеанс түрлерінің бәрі оны толығымен басып шығармайды, себебі олар өзара әрекеттесудегі шектеулерде сәл әлсіз болады.
қосылды автор PKG, көзі
Мұның бәрі, әрине, $ \ pi $ шикізатын бағдарламалауды қаламайды - $ \ lambda $ -calculus шамадан артық емес. Формализм екеуі де басқалардың эксклюзонында есептеудің кейбір ерекшеліктеріне назар аударуға мүмкіндік беретін жеңілдетулер болып табылады.
қосылды автор PKG, көзі
Мен қазір біраз жұмыс істемеймін, келесі аптада үлкен жауап жазамын. Ашық алмастыруларды басқаруға және жалғастыруды қажет етпейді, басқаша айтқанда, $ let \ x \ = f (17) функциясының шақыруымен ... $ $ \ overline {f} <17, (\ nu x) r> r (x) .... $. Бұл негізінен $ \ lambda $ -calculus сияқты.
қосылды автор PKG, көзі
Бір мезгілдегі тілдердегі жоғары деңгейлі функциялардың қасиеттері (a, b, c) болуы керек. Бірақ әдеттегі өзара әрекеттесу түрлерін қолдансаңыз, олар жасайды. Honda және басқалардың 10 жыл бұрынғы жұмысын қараңыз.
қосылды автор PKG, көзі
@UdayReddy «Пи-математикада күшті қалыпқа келтіру», «Сызықтық және пи-математика», «Genericity және Pi-Calculus» және «Pi-Calculus-да бақылау» деп аталатын құжаттар.
қосылды автор PKG, көзі
@MartinBerger: Honda және басқаларының қандай қағазы?
қосылды автор Uday Reddy, көзі

Сіз « шын соңындағы мақсат теорияны шын мәнінде PL жасау үшін қолдануға болатынын» айтасыз. Сонымен, басқа мақсаттар бар екенін мойындайсыз ба?

Менің көзқарасым бойынша, теорияның №1 мақсаты қазіргі бағдарламалау тілдері туралы, сондай-ақ оларда жазылған бағдарламалар туралы ойлауға болатын түсінікті қамтамасыз ету болып табылады. Менің бос уақытымда мен Lisp-да жазылған ғасырлар бұрын бағдарламалық қамтамасыз етудің үлкен бөлігін, электрондық пошта клиентін қолдаймын. Күнделікті жұмыста қолдана алатын барлық теориялардың теориясы, мысалы, қисынды логика, бөлу логикасы, деректерді абстракциялау, салыстырмалы параметрлік және контекстік баламалылық т.б. Мысалы, бағдарламалық жасақтаманы жаңа мүмкіндіктің көмегімен кеңейтетін болсам, оның бастапқы функционалдығын сақтап қалу керек екенін білемін, яғни ол ескі контексттерде бірдей әрекет ету керек, дегенмен ол жаңа нәрсе жасайтын болады жаңа контексттер. Егер контекстік эквиваленттілік туралы ештеңе білмеген болсам, мәселені осылай шеше алмас едім.

Pi-calculus туралы сұрағыңызға келетін болсақ, pi-calculus тілдік дизайндағы қосымшалар табу үшін әлі де жаңа нәрсе деп ойлаймын. pi-calculus-дегі википедия беті BPML және occam-pi-ны пи пайдаланатын тіл ретінде қарастырады -кальцус. Сонымен қатар, сіз өзіңіздің предшественников CCS-тің беттерін және CSP, басқа да бағдарламалау тілінің жобалауында қолданылған басқа да процестерді қарап шығуға болады. Сондай-ақ, Sangiorgi және Walker кітабындағы /a> pi-calculus қолданыстағы бағдарламалау тілдеріне қатысты екенін көру үшін.

Мен жабайы табиғатта жұмыс істейтін процестердің практикалық іске асырылуын іздеймін :) (теория туралы оқумен қатар).

  1. Clojure async channels is based on CSP: http://clojure.com/blog/2013/06/28/clojure-core-async-channels.html
  2. Golang also has channels based on CSP (this inspired Rich Hickey for clojure I think): http://www.informit.com/articles/printerfriendly/1768317
  3. There's a guy who made an ACP based extension to scala (Subscript) but I don't have enough reputation to post the link...

және т.б.

0
қосылды