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
{This is
 a multiline
 string.
}

Block of code delimiters: square brackets

if a > 0 [print "TRUE"]

either a > 0 [print "TRUE"][print "FALSE"]

while [a > 0][print "loop" a: a - 1]

да пошли они знаешь куда

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

На россии это самая главная тема для разговоров. И даже очевидно почему.

dzidzitop ★★
()

Написано компилить так:

$ red -c hello.red
А оно не компилит:
*** Error: cannot access argument file:
-c
--== Red 0.6.3 ==-- 
Type HELP for starting information. 

>>

Без ключа успешно интерпретирует:

$ red hello.red
Hello World!

Как скомпилить-то? Пусть и под 32 бита.

d ★★★★
()

что делает GUI полностью кросс-платформенным

Не делает, про онтопик забыли

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

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

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

У меня компилит, на линуксе именно эту версию еще не пробовал, но все предыдущие работали:

d:\downloads>red-063.exe -c file.red

-=== Red Compiler 0.6.3 ===-

Compiling d:\downloads\file.red ...
Compiling libRedRT...
...compilation time : 1628 ms

Compiling to native code...
...compilation time : 45286 ms
...linking time     : 508 ms
...output file size : 933888 bytes
...output file      : d:\downloads\libRedRT.dll

...compilation time : 33 ms

Target: MSDOS

Compiling to native code...
...compilation time : 1279 ms
...linking time     : 77 ms
...output file size : 67072 bytes
...output file      : d:\downloads\file.exe


d:\downloads>file.exe
hello world
loz ★★★★★
()

французским программистом

Пожалуйста, напишите новость про язык, созданный русским программистом. Например про язык «Валентина».

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

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

Функционально программирование это не обязательно рекурсия. Рекурсия это детали низкого уровня. Например ты можешь писать функциональный код типа `filter (\x -> x > 100) map (\x -> x * x) list` для удобства или по каким-то другим причинам, но `map` и `filter` могут быть вполне реализованы эффективными заоптимизированными под платформу циклами.

Отсутствие сайд эффектов делает возможным определенный уровень анализа кода, проверки/вывода типов, ленивости и прочего, но это не значит что императивности в языке нет или ей нет места.

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

Ну типа того, да.

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

Но старушки кушают, да нахваливают. Ибо модно и сложно и «выразительно».

100 процентов, что этот стиль как альтернатива императивному в академической среде зародился.

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

Да. Это такой каминг аут у таких россиян. Но ссыкотно признаться открыто.

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

Если подумать - интересный факт, console это просто программа написанная на Red и скармливающая ввод в вычислитель доступный в рантайме языка.

loz ★★★★★
()
Compiling to native code...
...compilation time : 441239 ms
...linking time     : 5989 ms
...output file size : 602360 bytes

Ого. А на вид - обычный hello world.

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

Я тут играю с --no-runtime, хочу объектник получить, чтобы потом слинковать в загрузчик. Не подскажешь, в чём проблема? Не могу понять, где и зачем он хочет видеть cdecl или stdcall. Ну или подскажи, где спросить.

$ cat hello.red 
Red/System []

a: 1
if a < 2 [a: 2]

$ ./red-063 -c --no-runtime hello.red 

-=== Red Compiler 0.6.3 ===- 

Compiling /tmp/hello.red ...

Target: Linux 

Compiling to native code...
*** Red/System Compiler Internal Error: Script Error : Cannot use path on none! value 
*** Where: emit-epilog 
*** Near:  [if any [
fspec/5 = 'callback 
all [
attribs: compiler/get-attributes fspec/4 
any [find attribs 'cdecl find attribs 'stdcall]
]
] [
offset: locals-size + locals-offset 
emit #{8DA5} 
emit to-bin32 negate offset + 12 
emit #{5F} 
emit #{5E} 
emit #{5B}
] 
emit
]
d ★★★★
()
Ответ на: комментарий от system-root

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

если ты только сейчас узнал об этом термине, то маргинал — это ты :)

Virtuos86 ★★★★★
()

Гомоиконность, убийца сишечки, полный стек... Тьфу!

Конечно же нужен язык с гомоикнностью. Нужно сделать на самом языке систему символьных вычислений (ССВ) над его же кодом/AST и используя эту ССВ иметь возможность например выводить определенные свойства реализации (для проведения формальной верификации, доказательства корректности, как например с использованием Frama-C с применением SMT-решателей, Coq, HOL и всякого такого), использовать эту ССВ для целей вроде суперкомпиляции/супероптимизации. Или чтобы циклы например анроллить, типа вот мы задаем каким-то там макаром, что вот тут у нас цикл, и говорим нашей ССВ что вот наанроль его вот таким образом, и потом будет там наанроленный цикл. Или реализовывать свои domain-specific оптимизации для каких-нибудь бигинтов. Или эту же ССВ можно попросить, чтобы например она трансформировала код некой функции таким образом, чтобы она вместо int принимала long long int, чтобы это было еще в IDE интегрировано нормально, и чтобы такую кодогенерацию при желании даже в рантайме можно было бы делать, если с собой в рантайм тащить еще JIT с VM (т.е. тащить какую-то жирную хрень типа JVM) и AST, удобный для трансформации. Можно сделать что-то вроде тех же Java оптимизаций в рантайме, рантайм-профилирование и трансформация кода в процессе. Или даже profile-guided optimisation (PGO) потом сделать на основе собранной статистики, т.е. вот типа набрали мы статистики при выполнении кода в VM и потом использовали ее чтобы полностью четко скомпилировать в бинарник, чтоб без VM все выполнялось. Чтобы можно было бы вводить свои правила приведения типов, и на основе этого ССВ могла бы выводить тип. Или чтоб можно было сделать язык с нестрогой типизацией поверх существующего AST и чтоб в рантайме при каких-нибудь тестовых прогонах производился мониторинг того, что с какими типами вызывается (т.е. к каким фактически типам там приводится все в динамике) и потом чтобы на основе этого можно было бы расставить эти самые типы в реальном коде. Т.е. если у нас будет функция без указания типа, и эта функция в одном месте вызывается допустим с типом int, а в другом с типом float, то можно сделать две специализированные под этот тип реализации, которые бы вызывались конкретно в тех местах, где собственно и происходит вызов той функции с таким-то там типом.

Насколько я понял, ничего подобного в этом Red, REBOL нет, так что ненужно

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

Аналогично. Только РЕФАЛ, как по мне, лучше читается и лучше просматривается структура

anonymous
()

представленный НЕНАДОМ РАКоцевичем. Класс

Deleted
()

Комрад, писал на нем веботу? Есть фреймворк типа expressjs? Есть ODM/ORM для MongoDB и PGSQL?

silver-bullet-bfg ★★
()

это как школьник-кун, который представил бугуртос, 100%

Deleted
()

Гомоиконный? Радость для лишперов. Но у них всё равно не получится угнать машину времени.

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

но увы - на работе пишу на C# и из этой колеи нет выхода

1995: увы - на работе пишу на C++ и из этой колеи нет выхода

2005: увы - на работе пишу на Java и из этой колеи нет выхода

2017: увы - на работе пишу на C# и из этой колеи нет выхода

2025: увы - на работе пишу на ???

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

1966: увы - на работе пишу на LISP и из этой колеи нет выхода.

1995, 2005, 2017

2225: увы - живу в капсуле матрицы и из этой колеи нет выхода.

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

2025: на работе пишу на C, то что нужно

Очередной браузерный эмулятор тамогочей.

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

1966: увы - на работе пишу на LISP и из этой колеи нет выхода.

100500: увы - лисп пишет меня

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

Эту пасту надо было писать раньше, сейчас уже не актуально. Го уже отлично себя чувствует в ИТ сообществе, вакансий хватает. Да и раст подтягивается. Востребованность последнего значительно ниже, но на hh можно найти вакансии, например. Недавно вот оракл выложил на нем немного кода. Если у тебя на работе все пишут на C#(хороший язык, кстати), это не значит, что так везде.

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

на работе пишу на C# и из этой колеи нет выхода.

на самом деле плохо понимаю, что же у вас там за условия такие, что просто не вариант продавить еще что-нибудь, окромя сисярпа?

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

И жирной точки никто не ставит в вопросе, чтобы написать какой-нибудь небольшой сервис на чем-нибудь еще, если это будет оправдано.

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

малый размер исполняемых файлов(при отсутствии внешних зависимостей)

казалось бы, вещи несовместимые ...

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

казалось бы, вещи несовместимые

Почему? Выкидывание неиспользуемого кода очень эффективно.

Here are some FreeBSD sizes:

: unix; size /bin/cat /bin/ed /usr/bin/awk /usr/X11/bin/sam
   text    data     bss     dec     hex filename
  54188    4324    9760   68272   10ab0 /bin/cat
 122835    8772   81920  213527   34217 /bin/ed
 135761    4772   15756  156289   26281 /usr/bin/awk
  52525    1412   53448  107385   1a379 /usr/X11/bin/sam

Of those, awk and sam use shared libraries.  The corresponding Plan 9
sizes are:

; cd /bin; size cat ed awk sam
15996t + 2208d + 944b = 19148   cat
45964t + 4212d + 41232b = 91408 ed
114731t + 35660d + 12040b = 162431  awk
86574t + 7800d + 66240b = 160614    sam

and the Plan 9 programs cope with Unicode and UTF.
monk ★★★★★
()
Ответ на: комментарий от SZT

Нужно сделать на самом языке систему символьных вычислений (ССВ) над его же кодом/AST

Что конкретно ты под этим подразумеваешь?

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

Что конкретно ты под этим подразумеваешь?

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

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

А вам только гомоиконность и важна для драм на форуме. Иначе хто просто серый язык.

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

64 планируется после 1.0

А 1.0 планируется после 2050?

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

Он хочет коммон лисп, но без скобочек

Ред по-сути лисп без скобочек. Он даже больше лисп чем сам лисп.

loz ★★★★★
()

А он умеет конпилироваться в жаваскрипт?

Извините, весь тред не читал, может уже спрашивали.

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

он еще не настолько совершенен. но ядро линукса наверное написать на нем можно, даже скорее получится не такое говно

anonymous
()

Как view ипользовать на онтопике? Язык показался крайне интересным, на первый взгляд, обалденный язык для gui, ещё и JIT есть чтобы не компилировать постоянно. Там вроде есть поддержка GTK?

Уже молчу про x64.

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

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

Как он в сравнении с Erlang? (На последнем даже обработку больших сетевых потоковых данных пишут и нахваливают, если что.)

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

А доступ к массиву по индексу через <> нужно сделать.

Там лучше. Там через /

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