Языки программирования

Jan 27, 2021 02:33

Я тут понял удивительную вещь. Одно из тех открытий, когда вдруг понимаешь, что всю жизнь говорил прозой. Ну когда обнаруживаешь, что ты какую-то вещь считал естественной, считал что вообще все вокруг так думают, а оказывается, ровно наоборот: так не думает почти никто ( Read more... )

Leave a comment

Comments 53

anonymous January 27 2021, 09:53:20 UTC
Все математические теории и модели были сформулированы и разъяснены на естественных человеческих языках.

Все ТЗ на разработку языков программирования тоже написаны на естественном языке.

Отсюда версия - языки программирования вовсе не уникальная сущность для моделирования, а временное решение. До тех пор, пока с компьютером не станет возможным общаться на человеческом языке.

И отсюда вовсе не следует, что языки программирования отомрут. Они останутся ровно также, как в математических текстах остаются специфические обозначения, упрощающие и сокращающие изложение и делающие математический текст нечитабельным для большинства непрофессионалов.

Reply

akuklev January 28 2021, 01:48:35 UTC
"Within a computer, natural language is unnatural." - Alan Perlis

https://youtu.be/Ct-lOOUqmyY

Reply

rdia January 30 2021, 07:51:58 UTC
> До тех пор, пока с компьютером не станет возможным общаться на человеческом языке.

"Искусственный интеллект напишет бинарный код из полного и точного технического задания. Вы, кстати, знаете, как называется полное и точное тех. задание? Оно называется 'Программа'."

Для общения с машиной, которая делает 3*10^9 операций в секунду, то есть, может ошибиться 10^13 раз в час, техническое задание должно быть составлено без ошибок и недомолвок. А для этого нужны формальные языки.

Кстати, с людьми ровно то же самое - как правило, когда нужно точно описать алгоритм, используют псевдокод, а не естественный язык.

Reply


anonymous January 27 2021, 10:15:43 UTC
> ратовали только за pure FP без каких-либо выразительных средств для описания императивных алгоритмов

Можешь данную идею развернуть? Потому что на первый взгляд оно противоречит вот этому:

> и как этого избежать не теряя в элегантности описания построений

Ведь императивность как раз и мешает нам строить элегантные рассуждения про концепции в некоей программе?

> Математика кишмя кишит построениями, от и до.

Так-то да, но ведь далеко не всё сводится к конструктивной математике. Полным полно доказательств от противного например. Или я тебя как-то не так понял?

Reply

akuklev January 28 2021, 01:57:23 UTC
> Ведь императивность как раз и мешает нам строить элегантные рассуждения про концепции в некоей программе?

Это если понимать императивность в наивном смысле, т.е. “чтоп можно было написать как на С и работало”. Я вижу это совсем по-другому, а именно что в языке, основывающемся на MLTT, хорошо иметь поддержку кастомных модальностей, в том числе в смысле modal substructural logic. Такие модальности позволяют концептуально-честно описывать такие вещи как взаимодействие со внешним по отношению к программе миром, например с пользователем или внешними сервисами. И это же позволяет во фрагменте кода, где был включён import соответствующей модальности писать код очень похожий на императивный, только концептуально чище.

Наружу в purely functional этот фрагмент кода вкладывается путём, грубо говоря, обёртывания в ту монаду (модальности в простейшем случае описываются при помощи пары сопряженных монады и комонады, но я бы не хотел вдаваться в технические подробности).

Reply

chaource January 28 2021, 11:58:51 UTC
А гдѣ можно прочитать о парѣ "сопряженныхъ монады и комонады", для описанiя модальности?

Reply


chaource January 27 2021, 10:54:28 UTC
Реальный прогрессъ въ языкахъ программированiя пока что происходилъ въ двухъ ситуацiяхъ. Первая ситуацiя - наличiе готовой "декларативной предметной области" съ извѣстнымъ языкомъ спецификацiй. Вторая ситуацiя - ФП, когда оказалось, что можно математически вывести новые design patterns, сформулировать и доказать правильность ихъ работы.

"Декларативная предметная область" это значитъ, что уже есть принятый и понятный людямъ языкъ, на которомъ люди объясняютъ другъ другу спецификацiи задачъ въ этой области, и этотъ языкъ однозначно и адекватно задаетъ и формулировку задачи, и ея рѣшенiе.

Два примѣра "декларативной предметной области":

1. Традицiонная запись ариѳметическихъ выраженiй. Мы пишемъ (x + y) / 2 + 1 и намъ сразу понятно, что и какъ будетъ вычислено. Когда придумали языкъ Фортранъ, гдѣ такiя выраженiя автоматически правильно компилируются, продуктивность программистовъ на порядокъ выросла. Не надо писать тесты, провѣряющiе, что мы правильно распредѣлили память или что второй знакъ "плюсъ" вычисляется послѣ дѣленiя. Мы ( ... )

Reply

rdia January 30 2021, 07:57:33 UTC
> является однозначнымъ способомъ записать и формулировку, и рѣшенiе задачи.

Метод решения задачи выбирается компилятором. И в случае арифметических выражений мы точно знаем ключи компилятора, которые приведут к разным алгоритмам на современных x86 системах - это включение/выключение sse, avx и fp87.

Есть разные оптимизации, трансформирующие выражения 2*x в x << 1 или x + x при компиляции. Результат вычислений будет похожим на то, что подразумевалось. Но это, собственно, всё, что гарантируется.

Reply


aosypov January 27 2021, 12:25:07 UTC
Если верить выражению "комплит по Тьюрингу", то все языки +- одинаковы с Вашего захода, если написать им пару библиотек.
Остаются только синтаксические идиосинкразии.

Reply

akuklev January 28 2021, 02:05:05 UTC
Вот собственно о том и речь, что если воспринимать языки как отвертки-с-моторчиком для настройки компьютеров, то все языки эквивалентны.

А если как инструменты для концептуализации и моделирования предметной области, то, разумеется, нет. В частности в некоторые из них вкладывается хотя бы интуиционистская логика первого порядка, а в некоторые только фига с маслом вкладывается.

Reply


chaource January 27 2021, 14:17:40 UTC
Примѣры того, какъ не достигался прогрессъ въ языкахъ программированiя ( ... )

Reply


Leave a comment

Up