Вспомнилась притча о воде, которая также согласуется с наблюдениями этой статьи. Вода конечно же несёт иносказательный смысл (например, как продукт массового потребления).
Если коротко, то Mojo – это всё тот же хорошо всем знакомый Python, только практически без архитектурных недостатков своего прародителя, с поддержкой возможностей современных аппаратных средств (многопоточность, GPU и т.д.) и новыми фичами. Он создаётся не столько как замена существующим языкам, а как улучшенная версия (т.н. upgrade) Python. Поэтому область применения Mojo – это в первую очередь те же области, в которых активно используется Python: искусственный интеллект, машинное обучение, Data Science, Big Data и т.д. Возможное успешное применение в других областях – это просто приятной бонус.
Вы подняли сложные вопросы, на которые в действительности нет однозначного ответа. Новые языки программирования создаются по разным причинам, например:
чтобы упростить программирование, повысить надёжность кода, увеличить скорость разработки или поддержать новые парадигмы программирования;
чтобы помочь исследованиям в определённой области или решить специфические задачи, для которых существующие языки не совсем подходят или не оптимальны;
чтобы захватить рыночную нишу в борьбе с конкурентами или привлечь внимание сообщества к своему продукту или технологии.
Язык и компилятор (интерпретатор) языка — это не одно и то же. Язык — это набор правил и соглашений, которые определяют, как писать программы на этом языке. Компилятор (интерпретатор) — это программа, которая переводит код с одного языка на код в другом языке (обычно в машинный код) и/или выполняет его построчно.
Не обязательно нужно придумывать новый язык, чтобы сделать новый компилятор. Можно сделать компилятор для уже существующего языка, который будет иметь какие-то преимущества перед другими компиляторами этого же языка, например, быстрее работать, лучше оптимизировать код, поддерживать новые платформы или возможности и т.д.
Новый супер-пупер компилятор «старого» языка может создать столько же хайпа (денег, славы, самомнения — это всегда индивидуально), как новый язык, если он будет решать какие-то актуальные проблемы разработчиков или предлагать какие-то инновационные решения. Например, компилятор LLVM стал очень популярным и востребованным благодаря своей гибкости, модульности и поддержке множества языков и платформ.
Можно взять код (старой) программы, пропустить его через (новый) компилятор и получить (новый) исполняемый код, если этот компилятор поддерживает этот язык и целевую платформу. Но это не значит, что новый код должен работать лучше или хуже старого. Это зависит от того, насколько хорошо написан компилятор и как он оптимизирует код.
Строго говоря, ни в одном высокоуровневом языке программирования не существует однозначного соответствия между кодом программы и машинным (т.е. исполняемым) кодом. Разные компиляторы могут переводить один и тот же «текст» программы в разный двоичный код, в зависимости от используемых алгоритмов и оптимизаций.
Преимущество нового языка (не компилятора) перед старым может быть в том, что он короче, более понятен, меньше устаревших и/или больше полезных инструкций, лучше подходит для определённой задачи или области, использует новые возможности аппаратных средств или парадигм программирования. Но это не значит, что новый язык всегда лучше старого. Каждый язык имеет свои сильные и слабые стороны, свои преимущества и недостатки. Важно выбирать язык в соответствии с целями и требованиями проекта.
При этом важно продолжать разрабатывать новые языки программирования, потому что это способствует инновациям в области разработки программного обеспечения. Новые языки могут предлагать новые возможности, решать новые задачи, улучшать производительность, надёжность или удобство кодирования. Новые языки также могут влиять на существующие языки, вдохновляя их на внедрение новых функций, конструкций или парадигм.
Например, язык TypeScript, созданный в 2012 году, добавил строгую типизацию к языку JavaScript, что повысило его надёжность и масштабируемость. TypeScript стал очень популярным среди разработчиков веб-приложений и веб-сайтов. В 2020 году язык JavaScript получил поддержку опциональной цепочки (optional chaining), которая позволяет безопасно обращаться к свойствам объектов, которые могут быть неопределёнными или равными null. Эта функция была заимствована из TypeScript.
Другой пример — язык Kotlin, созданный в 2011 году как альтернатива Java для разработки на платформе Android. Kotlin предлагает более краткий и выразительный синтаксис, поддержку функционального программирования, безопасность от нулевых указателей и многие другие преимущества перед Java. В 2017 году Google объявил о том, что Kotlin становится официальным языком для разработки на Android. В 2019 году Java получила поддержку текстовых блоков (text blocks), которые позволяют легко записывать многострочные строки без экранирования специальных символов. Эта функция была заимствована из Kotlin.
Создавать новые языки нужно, даже если они не всегда успешны. Потому что изучение новых языков помогает развивать целое направление отрасли — дизайн/проектирование языков, а также способствует расширению кругозора, пониманию различных подходов к программированию и обнаружению нестандартных решений. Кроме того, нельзя заранее знать, какой язык станет успешным или неуспешным. Иногда языки, которые кажутся непопулярными или устаревшими, могут вновь стать востребованными из-за каких-то изменений на рынке или в технологиях. Например, язык Fortran, созданный в 1957 году, до сих пор используется для научных и инженерных расчётов и имеет сравнительно высокую производительность.
Видимо, они сравнивают не в единицах длины (мкм), а объёма (мкм³)
Ах, как жаль. Видимо, пора звонить в техподдержку реальности
Вспомнилась притча о воде, которая также согласуется с наблюдениями этой статьи. Вода конечно же несёт иносказательный смысл (например, как продукт массового потребления).
Притча о воде
Спасибо за ваше замечание. Перевод подкорректировал.
Если коротко, то Mojo – это всё тот же хорошо всем знакомый Python, только практически без архитектурных недостатков своего прародителя, с поддержкой возможностей современных аппаратных средств (многопоточность, GPU и т.д.) и новыми фичами. Он создаётся не столько как замена существующим языкам, а как улучшенная версия (т.н. upgrade) Python. Поэтому область применения Mojo – это в первую очередь те же области, в которых активно используется Python: искусственный интеллект, машинное обучение, Data Science, Big Data и т.д. Возможное успешное применение в других областях – это просто приятной бонус.
Вы подняли сложные вопросы, на которые в действительности нет однозначного ответа. Новые языки программирования создаются по разным причинам, например:
чтобы упростить программирование, повысить надёжность кода, увеличить скорость разработки или поддержать новые парадигмы программирования;
чтобы помочь исследованиям в определённой области или решить специфические задачи, для которых существующие языки не совсем подходят или не оптимальны;
чтобы захватить рыночную нишу в борьбе с конкурентами или привлечь внимание сообщества к своему продукту или технологии.
Язык и компилятор (интерпретатор) языка — это не одно и то же. Язык — это набор правил и соглашений, которые определяют, как писать программы на этом языке. Компилятор (интерпретатор) — это программа, которая переводит код с одного языка на код в другом языке (обычно в машинный код) и/или выполняет его построчно.
Не обязательно нужно придумывать новый язык, чтобы сделать новый компилятор. Можно сделать компилятор для уже существующего языка, который будет иметь какие-то преимущества перед другими компиляторами этого же языка, например, быстрее работать, лучше оптимизировать код, поддерживать новые платформы или возможности и т.д.
Новый супер-пупер компилятор «старого» языка может создать столько же хайпа (денег, славы, самомнения — это всегда индивидуально), как новый язык, если он будет решать какие-то актуальные проблемы разработчиков или предлагать какие-то инновационные решения. Например, компилятор LLVM стал очень популярным и востребованным благодаря своей гибкости, модульности и поддержке множества языков и платформ.
Можно взять код (старой) программы, пропустить его через (новый) компилятор и получить (новый) исполняемый код, если этот компилятор поддерживает этот язык и целевую платформу. Но это не значит, что новый код должен работать лучше или хуже старого. Это зависит от того, насколько хорошо написан компилятор и как он оптимизирует код.
Строго говоря, ни в одном высокоуровневом языке программирования не существует однозначного соответствия между кодом программы и машинным (т.е. исполняемым) кодом. Разные компиляторы могут переводить один и тот же «текст» программы в разный двоичный код, в зависимости от используемых алгоритмов и оптимизаций.
Преимущество нового языка (не компилятора) перед старым может быть в том, что он короче, более понятен, меньше устаревших и/или больше полезных инструкций, лучше подходит для определённой задачи или области, использует новые возможности аппаратных средств или парадигм программирования. Но это не значит, что новый язык всегда лучше старого. Каждый язык имеет свои сильные и слабые стороны, свои преимущества и недостатки. Важно выбирать язык в соответствии с целями и требованиями проекта.
При этом важно продолжать разрабатывать новые языки программирования, потому что это способствует инновациям в области разработки программного обеспечения. Новые языки могут предлагать новые возможности, решать новые задачи, улучшать производительность, надёжность или удобство кодирования. Новые языки также могут влиять на существующие языки, вдохновляя их на внедрение новых функций, конструкций или парадигм.
Например, язык TypeScript, созданный в 2012 году, добавил строгую типизацию к языку JavaScript, что повысило его надёжность и масштабируемость. TypeScript стал очень популярным среди разработчиков веб-приложений и веб-сайтов. В 2020 году язык JavaScript получил поддержку опциональной цепочки (optional chaining), которая позволяет безопасно обращаться к свойствам объектов, которые могут быть неопределёнными или равными null. Эта функция была заимствована из TypeScript.
Другой пример — язык Kotlin, созданный в 2011 году как альтернатива Java для разработки на платформе Android. Kotlin предлагает более краткий и выразительный синтаксис, поддержку функционального программирования, безопасность от нулевых указателей и многие другие преимущества перед Java. В 2017 году Google объявил о том, что Kotlin становится официальным языком для разработки на Android. В 2019 году Java получила поддержку текстовых блоков (text blocks), которые позволяют легко записывать многострочные строки без экранирования специальных символов. Эта функция была заимствована из Kotlin.
Создавать новые языки нужно, даже если они не всегда успешны. Потому что изучение новых языков помогает развивать целое направление отрасли — дизайн/проектирование языков, а также способствует расширению кругозора, пониманию различных подходов к программированию и обнаружению нестандартных решений. Кроме того, нельзя заранее знать, какой язык станет успешным или неуспешным. Иногда языки, которые кажутся непопулярными или устаревшими, могут вновь стать востребованными из-за каких-то изменений на рынке или в технологиях. Например, язык Fortran, созданный в 1957 году, до сих пор используется для научных и инженерных расчётов и имеет сравнительно высокую производительность.