LINUX.ORG.RU

Вышел релиз языка программирования truthon

 , ,


4

4

Представляю вашему вниманию свеженький релиз так полюбившегося всем вам ЯП — гибрид хаскеля с питоном, руби и крестами. Этот код почти никогда не писался на трезвую голову и поэтому разобраться в этом месиве могу только я.

1. Самое главное: оно поддерживает три типа комментариев и новые способы легко добавить!

# shell
// кресты
/* си */

2. Синтаксис слегка пришибленый (пришлось подпилить под нужды парсера), но какой уж есть. Вот небольшой пример стандартной программы «привет, Ад»:

main = (argv, argc) ->  # объявили лямбда-функцию и сохранили её в main
  name = "Hell"
  the_string = p "Hello, {name}"   # оператор p печатает на экран
                                   # и возвращает значение своего аргумента
  # fancy string interpolation
  num = 1
  string_with_number = "num = {num}"
  
  # shell invocation
  ret = `echo -e 'Bye!\nrm -rf ~'`
  p "script terminated with {ret}"

  # built-in repexp matching
  p "Hello" =~ /(H.*)/

  # branching
  1 if 1+1 == 2 else 3
  
  # expression-oriented!
  score = match
    name =~ "true_(.*)"  => 666
    name == "tailgunner" => 7
    _                    => -1

  # Higher-order functions: a(b(c()) is ...
  a . b . c  
  c $ b $ a  # pipe-line style

Итд итп. Самое главное что он expression-oriented и со статической типизацией**.

В ближайших планах переписать этот ЯП на нём же самом.

Ведутся активные переговоры с Леннартом Поттерингом по включению этого ЯП в состав systemd как средства написания юнитов.

Фичи и плюши: строгая типизация, expression-oriented, компилируемый*, есть примитивный вывод типов**. Некоторые операторы (в данный момент только print) полиморфны. Вскоре: замыкания, pattern matching, ADT, ООП с public/private/close, генерация llvm bitcode и многое другое. Циклов ещё нет, поэтому используйте рекурсию. На данный момент поддерживается только работа с целыми числами (произвольной длины) и строками. Поддержка других типов будет хорошим упражнением для пытливого читателя.

Отдельно хотелось бы отметить будущую программу сертификации. Программа сертификации задумана чтобы повысить квалификацию программистов. Программа бесплатная и, в общем- то, никаких реальных бонусов и привилегий не даст (мы же не проприетарщики). Так что я пока не знаю зачем кто-то захочет её проходить. Может, приплачивать надо...

PS Про nanopass читал

PPS Формочку заполнил

*Эта функция не работает

**Есть, но оочень глючит.

Лицензия BDSM-like

Changelog

>>> Исходники

★★★★★

Проверено: Pinkbyte ()
Последнее исправление: true_admin (всего исправлений: 8)

Я считаю, что этот язык нужен. Осталось заняться повышением производительности.

Deleted
()

А рационально ли сокращать print до p? Какие баги вылезут если назвать переменную «p»?

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

А рационально ли сокращать print до p?

Нет, потому что вдруг кому-то захочется завести переменную с таким типом. Но мне нравится.

Какие баги вылезут если назвать переменную «p»?

p это унарный префиксный оператор, парсер не даст создать переменную с таким именем. Оператором оно сделано потому что в данный момент операторы могут быть полиморфными, а функции нет. Я думаю, в будущем это будет просто функция print.

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

По крайней мере, это интересно.

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

Мне очень понравилась p. Особенно по сравнению с System.out.println(); 20 лишних символов. Бесят. Хоть из них и нужно печатать только sout/syso

achy
()

какой ужас:)

пошел сочинять свой язык...

vitalikp
()

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

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

что за ужасный новый дизайн на сайте? админ в детство впал? и почему именно пони, а не телепузики?

Ты только что буквально и непосредственно проиллюстрировал старую истину: в правильно поставленном вопросе содержится половина ответа. В данном случае правильная половина — первая. А именно, то, что все зависит от админа. И что он впал. Однако в понилюбство а не в детство. В чем разница? Ну... На самом деле ты прав и не прав. Он-то впал в детство, но это как раз свидетельство зрелости.

Объясняю: дети косят под взрослых, а взрослые косят под детей. Так первые отличаются от вторых.

И еще, я пока что (к своему стыду) еще не смотрел поней, поэтому большего сказать пока не могу. А иначе с удовольствием дал бы более полную диагностику ^_^

Csandriel
()

Лучше б ты написал FAQ по любимым веществам

soko1 ★★★★★
()

)))

Вот это порадовали на 1 апреля, посмеялся от души, даже с поней. Обожаю ЛОР, в этот день как всегда в своем репертуаре

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

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

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

а что, нет? взрослый косит под ребенка, а свойство ребенка — косить под взрослого.

Ошибочка. Есть объективные а есть внешние свойства ребенка. Внешнее — склонность мимикрировать под взрослого (курить взатяг, да ^_^). Оно диктуется внутренним, — чувством недостатака серьезности отношения к себе.

Когда человек устает от серьезности жизни, он все больше не упускает возможностей подурачиться. Есть объективное самоощущение (усталость от объективных атрибутов взрослой жизни) и есть внешнее ее проявление (стремление отряхнуться от нее, окунувшись в детство). То есть мы рассматриваем устойчивую систему из четырех свойств. Не из двух.

Csandriel
()
Ответ на: комментарий от amix

следует различать кошение как выдача в глазах других , и самоубеждённость - во втором случае - да начнётся пульсация между увереностью , что он взрослый и следовательно стремится являтся ребёнком , и ребёнком стремящимся стать взрослым.

в случае же косить сущьность субьекта сохраняется меняется лиш костюм , что есть однократное действие

взрослый надевший надежду личину ребёнка.

и

ребёнок одетый в костюм тройку как в регтайме(или как там фильм про детей-гангстеров и прочий ревущие двадцатые).

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

рекурсия же получается

Нет, рекурсия — это дети, которые косят под взрослых, которые косят под детей, которые косят под взрослых.

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

сколько времени ушло на разработку?

Очень много. Не смотря на обилие туториалов и (полу)готовых решений, они все или кривые, или решают уж слишком простую задачу. Код реальных ЯП плохо документирован и понять происходящее почти невозможно, даже если всё красиво написано.

Так же очень сложно отлаживать код. Поэтому разработка по возможности инкрементальная и test-driven.

С другой стороны, начиная с некоторого момента добавление новых фич почти не требует времени т.к. для их поддержки уже есть всё необходимое.

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

Совершенно нечитаемый синтаксис

Это стандартный ML-like синтаксис. Без прочтения книжки по erlang/haskell он всегда вызывает отторжение у тех кто вырос на C. Однако, он очень крут. В этом можно убедиться прочитав первые пару глав какого-нить learn you a haskell for a great good. Я уверен, после начального ознакомления тебе захочется чтобы у явы был такой же.

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

Очень много. Не смотря на обилие туториалов и (полу)готовых решений

Хотя бы примерно сколько? Дни? Недели? Месяцы? Годы?

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

Что-нибудь полезное не только для тебя

http://memesmix.net/media/created/hbgq9b.jpg Пока не встречалось ничего одновременно нужного, интересного и нормально написанного.

«everything is in elf» - ну где его применить?

Основной приоритет это сделать бесшовную интеграцию с си. Это позволит использовать тонны уже готовых библиотек. Или писать новые библиотеки на нём самом. В таком случае хэдеры, конечно, понадобятся. Но от идеи хранить хэдеры в самом эльфе я бы не стал отказываться. Тем более если сделать тулзу по их извлечению оттуда.

Но я проект пока серьёзно не рассматриваю. Для меня это просто хобби и способ размять мозги после работы. А бывало и вместо работы :).

Кто и где?

Увы, не нашёл. В одном из видео аля https://www.youtube.com/user/PyConDK/videos чувак рассказывал что допиливают систему вывода типов для какого-то линтера. Но я не смог найти то видео. Помню только что чувак был русский, видео было на русском, слайды на английском, происходило это либо в Москве, либо в Минске, либо в Киеве. Короче, не знаю :( Если найду — скину.

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

Хотя бы примерно сколько?

Думаю, месяца полтора-два full-time работы за полтора года набежало. За это время код раз семь переписывал с нуля. Ещё были попытки написать его на хаскеле и livescript.

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

«everything is in elf» - ну где его применить?

Основной приоритет это сделать бесшовную интеграцию с си

Кхм. Мой пойнт в том, что нативно-компилируемый язык общего назначения - это кусок работы, который в одно рыло не осилить даже с LLVM; и даже когда ты его закончишь (предположим такой невероятный исход), у тебя будет сырая реализация плохо спроектированного (извини, но так и будет) ни с чем несовместимого языка и Си-библиотеки, которые не подходят ни для чего «немедленно полезного» вроде веба или скриптов повседневной автоматизации. Жаль, что тебя не интересует работа на какой-нибудь платформе (JVM, .NET, Python).

Для меня это просто хобби и способ размять мозги после работы. А бывало и вместо работы :).

Ну, как способ освоить LLVM - конечно, неплохо. Но почему-то мне кажется, что просто на хобби полтора года не тратят.

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

у тебя будет сырая реализация плохо спроектированного (извини, но так и будет) ни с чем несовместимого языка

Собственно, это вторая по значимости проблема. Проблема номер один это необходимость как-то обосновать появление ещё одного ЯП.

работа на какой-нибудь платформе (JVM, .NET, Python).

Питонистам это точно не нужно. Я за последние два года со многими поговорил и вживую и по лору, всех устраивает python2 и они не видят необходимости даже в py3, не то что в другом ЯП. Хотя, в сторону pypy я иногда посматриваю.

На счёт остального я пока не определился. Мне кажется, даже если прилепить JVM этим всё равно никто не будет пользоваться. Но с сишечкой мне бы очень хотелось интегрировать потому что часто приходится заниматься системными вещами.

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

Хм, внезапно обнаружил что кто-то зафоловил. Я очень рад, не думал что так будет. Всем кто залайкал я чуть позже вышлю ссылку на настоящий репозиторий.

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

Не важно, насколько он считается крутым и какие у него преимущества. Они все нивелируются перед одним гигантским недостатком — когда ты в конце трудового дня будешь править километры такого текста, тебе придется хорошенько поднапрячь глаза и внимательность, чтобы разобраться в написанном коде. Я конечно понимаю, что с опытом этот код начинает ощущаться «на ощупь», но ты понял. Алсо, утром спросонья я не особо всматривался и понял этот код иначе (только что снова глянул), что подтверждает мою догадку о сложночитаемости. Напоминает ситуацию с []{}, которые в js в могут использоваться в одном месте для разных целей.

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

тебе придется хорошенько поднапрячь глаза и внимательность, чтобы разобраться в написанном коде.

Забавно, я про джаву думаю точно так же.

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

утром спросонья я не особо всматривался и понял этот код иначе (только что снова глянул), что подтверждает мою догадку о сложночитаемости

Это подтверждает только догадку о том, что ты кроме жабы ничего читать не умеешь.

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

Я думаю, всё дело в подсветке синтаксиса. Немного подправил пост чтобы хотя бы строковые и числовые значения подсветило.

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