LINUX.ORG.RU

Язык для скриптов из одного файла

 ,


0

3

Всегда есть shell, python, perl. Но вот я решил повысить планку и добавить еще несколько нетипичных требований помимо стандартных, может что-то и найдется

Поехали

  • Как у всех языков для скриптов - поддержка shebang
  • Статическая типизация
  • Быстрая сборка
  • Высокая производительность
  • Автоматическое закачивание зависимостей если они отсутствуют со своего сервиса пакетов на основе текста того же единственного файла с shebang
★★★★★

Ответ на: комментарий от RazrFalcon

Не знаю насчет одноразовости, я некоторые буду каждую секунду долбить в цикле

vertexua ★★★★★
() автор топика
Ответ на: комментарий от bread

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

Crystal гляну, но уже чойта влом яп учить

vertexua ★★★★★
() автор топика
Последнее исправление: vertexua (всего исправлений: 1)

Автоматическое закачивание зависимостей

Да-да, чтобы из npm сразу малварь качал.

slovazap ★★★★★
()
Ответ на: комментарий от vertexua

Это не натив и проверка типов отдельной командой. Если заскриптовать проверку перед запуском, будет тормозить

А надо ли перед каждым запуском? А в процессе написания можно и отдельной командой, вместе с линтером и автоформаттером. Ну или IDE подсветит, если умеет.

NeXTSTEP ★★
()

Но вот я решил повысить планку и добавить еще несколько нетипичных требований

Зачем?

seiken ★★★★★
()
Ответ на: комментарий от vertexua

хуже Groovy ад ничего не выплевывал на Землю

Та же жаба, вид сбоку и с перламутровыми пуговицами. Если ты хотел сказать, что жаба как язык ужасна — то да, я с тобой согласен %)

Nervous ★★★★★
()
Ответ на: комментарий от Nervous

Намного хуже жабы. Это когда на жабе все что ты видишь делается через reflection.

vertexua ★★★★★
() автор топика
Ответ на: комментарий от anonymous
#! /usr/bin/env nix-shell
#! nix-shell -i python -p python pythonPackages.prettytable

import prettytable

# Print a simple table.
t = prettytable.PrettyTable(["N", "N^2"])
for n in range(1, 10): t.add_row([n, n * n])
print t

Да, интересная фишка. Сначала подумал, что ключик -p относится к python, но нет. Это ему так любой интерпретатор можно скормить?

Crocodoom ★★★★★
()
Ответ на: комментарий от anonymous

чел(ТС) уверен(Я) не считает tcc - подходящим инструментом (а уж все анонимы могут понять почему ТС оно не подходит)

anonymous
()

Groovy, ruby

anonymous
()
Ответ на: комментарий от hateyoufeel

Ну или что угодно + Nix

Его можно сделать не тормозить?

$ cat test.py 
#! /usr/bin/env nix-shell
#! nix-shell -i python -p python3

print("hello")
$ time python3 ./test.py 
hello
python3 ./test.py  0.02s user 0.01s system 95% cpu 0.029 total
$ time ./test.py        
hello
./test.py  0.60s user 0.46s system 100% cpu 1.053 total
NeXTSTEP ★★
()
Ответ на: комментарий от hateyoufeel

Тратить целую секунду «только на запуск» явно не подходит 1 2. А если зависимостей много, то он и десять секунд тупить может.

NeXTSTEP ★★
()
Ответ на: комментарий от hateyoufeel

Это что-то из школьной программы?

anonymous
()
Ответ на: комментарий от vertexua

Они так и не сделали нормальный GC значит. Хипсторы, что возьмешь.

bread
()
Ответ на: комментарий от hateyoufeel

Оно только на запуске тормозит

Но это же скрипт ёпта. Я тут вынужден колупаться с перлом, потому что питон слишком медленно расчехляется, а вы секундами меряетесь. Вот ТС тоже придумал тянуть и компилировать заврсимости, чтобы первый запуск пару минут занял. Или нужно заранее «прогревать» все скрипты такие тогда. Вообще, что это за скрипты с типолюбством? Изврат.

bread
()
Ответ на: комментарий от Deleted

Да хватит уже, скор по другому считают.

anonymous
()
Ответ на: комментарий от vertexua

Вообще не слышал. TS довольно популярен и теоретически не очень тормозной. Гном Шелл весь на js если что, так что даже под твой юзкейс подходит. Единственное что с шелбангом не ясно, но наверное можно накостылять что-то.

invy ★★★★★
()
Ответ на: комментарий от invy

Нет, я не думаю. Свое API. Там полный полет фантазии, но интересные идеи. Например, зачем нам пакетный менеджер если можно импортировать пакеты сразу по URL. И даже наше приложение тоже качать по URL, а не с диска. Ну кеширование сборок само собой. Плюс сендбоксинг, все взаимодействия с внешним миром нужно явно разрешать ключами командной стпоки, чтобы 10я по счету зависимость у тебя втихаря по диску не шарилась

vertexua ★★★★★
() автор топика

Короче идея написать однострочечник экстрагирущий билд-файлы и билд-команды из комментов сработала отлично для следующих языков: C++, Crystal, Deno/TypeScript, Elixir, Haskell, OCaml, Typed Python, Rust.

Для динамических ЯП с опциональными типами я например могу проверить типы на этапе сборки (медленно), стереть из, а на этапе запуска просто запускать оптимизированый бандл. На моей говнотачке, Deno - 9 мс, Python - 20 мс на весь Hello World. Elixir - 100 мс :(

Единственны кто меня сильно добивал - Go, потому что очень придирался к форматированию, а я манипулирую текстовиком. Например, как из него нормально вытереть shebang? Заменишь на пробел - будет ныть, что нету package в первом ряду. Уберешь - поплывут номера строчек в сообщениях об ошибке. Можно заменить на комментарий, но тогда Go будет особенным, для всех вышеперечисленых ЯП я просто делаю пустую сроку вместо shebang

C++, Crystal, Deno/TypeScript, Elixir, Haskell, OCaml, Typed Python, Rust.

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

vertexua ★★★★★
() автор топика
Последнее исправление: vertexua (всего исправлений: 5)
Ответ на: комментарий от RazrFalcon

Как у меня подгорело от доков Pony, листаешь, листаешь - одни диферамбы какой он божественный. Примеры глууубоко в закрома

vertexua ★★★★★
() автор топика
Ответ на: комментарий от bread

Языки добавлять - не мешки ворочать

vertexua ★★★★★
() автор топика
Ответ на: комментарий от vertexua

У меня подрогорело только от того, что они в доке ни разу не упоминают Rust. Мол посмотрите как в C++ это уныло, а в Pony красота. Ну так вы бы ещё с сишкой сравнивали.

RazrFalcon ★★★★★
()
Ответ на: комментарий от vertexua

А я не смог посмотреть доки, наверно там порно, добрый провайдер уберег меня.

bread
()
Ответ на: комментарий от vertexua

Да помер он уже сто лет в обед, успокойся уже

вот и выросло поколение «новых идей», с памятью аквариумной рыбки...

anonymous
()
Ответ на: комментарий от vertexua

Ты в нем для начала попробуй изобразить работу с пайпами, без которой в скриптоте никуда, а потом рассматривай. Сдается мне, с батарейками там не очень, хотя в теории никто не мешает наперегружать операторов и сделать типизированные пайплайны, но это больше for fun, чем для повседневных задач.

kawaii_neko ★★★★
()

Можешь взять Perl. Он обладает такой же склонностью к ascii-арт синтаксису, как и Rust, но при этом Перл обладает рядом достоинств по сравнению с ним:

  1. Менее религиозное и промытое комьюнити.
  2. Больше готовых, проверенных десятилетиями библиотек (на Rust’е же пока одни ПриветМиры переписывают, недописывают, забрасывают, и снова переписывают).
  3. Программируя на Perl’е ты можешь представлять, что пишешь макросы в Rust’е. Мир сразу заиграет новыми красками.
  4. Можно заln -sить perl как rustscript в каком-нибудь /usr/local/bin или /home/vertexua/.local/bin
anonymous
()
Ответ на: комментарий от anonymous

Менее религиозное и промытое комьюнити.
всерьёз топит за мёртвый язык с тоннами протухшего говнокода в батарейках

anonymous
()
Ответ на: комментарий от vertexua

Хочу всякую скриптятину вроде панелей i3wm писать однофайловыми скриптами, но на взрослых языках

Ну тогда тебе Red в помощь. Подтягивать модули удалённо можно через do %url.

rebforce
()
Ответ на: комментарий от vertexua

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

Дык опять же, Red же.

rebforce
()

Common Lisp (SBCL)

Как у всех языков для скриптов - поддержка shebang

#!/usr/bin/sbcl --script

Статическая типизация

Описывай везде типы и не игнорируй предупреждения компилятора, будет почти статическая типизация. Почти, да.

Быстрая сборка

Да.

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

Быстрее питонов, медленнее C.

Автоматическое закачивание зависимостей если они отсутствуют со своего сервиса пакетов на основе текста того же единственного файла с shebang

quicklisp.

Jini ★★
()
Ответ на: комментарий от vertexua

Так тебе D же уже советовали, но ты его как то пропустил. Все что ты запросил там есть, rdmd пошустрее будет, но без зависимостей, а dub с зависимостями, но будет за счёт этого помедленнее. Или ты D не рассматриваешь по субъективным причинам?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.