Кіріспе
Компьютерлік техникада фон Нейман тілі – фон Нейман архитектурасының жоғары деңгейдегі абстрактілі изоморфты көшірмесі болып табылатын бағдарламалау тілі. 2009 жылғы мәліметтер бойынша, қазіргі бағдарламалау тілдерінің көпшілігі осы сипаттамаға сәйкес келеді, бұл соңғы 50 жыл ішінде фон Нейман компьютерлік архитектурасының кеңінен басымдығының салдары болуы мүмкін. Фортран, C және тіпті Java арасындағы айырмашылықтар маңызды болғанымен, олардың барлығы фон Нейман компьютерінің бағдарламалау стиліне негізделгендіктен шектеледі. Мысалы, егер Java нысандары асинхронды хабар алмасу және атрибуттарға негізделген декларативтік адрестеу арқылы параллель түрде орындалса, онда Java бұл топқа жатпайды. Фон Нейман бағдарламалау тілдері мен архитектуралары арасындағы изоморфизм мынадай:
бағдарламалық айнымалылар ↔ компьютерлік жад ұялары
бақылау операторлары ↔ компьютерлік тест және секіру операторлары
тапсыру операторлары ↔ деректерді алу, сақтау операторлары
өрнектер ↔ жадқа сілтеме және арифметикалық операторлар.
control statements ↔ computer test and jump instructions
assignment statements ↔ fetching, storing instructions
expressions ↔ memory reference and arithmetic instructions.
Сын
Джон Бэкус фон Нейман тілдеріндегі тапсырма операторлары бағдарламалауды екі әлемге бөледі деп айтты. Бірінші әлем – өрнектерден тұрады, бұл потенциалды пайдалы алгебралық қасиеттері бар реттелген математикалық кеңістік: көптеген есептеулер осы жерде жүзеге асырылады. Екінші әлем – мәлімдемелерден тұрады, бұл пайдалы математикалық қасиеттері азырақ, ретсіз математикалық кеңістік (құрылымдық бағдарламалауды осы кеңістікте қолданылатын шектеулі эвристика ретінде қарастыруға болады). Бэкус 1978 жылы компьютер ғылымында зиянды цикл болғанын мәлімдеді, онда фон Нейман тілдеріне ұзақ уақыт бойы басымдық беру фон Нейман компьютерлік архитектурасының үстемдігін жалғастырды, ал оған тәуелділік фон Нейман емес тілдерді экономикалық тұрғыдан тиімсіз етіп, олардың одан әрі дамуын шектеді: кеңінен қолжетімді және тиімді фон Нейман емес тілдердің жетіспеуі компьютерлік конструкторларды жаңа компьютерлік архитектураларды әзірлеуге қажетті ынталандырудан және интеллектуалдық негізден айырды.
Қазіргі заманғы жүйелерде болуы
Қазіргі заманғы көптеген процессорлар бірнеше өңдеу ядроларын қамтиды, ал көп жіпті бағдарламалау әдетте бір бағдарламада көбірек есептеу қуатын пайдаланудың ең тиімді жолы болып табылады. Кейбір заманауи процессорлар тәртіпсіз орындау сияқты әдістермен жоғары деңгейде оптимизацияланған, бірақ логикалық бағдарламалау моделінің фон Нейман семантикасын бұзбастан мұны қашан жасауға болатынын анықтау үшін күрделі логика қолданылады. Жеке нұсқаулар мен деректер кэштері кеңінен қолданылады, бұл аппаратты өзгертілген Гарвард архитектурасына айналдырады, бірақ оптимизация сәтсіз болған жағдайларды анықтау үшін де логика бар, бұл өзін-өзі өзгертетін кодты орындауға мүмкіндік береді. Кейбір арнайы процессорлар (графикалық процессорлар сияқты) өте кең бірнеше нұсқау, бірнеше дерек (MIMD) құрылғылары болып табылады. Жалпы мақсаттағы процессорларда әдетте бірнеше ядро болады, бірақ олардың әрқайсысы жеткілікті жылдам болғандықтан, көптеген бағдарламалар бір тапсырманы параллелдеусіз де жеткілікті жылдам жұмыс істей алады. (Жіптер асинхронды кіріс-шығыстарды өңдеу үшін, әсіресе графикалық интерфейсте жиі қолданылады.) Жалпы мақсаттағы процессорлар техникалық тұрғыдан MIMD құрылғылары болып табылады, бірақ әдетте MIMD бағдарламалау үшін бастапқыдан-ақ жасалған жабдық ғана MIMD деп аталады. C, C++ және Java сияқты көптеген кеңінен қолданылатын бағдарламалау тілдері жіптер түрінде параллель өңдеуді қолдау арқылы қатаң фон Нейман моделінен бас тартты. Дегенмен, фон Нейман емес тілдердің көпшілігі функционалдық тілдер болып табылады және кеңінен қолданысқа ие болған жоқ.