LINUX.ORG.RU

tcl vs rebol/red

 , , ,


1

5

Ваши мысли.

Вот мои: конечно, круто иметь компилятор в натив, но я так понял, что до лиспа они всё же не дотянули в этом плане. Но, допустим, тут они побеждают tcl.

С другой стороны, классно иметь множество типов, но формат даты типа 1-Jan-1990 не дают никакого шанса на локализацию. Да и вообще, после опыта лиспа сложность определения типа литерала выглядит явным путём не туда. ПРоблема здесь в том, что все форматы встроенных типов данных (насколько я понял), глобальны. Т.е. если я хочу свой DSL, я быстро могу вступить в конфликт. Даже и внутри самого языка такой конфликт есть. Например, 123.45 - это число, 123.45.6 - это tuple из 123.45.6 . А если я хочу tuple из двух чисел 123 и 45 ? Кривота получается.

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

Соответственно, ваши мнения. Может быть, кому-нибудь пришлось на red/rebol что-то делать.

★★★★★

формат даты типа 1-Jan-1990 не дают никакого шанса на локализацию

Почему? Функции печати есть разница, что читать '1-Jan-1990', '01011990' или '\x01\x01\x07\xC6'?

Т.е. если я хочу свой DSL, я быстро могу вступить в конфликт.

Делай DSL локальным. Кто мешает?

Например, 123.45 - это число, 123.45.6 - это tuple из 123.45.6 . А если я хочу tuple из двух чисел 123 и 45

Обычно дают два синтаксиса на такой случай. То есть кортеж может быть 123.45.6, а может быть, например %(123,45,6). И для двух чисел применим только второй вариант.

monk ★★★★★
()

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

Metaeblanuje
()

А если я хочу tuple из двух чисел 123 и 45 ? Кривота получается.

123.45.

очевидно же.

ЗЫЖ ни разу ребол в глаза не видел. Просто предположение. По крайней мере сделал бы точно так.

anonymous
()

в REBOL3 ещё есть подГлючаемые DLL-ки, и простая интеграция с си.

в red любопытны две фичи — минималистичный тулчейн, написанный на себе самом, и примеры с livecoding типа «livecoding Excel в 10 строчек»

то, что типов данных много (46), функций относительно немного (потому что типов много) и «операторов» совсем мало — не так уж плохо.

получается такой минималистичный интерпретатор, но писать на нём просто.

не «всё есть строка», а более лисповое «всё есть REBOL-выражения»/«блок».

ещё, внезапно, любопытен не tcl, а старый древний REXX.

есть и не такой уж древний ooRexx (интеграция в С++ и смоллтокоподобное ООП с метаклассами) и NetRexx (компилируется в Java)

есть примеры например BSF (4 NetRexx, 4 ooRexx) — прозрачно отображаются Java Beans, COM автоматизация в/из объекты ooRexx.

«классический» не объектный REXX тоже на что-то типа Visual Basic может сгодится. язык очень простой, похож на бейсик и PL/I / PL/M / фортран, есть goto (signal) и исключения, команды TRACE и PARSE (паттерн матчинг).

есть подгрузка функций из DLL : RxFuncAdd "rexxFunction","DLLname","Cfunction"

if RxFuncQuery("SockLoadFuncs") then
do
  rc = RxFuncAdd("SockLoadFuncs", "RxSock", "SockLoadFuncs")
  rc = SockLoadFuncs()
end
anonymous
()
Ответ на: комментарий от anonymous

ещё есть мегафича команда «ADDRESS». и PARSE PULL var \ QUEUE («CMD») \ 'CMD'

«всё есть строка» можно напрямую сказать команду на метаязыке в нужный ADDRESS.

если пишешь код на REXX, а потом 'BLABLABLA 123 456' , то это попадает в шелл — запускается программа BLABLABLA с аргументами 123 456.

попадает по адресу, но адресов может быть несколько.

по умолчанию есть ADDRESS COMMAND / ADDRESS SYSTEM (метаязык — типа shell), но в встроенном в текстовый редактор REXX можно командовать редактором, например.

пример: текстовые редакторы со встроенным REXX:

* X2 (под винду смотри XWing гуёвый, остальные консольные)

** макросы к нему: xmacros

* THE

** макросы к нему

** например, xoon.zip — Usenet NNTP клиент на REXX макросах

это — такой минималистичный «типа недоемакс» от IBM (семейство редакторов ISPF/E/ Personal E/EPM )

сам по себе REXX портирован под все платформы, легко встраивается в приложения.

простой минималистичный интерпретатор с фичами:

* «всё есть строка»

* десятичной арифметикой с любой точностью

* есть хештаблицы (stem) вида stem.key1.key2.key3 = value

* паттерн матчингом (команда PARSE) и трассировкой

* goto, исключения, «прочитать строчку из исходника»(для эмуляции HEREDOC и прочего)

* «подгрузить функцию из си DLL»,«вызвать си функцию»

* подготовить очередь сообщений (команда QUEUE, PULL x, PULL PARSE y), сказать в другую очередь сообщений

ADDRESS SYSTEM 
'CLS'
ADDRESS EDITOR
'INPUT template('myvar1','myvar2')'
'EXTRACT /C

* примеров COM автоматизации, Java Beans автоматизации уйма. over 10500 тут (это дипломы студентов: управление MS Word, Excel, OpenOffice, JSP java beans, dbus, WSH, ActiveX, <SCRIPT LANGUAGE=«Object Rexx»> в HTML, DHTML, например)

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

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

примеры — в макросах вроде

/***************************************************************************/

AUTOPRUNE:  Procedure Expose g. group.
  If g._debug = 1
    Then Call debug 'AUTOPRUNE function,' g._group 'group'
  'EDIT' group._articles
  'ALL /----- / f'
  'TOP'
  'COUNT /----- / f'
  'EXTRACT /LASTMSG/'
  Parse Var lastmsg.1 tot_articles .
  If tot_articles <= g._autoprune
    Then Do                                       /* No need to do anything*/
      'QUIT'
      Return
    End                                                           /* End do*/

  num_to_prune = tot_articles - g._autoprune - 1
  If g._debug = 1
    Then Call debug 'Prune' num_to_prune 'articles'
  'SHADOW OFF'
  'MARK CLEAR'
  'MARK LINE'
  'DOWN' num_to_prune
  'ALL'
  'REPFIND'
  'UP 1'
  'MARK LINE'
  If g._archive = 1
    Then 'append' g._group'.Archive.articles'
  'MARK DELETE'
  'EXTRACT /CURLINE/'                                      /* Top file line*/
  If curline.1 = ''
    Then 'DELETE'
  'EA OFF'
  'FILE'
Return

здесь:

1. код логики макроса на языке REXX

2. код команд редактору семейства E: 'команда_редактора параметр1 ' параметр2 ' ещё текст команды'

3. команда редактора EXTRACT /CURLINE/ создаёт локальный в макросе stem — хештаблицу, curline.1 = содержимое текущей строки

4. команды редактора расширяемы скриптами на REXX «макросы»

5. сам REXX расширяем DLL-ками на Си

6. модель событий того же X2 расширяема DLL-ками с коллбеками.

см. также xoon.zip, xmacros.zip

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

тащем-та, вполне себе емакс. только не такой жырный и толстый, и «всё есть строка» vs. «всё есть S-выражение», и есть фолдинг (команда ALL редактора).

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

из реализаций EPM: X2 выглядит как нечто более-менее годное GUI в XWing, KEDIT хороший GUI, но платный, исходников у этих двух нет. THE с исходниками на Regina (классическом REXX), GUI нет (THE консольный).

тащем-та, взять тот же THE, REXX/DW — обёртку к Dynamic Windows (GTK/native Win/native OS/2 GUI) и ooREXX почитать про примеры встраивания в С++ — подобное, макросы писать не на классическом, а на ooREXX, добавить Docking windows, canvas — и получится нечто годное.

с «всё есть строка» прокачанным по максимуму.

далее, если сравнивать emacs mode с REXX макросами:

* вторые читаются проще

** но пердолят строки с переменными, собранными вручную

* первые лучше рефакторятся через defmacro

** модель самого редактора с faces, кнопками и картинками в emacs лучше продвинута. но в TeXmacs с guile ещё лучше :))

*** это получатеся «структурный редактор»

* далее для структурного проективного редактора нужны линзы (монады в картинках): «линзы это коалгебры к комонаде косостояния» (тут), комонады полезны для формализации коэффектов, коалгебра это структура (синтаксическая, или модель или метамодель)

** или взять тот же смоллток (опенсорснули под винду Dolphin SmallTalk), и навелосипедить на нём MVC : MVP типа такого.

хотя скорее всего это будет что-то типа MVVC, или MMVP (c моделями и метамоделями, метаметамоделями и т.п.):

* «всё есть строка». строка это моноид. моноид моноидов тоже моноид.

* структурный редактор с метаклассами, метамоделями:

композабельные

** метамодель «всё есть строка»

*** модель 1 AST

*** модель 2 CST

*** модель 3 концептуальная, логическая, физическая структуры БД

*** модель 4 предметной области

и т.п.

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

все эти модели написаны на себе самом, метациклически.

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

picolisp тоже простой интерпретатор со встроенным FFI, персистентными символами, миксинами и отношениями в ER IDEF1 N:M.

тоже любопытно выглядел бы какой-то emacs org-mode или memacs mode на picolisp вместо elisp.

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

формат даты типа 1-Jan-1990 не дают никакого шанса на локализацию

Почему? Функции печати есть разница, что читать '1-Jan-1990', '01011990' или '\x01\x01\x07\xC6'?

Это же den73, он хочет локализации исходников.

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

1. На Racket уже смотрел, пока выжидаю, что они с лицензией решат. Впрочем, он, по-моему overdesigned.

2. Спека того, что я пилил, не публикуется. Но я это уже не пилю. Буду ли ещё пилить - не знаю. Но интересно.

3. Функции печати нет разницы. Но локализация подразумевает и ввод дат по-русски. Собственно, автор Rebol даже локализацию в США не осилил, т.к. там первым должен идти месяц.

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

Да и вообще, после опыта лиспа сложность определения типа литерала выглядит явным путём не туда.

почему? лисп работает на уровне AST. типы литералов появляются на уровне CST. если теперь добавить нечто в духе грамотного программирования наподобие Emacs org-mode M-x org-babel-tangle, но попродвинутей, с бОльшим количеством встроенных типов: не просто «блок кода», «поток текста в вики-разметке», «таблица», «ящик», «ссылка», а нечто типа «блок кода» с метапеременными, параметрами; «блок данных», «блок метаданных», «блок метаметаданных» с метапеременными, параметрами.

ну ты понял: код это данные, данные это код, метакласс метакласса это метакласс, метаданные это метакод, данные и код написаны на себе самом.

вот например, CLiP-style literate programming: pdf.

там примеры про Modula-2 (кстати, ADW Modula-2 под Win32/Win64)

нечто в духе CLiP-style, только на лиспе. или на REXX :))

ПРоблема здесь в том, что все форматы встроенных типов данных (насколько я понял), глобальны. Т.е. если я хочу свой DSL, я быстро могу вступить в конфликт. Даже и внутри самого языка такой конфликт есть. Например, 123.45 - это число, 123.45.6 - это tuple из 123.45.6 . А если я хочу tuple из двух чисел 123 и 45 ? Кривота получается.

ну то есть нужно отдельные модули для типов, модули для DSL с этими типами?

тогда у разных языковых модулей разных DSL будет CST разное, AST разные, но изоморфные в смысле MVP и какой-то метамодели.

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

Ребол в глаза не видел

integer    1234
decimal    12.34
string     "REBOL world!"
time       13:47:02
date       30-June-1957
tuple      199.4.80.1
money      $12.49
pair       100x200
char       #"A"
binary     #{ab82408b}
email      info@rebol.com
issue      #707-467-8000
tag        <IMG SRC="xray.jpg">
file       %xray.jpg
url        http://www.rebol.com/
block      [milk bread butter]

Это всё примитивные типы в Rebol и литералы этих типов. Нехило, да?

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

какой-то оверкомпилькейтед треш.

например пара и тупл. ну вот чем тупл из 2 элементов отличается от пары? Да еще и синтаксис отдельный.

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

Обычно дают два синтаксиса на такой случай.

Обычно - это в лиспах. А в тикле (да и в шелле) тип определяется не только тем, что написано, но и тем, ГДЕ оно написано. И в этом есть своя мощь. Просто один пример, который мне не даёт покоя, с тех пор, как я его увидел. Так обозначаются в tk-шном тексте позиции внутри текста:

https://tkdocs.com/tutorial/text.html

3.end	The newline at the end of line 3.
1.0 + 3 chars	Three characters past the start of line 1.
2.end -1 chars	The last character before the new line in line 2.
end -1 chars	The newline that Tk always adds at the end of the text.
end -2 chars	The actual last character of the text.
end -1 lines	The start of the last actual line of text.
2.2 + 2 lines	The third character (index 2) of the fourth line of text.
2.5 linestart	The first character of line 2.
2.5 lineend	The position of the newline at the end of line 2.
2.5 wordstart	The first character of the word containing the character at index 2.5.
2.5 wordend
Тут индексы, включающие в себя пробел, нужно закавычивать. Но всё равно. Очень и очень приятно ими пользоваться. В лиспе я бы так не смог сделать. Символ и число не подошли бы, а у строки всегда были бы кавычки.

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

оверкомпилькейтед

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

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

то есть, некомпозабельное?

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

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

минималистичный тулчейн, написанный на себе самом

Вроде он на реболе написан, но к ныне рассматриваемым вопросам это ортогонально.

Rexx я посмотрю, спасибо за наводку.

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

в общем, хочу какой-то THE с REBOL3 или RED вместо REXX-а. REXX/tk вроде имеется, но unmaintainable (хотя и работает).

и гуёвый, как смоллток с модулями типа newspeak или того же Dolphin SmallTalk с примерами-компонентами.

ADDRESS REBOL
'[cmd [param1 param2]]'
ADDRESS pic
'(cmd param1 param2)'
ADDRESS tcl
'cmd $param1 $param2'
ADDRESS browser
'document.item.$(jQuery_bla_Bla_Bla)'
ADDRESS yar
'здравь будь, боярин'

и всё это в CLiP-style literate programming.

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

В той степени, в которой я тебя понял - да.

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

Вроде он на реболе написан,

пока да, на REBOL2. идут к самораскрутке со временем.

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

Я не думаю, что тебя понимаю, и инфы от тебя идёт в 10 раз больше, чем я могу воспринять :) Ты бы что ли зарегистрировался.

но изоморфные в смысле MVP

Что такое MVP?

типы литералов появляются на уровне CST.

В том и дело, что сначала идёт CST, которое у лиспа существует только в виде потока (т.е. его нет), а потом AST. У тикля не так, и в этом состояла для меня его революционность. Типы литералов в тикле определяются «когда-то в будущем». Например, индекс становится таковым только тогда, когда по нему переходят, число - когда его складывают и т.п. Именно это даёт возможность создать лаконичный синтаксис. Просто представь себе:

ls -l %*.txt
ls -l #p"*.txt"
ls -l "*.txt"
Лишние значки! Попробуй предложить любой из этих трёх вариантов на замену bash - и тебя поднимут на смех. Т.е. shell на базе лиспа невозможен, даже если автоматически дописывать внешнюю пару скобок.

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

Просто один пример, который мне не даёт покоя, с тех пор, как я его увидел.

похоже на физические размерности: 20 см = object(20).callMethod('см') = смоллтоковое object20 send: #см[/url] = Io с прототипным ООП 20 см = (parsed-number 20 :send см) и т.п.

а в чём тут проблема представить в виде (размер 20 см) и автоматически в такой AST парсить из какого-то CST?

хочется конечно, чтобы нужные «языковые» модули как типы не прописывать явно — а чтобы сами выводились :)

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

Ты бы что ли зарегистрировался.

гуглокапча зело злобная :))

Что такое MVP?

MVC паттерн в смысле Model-View-Controller или Model-View-Presenter (в том смысле, как в видео про хелловорд с MVC отсюда из видео внизу)

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

например, такой вот GUI:

* docking windows

* на 1 проект: 4 окошка:

** LitProg WEB.SRC =>

** tangle CODE.SRC

** => weave DOC.SRC

** => weave+make pdf DOC.

** => index с оглавлением

меняем «грамотный» исходник => меняются тут же, livecoding-ово :) как в Model-View-Controller CODE.SRC, DOC.SRC.

инкрементально компилируется в новый код и новую документацию.

то есть, какой-то GUI к «грамотному программированию» БЕЗ make, weave, tangle и прочей консольной магии.

также, как MVC в хелловорде.

далее если потыкать примеры из Dolphin SmallTalk — папка с проектами и иконки примеров тоже сделаны там как классы, почти как модули.

похоже на компоненты в Delphi, но более паттерново, метаклассово и метамодельно.

теперь все эти метаклассы и конкретное их API — генерировать полуавтоматически их конкретных CST конкретных «языковых модулей» отдельных DSL — и PROFIT.

ещё в том же D и ooRexx есть UFCS:

foo.bar(1,2,3) = bar(foo,1,2,3)

dog=.metaclassDog~new(1,2,3) = dog = new(.metaclassDog,1,2,3)

теперь нужно как-то выводить из dogDSL этот .metaclassDOG полуавтоматически.

чтобы в DSL шарика гав-гав "что нового?" автоматически транслировалось в шарик.гав-гав("что нового?")= выводилось, что шарик потомок Dog и метакласс шарика совпадает с наиболее общим потомком метакласса Dog, потому что DSL шарика отнаследован от DSL Dog, а значит и CST шарика как метакласс отнаследовано от наиболее общего потомка CST Dog как метакласс = .метаклассШарика~вызватьМетодКласса("гав-гав")~~сПараметрами("что нового?")

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

а скажем связей с Cat нету, поэтому мяукать не может :)

Т.е. shell на базе лиспа невозможен, даже если автоматически дописывать внешнюю пару скобок.

однако же, в scsh пайпы вполне себе существуют :))

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

пример тоже лайвкодинга и Model-View-Presenter на смоллтоке.

вот теперь представим что это он не в GUI IDE кнопками тыкает, а какой-то Literate Programming инструмент ему всю оснастку генерирует, с нужными выводящимися по ходу дела из отнаследованных DSL — метаклассами, метамоделями и предикатами типов.

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

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

Почему символ не подошёл бы? Делаешь макрос с параметром символом/строкой (если символ, получаешь symbol-string) и всё то же самое.

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

Т.е. shell на базе лиспа невозможен, даже если автоматически дописывать внешнюю пару скобок.

На базе лиспа тоже можно нормально парсить: https://docs.racket-lang.org/rash/index.html

Обрати внимание, что прекрасно работает как

ls -l | wc -l
так и
ls (if (even? (random 2)) '-l '-a)

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

Не. Во-первых, засорение пространства имён символами 1.end. Во-вторых, 1.2 - это число (равное 1.200, т.е полный тупик). В третьих, это был бы не 1.end, а всё же '1.end. Потому что если сделать макрос с параметром, то тогда нельзя сделать 1.$currentRow . Т.е. получается какая-то каша-размазня. И в общем-то, после C++ лисп поражает тем, что многие задачи решаются прямо, а не костылями. А такой индекс - это уже будет костыль. Если мы начали строить костыли, то значит, наш язык достиг предела своих возможностей.

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

а какой-то Literate Programming инструмент ему всю оснастку генерирует, с нужными выводящимися по ходу дела из отнаследованных DSL

Ну это круто, конечно, но как относится к теме? Я просто не знаю, что тут прокомментировать :) (при том, что половину даже не понимаю после 3 прочтений) Единственное, что могу сказать, что я почти пришёл к image-based подходу, но вариант с «записной книжкой», в которой код накидывается как скрипт, тоже может иметь право на существование - такой в Mathematica, да и SLIME такой. Для небольших работ это имеет смысл, дальше становится обузой. Но для небольших - имеет!

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

Касаемо примера - в общем-то F12 в браузере очень много из него взяли. Да, многое криво (в т.ч. на концептуальном уровне). Но многое, по сравнению с тем же SLIME, выглядит очень даже достойно. Чего стоит возможность кликнуть на ошибку в логе и увидеть исходник, откуда она выпала. Не только в момент ошибки, но и потом.

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

Ну я неправильно сказал, «невозможен». Неконкурентоспособен из-за множества лишних значков. Т.е. если переформатировать мозги, то тогда конкурентоспособен. Ведь кто мог предвидеть, что победит Javascript, Python и С++, когда должны были победить лисп, смоллтолк и оберон. А может быть, и Алгол-68 :)

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

Я вот не понимаю, что же тебя так тянет то маргинальщину?
Не нужен никому ни Rebol/Red, да и Common Lisp тоже (за редким исключением).
Взял бы JVM или .NET, тогда бы ещё может нашлись бы люди, кто готов это использовать.
У тебя идей то может и много, но ты бы подумал, а кто, собственно, будет это юзать?
Ну а если ты только для себя это пилишь, то вопрос не имею, ладно.

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

кто мог предвидеть, что победит Javascript, Python и С++, когда должны были победить лисп, смоллтолк и оберон.

Там нечего было предвидеть - Javascript и Python появились уже после того, как Smalltalk, Lisp и Oberon проиграли.

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

предвидеть, что победит Javascript, Python и С++, когда должны были победить лисп, смоллтолк и оберон

Потому что до этого победили C (за скорость скомпилированного кода) и Basic (за простоту программирования). И за простоту портирования (очень много платформ имели только компилятор C и интерпретатор Basic и больше ничего).

И дальше могли победить только языки, совместимые по семантике и с похожим синтаксисом на C или Basic.

Либо язык должен быть или быстрее C++ или компактней и более читабелен (без знания языка) чем Javascript или Basic.

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

Ведь кто мог предвидеть, что победит Javascript, Python и С++

Если верить TIOBE, то убедительную победу одержали Java и C.

Соответственно, ваши мнения

Делом займись вместо ерунды.

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

Во-первых, засорение пространства имён символами 1.end. Во-вторых, 1.2 - это число (равное 1.200, т.е полный тупик). В третьих, это был бы не 1.end, а всё же '1.end. Потому что если сделать макрос с параметром, то тогда нельзя сделать 1.$currentRow

Так работает.

Racket

#lang rash
(define currentRow 200)
echo 1.$currentRow ; выводит 1.200
echo 1.2 1.200 ; выводит 1.2 1.200

SBCL

(load "shelisp.lisp")
(setf currentRow 200)
!echo 1.?currentRow ; выводит 1.200
!echo 1.2 1.200 ; выводит 1.2 1.200

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

На данный момент это надо рассматривать просто как решение интересной головоломки, которая всё ещё не решена. На самом деле всё сложнее, но вряд ли кому-то сильно интересны мои тараканы :)

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

Ну это синтаксис шелла, но реализованный на лиспе. Так-то можно. Но в самом лиспе 1.2 = 1.200, т.е. напрямую синтаксис лиспа использовать нельзя. Я именно это имел в виду. Заглянул на этот shelisp. А он правда не улавливает код возврата команды? У меня чуть завтрак обратно не вылез :(

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

Можно я хотя бы 3-4 часа в неделю позанимаюсь не работой, а тем, что мне интересно как таковое? Спасибо, что разрешаешь!

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

Либо язык должен быть или быстрее C++ или компактней и более читабелен

А победила Java - медленнее, чем С++, но менее читаемая, чем Basic.

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

С Бейсиком тоже, кстати, странно получилось - он вымер. Вроде и достаточно плохой был, и популярный уже, и задачи на нём можно было решать. Почему бы дальше не жить?

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

Java - медленнее, чем С++

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

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

Меня взяли обратно в кроссовер, ковыряюсь в лиспе и Си. Что буду делать, когда обратно выгонят - не знаю. Наверное, буду работать репетитором по математике :)

С vue закончилось вот чем:

http://программирование-по-русски.рф/как-сделан-этот-сайт.яргт

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

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

Все эти фрейморки, что питон что жс выбрасывают на помойку очень быстро. Рад за вас.

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

А победила Java - медленнее, чем С++, но менее читаемая, чем Basic.

Да, Java создала свою собственную нишу. Языки с фиксированной эффективностью разработки. Туда же относятся C# и 1С. Предположительно туда же относился COBOL. Единственный плюс таких языков — удобство для корпораций: можно в середине проекта заменить почти любого программиста.

С Бейсиком тоже, кстати, странно получилось - он вымер.

По TIOBE на 5 месте. К слову, Javascript на 8.

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

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

Почти у всех языков с GC большой прогресс. Javascript, pypy, racket, ... Технологию отточили.

Но C++ теоретически невозможно догнать. Поэтому Java никогда полностью не заменить C++. Его может заменить любой язык без GC, который сейчас успешно компилируется в LLVM. От Rust до Zig. Но для этого надо, как минимум, чтобы кому-то из крупных (богатых) игроков это было надо.

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

У джавы за последние 10 лет очень большой прогресс по скорости выполнения.

По-моему, она победила до того :)

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