Ремесленные языки против отраслевых языков
Обсуждение
Если бы вы могли классифицировать языки так же, как вы классифицируете физические орудия труда, какие языки вы бы отнесли к набору инструментов, используемых ремесленником, а какие — к промышленным машинам, управляемым бригадой специализированных рабочих?
Какие соображения вы бы приняли во внимание при классификации критериев? Я могу представить гибкость против регулярности, вывод LOC, читабельность против выразительности...
u/WittyStick аватар
WittyStick
Главное отличие — библиотеки и инструменты. Отраслевые языки поставляются с батареями в комплекте и обычно имеют IDE, отладчик, инструменты рефакторинга, линтеры, профилировщики, лексеры для многих редакторов или LSP и т. д. Они появляются сами по себе, если ваш язык достаточно популярен, потому что люди будут их создавать.
Помимо этого, основным фактором принятия является узнаваемость, а не новизна. Чем дальше вы отходите от C-подобности, тем меньше пользователей вы увидите. Я бы предположил, что вы можете иметь до 20% новизны, сохраняя более 80% узнаваемости, чтобы добиться принятия, но любой большей новизне потребуются десятилетия, чтобы получить хоть какую-то долю внимания.
Компании обычно не прикасаются к языку, пока он не продемонстрирует преимущества: стабильность, производительность, простота изучения, совместимость с существующими языками, которые они используют, и т. д., но это в основном конкурс популярности, и компании будут выбирать только победителей. Любители могут выбрать любой язык, поскольку они не находятся под теми же финансовыми или временными ограничениями.
Единственный способ быстро принять язык — быть компанией-миллиардером и привязать свой бренд к языку. Например: Java, C#, Typescript, Go, Dart, Swift, Kotlin, Rust (*ранее Mozilla). Любой другой язык, который был принят, добился этого упорным трудом в течение длительного времени.
Я на самом деле удивлен популярностью Python и Haskell, поскольку они не очень похожи на C...
Я очень продуктивно работаю с веткой Pascal, но мне больше не предлагают работу с ней...
Согласен, инструменты вокруг языка облегчают работу, но, как вы говорите, это в основном из-за его первоначальной популярности. Mojo от modular — это надмножество python, и, похоже, он набирает популярность
Метафора неверна, поскольку программирование — это не производственная работа, а проектирование.
Промышленные инструменты и машины предназначены для эффективного выполнения четко определенной задачи. Используете ли вы отвертку, электроинструмент, специально созданную промышленную машину или промышленного робота, задача полностью конкретизирована и четко определена до начала работы.
С программированием все по-другому: к тому времени, как задача полностью определена и поставлена, работа уже выполнена, а до тех пор остается много неизвестных.
Итак, если вам нужно сравнить программирование с производственной работой, сделайте метафору точной: посмотрите, чем отличается дизайн продукта у ремесленников и промышленных производственных компаний. Что используют мелкие ремесленники для проектирования своих продуктов? Что используют крупные компании массового производства? Затем вы можете пойти и определить типичные свойства соответствующих рабочих процессов и инструментов проектирования, которые они используют, и придумать аналогичные классификации для языков программирования.
AutoHotkey похож на хитрую работу с клейкой лентой... или на «Тысячелетний сокол», я полагаю.
Синтаксис ужасный и запутанный. Определенно не "лучшие отраслевые практики" или что-то в этом роде.
Но с его помощью можно кое-как сшить какую-нибудь хрень, и он довольно надежен, как только вы его заведете (хотя, когда вы к нему вернетесь, его будет трудно расшифровать).
И на самом деле... его часто используют для вещей, для которых, вероятно, не следует.
Я собираюсь пойти дальше и не согласиться со всеми остальными. Единственная разница между промышленными языками и ремесленными языками заключается в вере автора(ов) в свой(и) инструмент(ы).
Когда комитет или мегакорпорация выпускают язык, они хотят верить, что это промышленный язык, поэтому они продолжают всем рассказывать, какой это промышленный язык.
WittyStick упомянул такие инструменты, как IDE, отладчики, рефакторинг, линтеры, профилировщики и лексеры/LSP, но просто посмотрите на количество подражателей промышленным языкам с никудышными стеками инструментов.
Причина, по которой я начал разрабатывать свой собственный язык, заключалась именно в том, что промышленный язык, который я использовал, когда он полностью пришел в негодность. Заброшенная IDE. Сломанный отладчик. Сломанный профилировщик. Сломанные инструменты рефакторинга. Сломанный LSP и т. д.
u/jezek_2 аватар
Другими словами, по сути, важен только маркетинг

Будучи крупной компанией, вы можете позволить себе вкладывать в нее значительные средства, но будучи мелким игроком, вы также можете проявить творческий подход.
Один из способов продвижения вашего языка — навязать его вашим пользователям, использовать его в приложении, которое станет (в некоторой степени) популярным. Большинство людей приспособятся, поскольку ценность заключается в приложении, а не в том, какой язык оно использует.
Другой способ — как вы нацеливаете его, как уже упоминалось. Или насколько успешно вы привлекаете деньги. Создание/порождение хорошей экосистемы — это тоже отличный способ, вы не только получите реальную функциональность, но и послужит примером того, как все должно быть сделано на вашем языке.
аватар u/umlcat
Крупный спонсор, инструменты и размер сообщества...
mamcx
Какие языки вы бы отнесли к набору инструментов, используемых ремесленником, а какие — к промышленной машине, которой управляет группа специализированных рабочих?
Используя другую точку зрения (чем подразумеваемая, то industrialлучше):
Тот artisan, который, вероятно craftsman, использует лучшее из лучшего (по ЕГО собственным критериям). Вероятно, что он будет использовать очень нишевые или очень необычные вещи, если это позволит достичь чего-то особенного.
An industrial machine run by a team of specialized workers— полная противоположность. Промышленные машины uglyсделаны из массовых вещей (например, болтов), даже если конечный продукт — это индивидуальный продукт. Большинство рабочих являются частью очень большой сборочной линии, которая начинается в профессиональном училище/обучении и может считаться заменяемой. Кроме того, их обучение заключается в применении И воспроизведении точных шагов.
Критически важно, что машины созданы для производства множества одинаковых вещей . Напротив, ремесленник будет в основном производить уникальные вещи, даже если для этого ему придется строить ВСЕ СНОВА в своем процессе.
Под этой линзой больше похоже на low-codeсреды, excel (то есть среда программирования) и подобные инструменты, которые подходят. Вы можете расширить идею и говорить о js, java, c# и сказать, что lisp и тому подобное являются artisanязыком, но если больше думать об этом (чтобы соответствовать этой аналогии), то насколько «работник» зависит от фреймворков/основных библиотек и просто склеивает или способен ли он «перестроить» мир для себя.
Подумайте о том, как некоторые разработчики создают полноценный игровой движок, который идеально подходит для игры, вместо того, чтобы просто использовать Unity или что-то подобное.
u/IllMathematician2296 аватар
Промышленная машина: Common Lisp, C, Java, Prolog. Инструментарий мастера: Awk, LaTeX, Excel.
Конечно, мы говорим исключительно о языках, а не о реализациях. Достаточно общий язык можно определить как готовый к использованию в промышленности, независимо от того, сколько локов на нем написано. Я бы определил доменно-специфические языки как часть набора инструментов ремесленника, поскольку они позволяют вам очень быстро выполнять некоторые конкретные операции, теряя при этом общность.