00_10.md 14 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). В рамках текущей работы будет предпринята попытка на новом уровне осмысления создать язык программирования с опорой на диалектический материализм на столько, на сколько это возможно в текущих условиях.