Как C и Perl захватили планету

Почему C и Perl стали стандартами в своих областях и до сих пор на коне?

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

Весь секрет — в нечестных преимуществах.

Компиляторы C были под все платформы и бесплатно. А какой-нибудь Pas­cal был разный и платный.

Perl изначально создавался для работы с текстом, парсинга, преобразования и т.п. А протокол HTTP целиком текстовый. Вот и писались ранние скрипты на Perl-е.

Потом появился PHP, где были те же регулярки, но c привычными классами и он был тупо проще в освоении. И о Perl для веба стало неудобно говорить. Такое же логичное развитие Perl, как C++ — для C. И как Java — для C++.

А потом появился Python, паттерн MVC дал Ruby on Rails и всё стало как сейчас. Наконец, желание писать даже на сервере знакомым синтаксисом породило Node­JS.

Провал всех без исключения “функциональных решений” немножечко предсказуем — потому что нет области, где они были бы нужны и на голову превзошли конкурентов. Go выстрелил, потому что добавил в чистый C всё, чего там не хватало. Scala — потому что это лаконичная Java. Swift — потому что Mac.

 

Script: Скриптовая эволюция

Дано — написать скрипт, который кидает определённые файлы из локальной папки в папку на подключенном сетевом диске. Например, веб-проект, в котором мы изменили 2–3 dll. OS Win­dows.

На каком языке писать скрипт?

ActivePerl под Win­dows — иногда не принимает переданных параметров
Cyg­win — нету
Pow­er­Shell — просто так даже Hel­lo World не запустишь. Система будет ругаться, что он… не подписан (маразм? маразм!)

Похоже, технологии ушли слишком далеко. Нам остаётся только старый формат CMD файлов.

copydll.cmd:

@echo off
set FROM=d:proj1bin
set TO=W:stableproj1bin
FOR %%A IN (%*) DO IF EXIST "%FROM%%%A.dll" COPY /Y "%FROM%%%A.dll" "%TO%%%A.dll"

Добавляем папку в Path и вызываем

copydll Proj.Module1 Proj.Module2

А этот cmd можно кинуть на панель в Total Com­man­der и просто перетаскивать туда нужный файл:

@echo off
set TO=W:stableproj1bin
FOR %%A IN (%*) DO IF EXIST %%A COPY /Y %%A "%TO%%%~nxA"

Конечно, можно просто перетащить на панель Total Commander’а саму папку, но тогда придётся дважды щёлкать мышкой (ОК в диалоге копирования и потом Replace All)

Да, ещё. Если написать в CMD-шке PAUSE, она в этом месте попросит Press any key to con­tin­ue.…