LINUX.ORG.RU

Red 0.6.3

 ,


4

6

Red — императивный функциональный язык программирования, представленный в 2011 году французским программистом Ненадом Ракоцевичем. Его синтаксис унаследован от интерпретируемого языка REBOL.

Цель создания Red — преодоление ограничений REBOL. По словам создателя, Red является «языком полного стека».

Red может использоваться как для высокоуровневого предметно-ориентированного программирования и создания графических интерфейсов, так и для низкоуровневого программирования операционных систем и драйверов.Его основные черты: простой синтаксис, гомоиконность, система макросов, статическая и JIT-компиляция, кросс-компиляция, малый размер исполняемых файлов (при отсутствии внешних зависимостей), REPL, возможность использовать как встраиваемый язык.

Данный релиз содержит порядка 800 исправлений и закрывает 86 задач. Одна из основных новостей — поддержка GUI под macOS с помощью нового бэкенда (что делает GUI полностью кросс-платформенным). Также можно отметить появление типа данных date!, расширения IO API, обновления LibRed.

>>> Подробности

★★★

Проверено: jollheef ()
Последнее исправление: sudopacman (всего исправлений: 4)
Ответ на: комментарий от nihirash

Тогда вместо этой писанины можно было бы просто ограничиться ссылкой на «Гуглю», как думаешь?
Но нет, ты написал: «Отсепупулась новая сепуляция сепулькария с сепульками для более сепуляционного сепуления». Не делай так.

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

Но нет, ты написал: «Отсепупулась новая сепуляция сепулькария с сепульками для более сепуляционного сепуления». Не делай так.

Внес правки, для повышения коэффициента читаемости

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

Это такой нескучный убийца Perl? К слову, оно удивительно быстро разворачивает готовую таки платформу с редактором и доступом в интернет, и уж тем более графическим интерфейсом без особой нужды дополнительной работе как в случае со всякими лиспами.

Но как оно будет

для низкоуровневого программирования операционных систем и драйверов

? Мне это трудно представить, например.

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

В русскоязычном ИТ сегменте про эти языки знает полтора человека, они совершенно обошли нас стороной, но идеи и подходы черезвычайно инетерсные и Red показывает на что они способны.

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

они его позиционируют как убийцу Си-шечки, но это на мой взгляд врядлли

Не видел где они его позиционируют как убийцу, скорее как диалект для эффективной компиляции в натив и связи с другим нативным кодом.

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

Теперь сразу понятно что это очередной лиспо-хаскель.

Это не лиспо-хаскель ни в каком виде. Это что-то чего ты никогда не видел ранее.

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

Это такой нескучный убийца Perl?

Это кстати забавно, потому что Red убивает то единственное что Perl дал миру - регулярки. В Red `parse` диалект намного мощнее и фичастее, по-сути PEG который можно фигачить в рантайме и регулярки лишь мелкое подмножество того что он умеет.

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

Это что-то чего ты никогда не видел ранее.

Где б ещё почитать про всё это. Особенно про то, как работает это всякое parse. Так-то язык интересный, хотя некоторые вещи смущают: отсутствие приоритета операторов (1 + 2 * 3 = 9, слева направо), полное отсутствие поддержки юникода в тех же строках (адресация только по байтам, и на руны вообще походу не разделить). По поводу последнего не уверен, но инфы везде слишком мало.

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

Где б ещё почитать про всё это

Говорю прямо что с документацией (пока) все плохо, одна из причин почему я не стал делать новость про этот (минорный) релиз. Изучение хардкорное - доки и примеры кода в REBOL + гуглеж блогпостов >5 летней давности + спрашивание в официальном чятике + пробование самому.

Так-то язык интересный, хотя некоторые вещи смущают: отсутствие приоритета операторов (1 + 2 * 3 = 9, слева направо),

Такое же поведение в смолтолке и паре других языков, сильно упрощает чтение и правила парсинга. Для этих вещей есть DSL:

>> 1 + 2 * 3 = 9
== true
>> math [ 1 + 2 * 3 = 9 ]
== false
>> math [ 1 + 2 * 3 = 7 ]
== true

Особенно про то, как работает это всякое parse

https://en.wikibooks.org/wiki/REBOL_Programming/Language_Features/Parse/Parse...

Плюс примеры того что есть в языке, попробуй `source math`

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

Вот это не понял:

>> s: "строка"
== "строка"
>> s/1
== #"с"
>> s/2
== #"т"
>> s/3
== #"р"
>> to-integer s/3
== 1088
loz ★★★★★
()
Последнее исправление: loz (всего исправлений: 2)
Ответ на: комментарий от loz

Спасибо за ответы.

Про то, что с юникодом всё в порядке, радует. Просто в документации какой-то вычитал про индексацию, и там промелькнуло слово byte. Видимо описка (типа для частного случая, и не подумал тот кто писал), или я не так понял.

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

С юникодом все впорядке вплоть до самих идентификаторов языка:

>> плюс: :+
== make op! [[
    "Returns the sum of the two values" 
    value1 [number! char! pair! tuple! ...
>> умножить: :*
== make op! [[
    "Returns the product of two values" 
    value1 [number! char! pair! tuple! ...
>> на: func [x] [x]
== func [x][x]
>> 3 плюс 2 умножить на 5
== 25

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

Вообще очень интересный язык, но очень мало инфы. Я так понимаю, там надо больше половины читать про REBOL, и уже остальное дочитывать про Red? Потому что именно про Red инфы/документации практически совсем нет.

А как обстоят дела с библиотеками сейчас? Меня конкретно интересует что-то для работы с текстом: аналоги питоновских .format(), .split(), .strip(), .upper(), lower(), .replace(), .endswith() и подобного. Есть какая-то стандартная/сторонняя библиотека, реализующая вот это всё? И есть ли какое-то более-менее централизованное место, где хранятся библиотеки/наборы функций от сообщества?

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

Я так понимаю, там надо больше половины читать про REBOL, и уже остальное дочитывать про Red?

Все так.

Меня конкретно интересует что-то для работы с текстом: аналоги питоновских .format(), .split(), .strip(), .upper(), lower(), .replace(), .endswith() и подобного

Это все в стандартной либе, функции строк и последовательностей

endsWith там вроде нет, но оно делается элементарно:

>> ends-with: func [s1 s2] [s2 = find/last s1 s2]
== func [s1 s2][s2 = find/last s1 s2]
>> ends-with "string" "ing"
== true
>> ends-with "strin" "ing"
== false
>> ends-with "ing strin" "ing"
== false
>> ends-with "ing string" "ing"
== true

Форматировать сейчас можно через rejoin, полнофункциональный format-dsl aka common lisp еще пилят:

>> a: b: 5
== 5
>> print rejoin [ "a:" space a newline "b:" space b ]
a: 5
b: 5

И есть ли какое-то более-менее централизованное место, где хранятся библиотеки/наборы функций от сообщества?

У ребола: http://www.rebol.org/script-index.r у реда: https://github.com/red/code

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

Вот так:

The current Parse runs as an interpreter, which is fast enough for most use-cases you will have. For cases where maximum performance is required, work has started on a Parse static compiler to soon provide the fastest possible speed to Parse-intensive Red apps. The generated code is pure Red/System code and should be about a magnitude faster on average than the interpreted version. When Red will be self-hosted, a Parse JIT compiler will be provided to deal with the cases that the static compiler cannot process.

loz ★★★★★
()
Ответ на: комментарий от shell-script

Например выполнять код в процессе парсинга:

>> rule: ['a ['b (print "found b") | 'c (print "found c")]]
== ['a ['b (print "found b") | 'c (print "found c")]]
>> parse [a b] rule
found b
== true
>> parse [a c] rule
found c
== true

Выполняющийся код так же может на ходу менять правила, например разрешить `c` если встретился `x`:

>> rule: [ any [ rule1 | 'x (append rule1 [| 'c])]]
== [any [rule1 | 'x (append rule1 [| 'c])]]
>> rule1: ['a | 'b]
== ['a | 'b]
>> parse [a a b b a b a] rule
== true
>> parse [a a b b a b a c c] rule
== false
>> parse [a a b b a b x a c c] rule
== true

Я не особо разбираюсь в классах грамматик, но суть в том что в отличие от регулярок можно парсить более широкий спектр грамматик, например html, json:

The PARSE dialect is an enhanced member of the family of Top-down parsing languages (TDPL family) including the Top-down parsing language (TDPL), the Generalized top-down parsing language (GTDPL) and the Parsing expression grammar (PEG) and uses the same «ordered choice» parsing method as the other members of the family.

PARSE is provably able (see below) to recognize all the grammars the members of the TDPL family can recognize (and more), although it needs to use a couple of complicated idioms to represent the four basic family operators (FAIL, NOT, AND and THEN) it does not support directly yet.

https://web.archive.org/web/20120318091458/http://www.rebol.net/wiki/Parse_Pr...

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

и насколько эта компиляция эффективна сейчас? и вообще, как там с оптимизацией кода под платформы?

NiTr0 ★★★★★
()

Давно читал про него, мечта наркомана

umren ★★★★★
()

Red — императивный и функциональный язык представленный в 2011 году французским программистом Ненадом Ракоцевичем.

Не надо.

entefeed ☆☆☆
()

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

system-root ★★★★★
()

Имя у создателя языка доставляющее

bbk123 ★★★★★
()

Red — императивный и функциональный язык представленный в 2011 году французским программистом Ненадом Ракоцевичем.

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

Red[Nenad]>> «А не замахнуться ли нам на ...» :)

quickquest ★★★★★
()

представленный в 2011 году французским программистом Ненадом Ракоцевичем

Ненадом Ракоцевичем

Ненадом

Даже имя создателя языка кагбэ намякаэ!

Indexator ★★★
()

Еще бы для него фреймворк Hat создать и начать мутить непотребство на стеке Red Hat! </irony>

Indexator ★★★
()

Ненадом Ракоцевичем

Уникальный тролль.

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

Ракоцевичем

А фамилия говорит нам о том как это было сделано...

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

«Чем дальше в лес, тем больше третий - лишний» (н)арод

Чем дальше развивается _современное_ ИТ, тем всё меньше места для «смелых экспериментов» и маргинальщины. Даже если создать идеальный язык (как мнили себе тщеславные создатели Go/Rust'ов), индустрия его не примет - слишком много всего вертится вокруг. Язык - это не просто синтаксис и либы. Это ЛЮДИ, книги, курсы, профи разного уровня, друзья этих профи, проекты (коммерческие, хобби), Инет-материалы, видео, какие-то тематические сайты, FAQ'и, примеры кода, типичные приёмы/архитектура, широта охвата (платформа, тип платформы, локализации),... да это целый мир! Пробовал кто-то из вас (помимо Исуса) создать целый мир?!

Я до сих пор восхищаюсь Ди, но увы - на работе пишу на C# и из этой колеи нет выхода. Можно что-то писать «для себя», может даже кинуть бисера на Хабр, но рост языка - это долгий и затратный процесс. Раньше всё было намного проще (что даже дилетантский Бейсик считался за язык), но сейчас времена стали жёстче, быстрее, рентабельность во главе - сейчас новому языку не пробиться, а за старым тянется хвост его «исторической ненужности» - да-да, Ребол в том числе. Так что нет, «ненадом» нам это. :)

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

Язык - это не просто синтаксис и либы. Это ЛЮДИ, книги, курсы, профи разного уровня, друзья этих профи, проекты (коммерческие, хобби), Инет-материалы, видео, какие-то тематические сайты, FAQ'и, примеры кода, типичные приёмы/архитектура, широта охвата (платформа, тип платформы, локализации),... да это целый мир!

То что стандартно сегодня когда-то тоже было маргинально и неразвито. Время потребуется, конечно, так что почему бы и нет? :)

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

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

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

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

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

Судя по тому, что его любители нашёптывают заклинания со словом «монада» - функциональный. А так - хз, не писатель и не читатель лиспа.

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

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

У реда первый вариант.

loz ★★★★★
()
Последнее исправление: loz (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.