Пётр Кушнир писал(а):
Типа, вот computer science для всех, циклы там, или даже, функции первого порядка, вы изучите, но знайте, что оно никому не нужно, настоящие компьютеры работают не так (почему, кстати).
Потому что циклы - концепция слишком высокоуровневая для кучки транзисторов? И кто сказал, что циклы не нужны, потому что транзисторы про них не знают? Настоящие компьютеры - они такие, какие есть. Из-за недостатков фон Неймановской архитектуры и дороговизны быстрой памяти (особенно в периоды становления отрасли) имеем то, что имеем: жутко сложную для эффективного использования подсистему "память-процессор" с очень малым количеством регистров, целой иерархией кешей и всякими там параллелизмами на уровне инструкций. Так исторически сложилось. Возможно, если бы основы проектирования компьютеров закладывались бы сейчас, то на текущем уровне развития технологий получилось бы что-то более простое... Но имеем то, что имеем.
Пётр Кушнир писал(а):
А вот особый computer science для понимающих людей, там компилятор просто переписывает ваш код в правильный код, без всей этой обобщённой фигни, Циклов Дейкстры или Ленивости.
Не в правильный, а в более эффективный же. Корректность, правда, при таком переписывании может пострадать, да. Это проблема. Кстати, возможно, отчасти поэтому доказательство корректности программ так и не популярно: ну докажешь корректность куска текста, а потом придёт оптимизатор и запросто выкинет все твои выкладки в мусорную корзину.
Пётр Кушнир писал(а):
А чего, получается, нельзя сделать такой язык, чтобы сразу писать оптимальный код?
Хм... Ассемблер?
Хотя, да, там мягко скажем, на нём не сразу получиться.
Ну а если нужен язык высокого уровня, то естественным образом встаёт вопрос об оптимальном отображения конструкций ЯВУ на набор инструкций машины, построенной в рамках физических, экономических и исторических ограничений.
Пётр Кушнир писал(а):
Или нельзя сделать такой процессор, чтобы он выполнял обычный, привычный код, без суперкомпиляции и прочей магии?
Эммм... А причём тут суперкомпиляция?
Пётр Кушнир писал(а):
И при этом, по последним данным, язык С++ уже настолько сложен, что даже с оптимизациями работает вполне обычно, а правильно спроектированные языки в той же нише, типа Rust, работают быстрее.
Rust и С++ всё таки в разных (хотя и отчасти пересекающихся) нишах. У первого на оф. сайте чёрным-по-белому написано systems programming language, а С++ таки отчаянно желают сделать general-purpose: чтоб и systems, и applications можно было писать. И я что-то не верю, что Rust быстрее С++. Пруф бы!
Пётр Кушнир писал(а):
Так вот в чём заключается double think: нужно писать правильно, потому что наука (computer science!), но не нужно писать правильно, потому что медленно (нормальные хакеры должны жертвовать правильностью ради скорости, циклы там разворачивать, и т.д. и т.п.).
Основная идея, что ни только писать, но и транслировать в машинный код нужно "правильно", где во втором случае "правильно" означает не только корректно, но и эффективно. А это сложно, потому что архитектура современных компьютеров сложная. Жертвовать правильностью ради скорости может только транслятор (и то только по команде), а не программист, конечно. Так для этого оптимизаторы и нужны: чтоб хакеры в прогрмамму на ЯВУ ручонками не лезли. В чём противоречие то?