00_10.md 16 KB

phi.00_10 Философские основы языка

Философы лишь различным образом объясняли мир, но дело заключается в том, чтобы изменить его.

Карл Маркс, «Тезисы о Фейербахе», 1845 г.

Диалектический материализм, как основа языка

Из всех доступных философских направлений диалектический материализм наиболее полно отражает основную идею проектируемого языка. Как известно, любой язык должен моделировать реально существующие материальные сущности и процессы. Либо скрытые сущности и процессы, но имеющие вполне материальную основу. Существует ряд сущностей и процессов, которые не имеют прямой реализации в реальном мире (например игры), но такие процессы смоделированные в виде состояний электронных структур всё-равно в некотором смысле существуют.

Три закона диалектики, как основа проектирования языка

Все три закона диалектики создают целостный базис для моделирования языка.

Единство и борьба противоположностей

Закон единства и борьбы противоположностей определяет основы форм и содержаний всего сущего. Основными сущностями в языке программирования являются:

  • контексты, как условия существования процессов и значений;
  • процессы, как "правила преобразования значений" и процессы, "связывающие значения";
  • значения, как материя над которой исполняются процессы.

Это три ортогональные философские категории образуют единство вычислительной материи в во всех формах её существования.

Закон отрицания отрицания

Закон отрицания отрицания определяет формы, которые содержатся в каком-либо контексте. Перетекание одной формы в другую форму определяет то внутреннее превращение, которое с ходом времени приводит к превращению контекста в своё новое представление -- результату (и, возможно, к образованию нового контекста). Так например, программный код при рефакторинге отрицает своё предыдущее состояние, через развитие новой (возможно качественной) формы.

Закон перехода количества в качество и обратно

Этот закон диалектического материализма определяет переход накопленных количественных изменений в новое качество. А при утрате качества -- назад в количественное состояние. Язык программирования в рамках диалектического дискурса проявляет такие свойства как, например -- при переводе текста программы из одной формы в другую более низкого уровня с без потери высокоуровневого смысла (в виде связей, переход между уровнями бытия). При этом количество кода соответствующего нижележащего уровня растёт, через явные связи сохраняя качества более высокого уровня.

Основные диалектические противоречия в языках программирования

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

Материя первична, сознание вторично.

Язык программирования является продуктом объективной реальности.

Все процессы и явления имеют материальную основу.

Модель должна опираться на объективную реальность, а не на абстрактные идеи.

Все находится в постоянном движении, изменении и развитии.

Состояния не статичны — они трансформируются под действием внутренних и внешних причин.

Но это значит, что конкретное состояние в конкретный момент времени -- будет истинно только для этого момента времени и пространственных координат.

Развитие происходит через борьбу противоположностей.

Внутренние противоречия в ходе меняющихся условий — двигатель изменений. Без них — нет развития.

Переход количественных изменений в качественные.

Накопление множества мелких изменений ведёт к скачку, к новому качеству. Но при этом внутренние накопленные изменения не куда не исчезают.

Отрицание отрицания.

Развитие идёт не по прямой, а по спирали: старое отрицается, затем отрицается само отрицание — и возникает что-то более высокое.

Язык программирования не рождается из пустоты, не является плодом субъективной фантазии. Он возникает как ответ на объективные потребности:

  • Развитие аппаратного обеспечения (процессоры, память, параллелизм).
  • Появление новых задач (веб, ИИ, распределённые системы).
  • Опыт существующих языков (их успехи и провалы).

Следовательно, материальной основой является:

  • Техническая база (компьютеры, сети, хранилища),
  • Социальная практика (программирование как труд, как ответ на развитие производственных отношений, и далее как база для общественных отношений),
  • Предшествующие реализации (языки C, Lisp, Python, Rust и др.).

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

Противоречия, как двигатель развития языка

В основе разработки любого языка — борьба противоположностей. Без противоречий нет движения, нет прогресса.

Ключевые противоречия:

  • Абстракция vs Эффективность (Чем выше абстракция — тем удобнее писать, но ниже контроль над железом; Python (высокоуровневый) vs C (низкоуровневый) )
  • Безопасность vs Гибкость ( Безопасность требует ограничений, гибкость — свободы. Rust (гарантии владения) vs C++ (управление памятью вручную) )
  • Простота vs Мощность (Простой язык ограничен, мощный — сложен в освоении. Go (простота) vs Haskell (высокая абстракция))
  • Статическая vs Динамическая типизация (Предсказуемость против адаптивности. Java vs JavaScript)
  • Централизованное vs Децентрализованное развитие (Комитет vs сообщество. ECMAScript (стандарт) vs Python (BDFL, потом PEP)

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

Диалектический путь развития: от идеи к практике и обратно

Этап 1: Отрицание старого (первая стадия отрицания)

Пример: CPythonGo.

Каждый новый язык отрицает недостатки предыдущего:

  • C: небезопасное управление памятью → Python добавляет ООП, динамическую типизацию, но усложняет контроль.
  • Python: медленный, динамический → Go предлагает кратно больше безопасности и скорости, но с GC.

Этап 2: Отрицание отрицания (синтез на новом уровне)

Go не просто "ещё один Python", он синтезирует

  • Достаточно высокую скорость (как компиляции в отличии от Си, так и исполнение в отличии от Python),
  • Безопасность через статическую типизацию (строже и Си, и Python),
  • Современный и понятный синтаксис (хорошо читаемый код, устойчив к нарушению структуры в отличии от Python),
  • Поддержку параллелизма как неотъемлемое свойство.

Это не возврат к низкоуровневому, а подъём на ступень выше — безопасное системное программирование.

Закон отрицания отрицания в действии: развитие идёт не по кругу, а по спирали прогресса.

Переход количества в качество

Постепенное накопление улучшений:

  • Небольшие расширения синтаксиса (теги-действия, сопоставление с образцом),
  • Улучшения системы типов,
  • Инструменты (форматеры, линтеры),
  • Экосистема библиотек.

В какой-то момент происходит качественный скачок:

Язык перестаёт быть "очередным инструментом" и становится платформой для новых форм практики.

Пример:

  • Python → стал основой для data science и машинного обучения.
  • JavaScript → из "языка для кнопочек" превратился в полноценную платформу (Node.js, React, Deno).

Количественные улучшения → качественное изменение роли языка в производстве.

Практика — критерий истины

Диалектический материализм утверждает: не мысли определяют бытие, а наоборот.

Применительно к языку программирования:

Хороший язык не тот, который красиво выглядит в теории, а тот, который:

  • Решает реальные задачи,
  • Упрощает труд программиста,
  • Предотвращает широкие классы ошибок,
  • Эффективен в производстве,
  • Развивается в условиях практики общественного характера производства (open source, промышленное применение).

Пример:

  • Scala — мощный, но сложный → ограниченное распространение.
  • Go — простой, но эффективный → массовое внедрение в облаках.

Практика показывает, что работает.

Роль сознания (программисты, как носители труда)

Хотя материя первична, сознание вторично, но активно. Сознание, после отражения реального мира и синтеза новых целей -- активно влияет на мир.

Гениальные разработчики (как Мао говорил о "героях-массах") — не творят из ничего, но осознают объективные законы, объективную необходимость и направляют развитие.

Пример:

  • Андрей Александреску (D),
  • Гвидо ван Россум (Python),
  • Грейдон Хоуф (Rust)

Все они не изобретали законы, но воплотили диалектику практики в синтезе. Истинный прогресс — когда сознание не отрывается от практики, а руководит ею.

Заключение

Все языки с точки зрения диалектического материализма можно рассматривать, как идеалистические (такие как brainfuck и им подобные), материалистические (такие как Оберон-7), а также языки занимающие переходное положение (такие как Go или Rust). В рамках текущей работы будет предпринята попытка на новом уровне осмысления создать язык программирования с опорой на диалектический материализм на столько, на сколько это возможно в текущих условиях.