LINUX.ORG.RU

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

 , ,


4

3

Racket - это язык программирования общего назначения, а также первая в мире экосистема для языко-ориентированного программирования.

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

Ядро версии 7.0 является результатом переработки ядра версии 6.12 более чем на 1/8, и включает новый механизм раскрытия макросов, который осуществляет бутстрэппинг самого себя. Данный механизм покрывает более 40% кода, необходимого для замены ядра Racket на Chez Scheme. Остальные 60% кода, по бОльшей части, также реализованы, но не включены в этот выпуск; мы надеемся и предполагаем, что Racket-на-Chez будет готов для промышленного использования в следующих выпусках ветки 7.x

  • Синтаксис формы (`#'`) поддерживает новые шаблоны подформ: ~@ - для сплайсинга, и ~? - для выбора между подшаблонами, основанного на возможном «отсутствии» значения у переменных образца (например, у образца ~optional в syntax-parse). Библиотека syntax/parse/experimental/template, откуда происходят эти возможности, экспортирует новые формы под старыми именами для совместимости.
  • На Windows флаг --embed-dlls команды raco exe создаёт по-настоящему автономный исполняемый файл ".exe", который содержит в себе разделяемые библиотеки Racket.
  • Опция «Create Executable» интегрированной среды разработки DrRacket для учебных языков (Beginner Student, и т.п.) использует флаг --embed-dlls на Windows.
  • Поддержка prefab («previously fabricated») структур в Typed Racket существенно улучшена, что делает их более полиморфными, исправляя, вместе с тем, существенные ошибки текущей реализации. Программы, которые сейчас используют предикаты для prefab-структур неизвестных данных, могут нуждаться в ревизии, т.к. предыдущие версии Typed Racket позволяли программам с потенциальными ошибками осуществлять проверку типов. Смотрите Typed Racket RFC 1 и prefab-changes для более подробной информации об этом изменении, и о том, как исправить программы, которые подверглись влиянию в связи с этим изменением.
  • Typed Racket поддерживает #:rest-star в конструкторе типов ->*, что позволяет функциональным типам указывать в хвостовом списке аргументов (rest arguments) более сложные образцы типов, такие как функция hash.
  • Интерактивные оверлеи могут быть наложены на графики, созданные с помощью plot-snip. Это позволяет создавать интерактивные графики или отображать дополнительную информацию, когда указатель мыши находится над областью графика. Примеры использования данной возможности можно посмотреть тут.
  • racket/plot предоставляет процедуры для отображения графиков японских свечей (candlestick charts), которые могут быть использованы в финансовом анализе временных рядов.
  • Добавлен contract-equivalent?, который проверяет, что два контракта являются взаимосильными, без экспоненциального замедления, которое имеет место в случае двух вызовов contract-stronger?.
  • Lazy Racket поддерживает функции с именованными аргументами.

>>> Оригинал



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

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

Так в ракетке тоже надо слой писать. В качестве клея советую попробовать D. Компилируется, можно использовать как скриптов ой (rdmd), можно сборщик мусора отключить и писать как на крестах. Одна беда, *.h напрямую нельзя в код включить, приходится вручную адаптировать. Но вроде какие-то прослойки делают для этого, в крайнем случае можно сгенерить биндинг доступными утилитами.

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

Я не знаю о чём ты со мной споришь, пока я никаких разногласий у нас не заметил.

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

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

А я думал, ты умный.

Индюк тоже думал и в суп попал.

Назначение питона, если опускать банальное скриптование

Лол. По-мимо того, что я не понимаю сути существования Питона, я не понимаю что такое «скриптование», банальное или усложнённое. Мне понятно что такое программирование.

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

Лол. Зачем нативному коду какой-то там клей? Вот смотри, был 1 язык, скажем, цепепе. Ты заявляешь, что вот необходим «клей», чтобы уже был не 1 язык, а 2. Теперь у нас 2 ужаса: цепепе и Питон.

Медленный для чего?

Для всего. Какую задачу ни возьми, везде тормоза. Ну вот есть такая система сборки SCons. На Питоне написана. Адепты этой системы часто говорят так: «у нас есть вся мощь питона!!!1 мы тут склеим и тут заклеим и тут наколбасим, потому что это же питон, а не какой-то там cmake». Однако пока SCons на базе хвалёного питона только начинает запускаться, CMake уже за это время давным давно отрабатывает и программа компилится, в то время как SCons склеивает своим питоном мир. После недели работы, эта система была послана далеко и надолго, а питон получил репутацию пожизненного тормоза.

Что значит «медленный»?

То и значит. 1 сервер с программой на цепепе заменит 1000 серверов с аналогом на чистом питоне. Ну ты сейчас, конечно, начнёшь говорить про биндинги, клей, PyPy и т.д. Не прокатит. 1/1000 - таково примерное соотношение цепепе к питону.

Слабая типизация — что?

Пардон, динамическая. Что я хотел этим сказать, см. ниже.

Из всего списка остается одна многопоточность как слабое место.

Список не поменялся. Питон - тормоз, это раз. Далее, сказать, что Питон позволяет добиться взаимозаменяемости программистов нельзя. Чем больше кодовая база на Питоне, тем отвратительнее выглядит процесс его сопровождения. Рассказы про то, что Питон простой - это такие же фантазии, как и что JS простой. По факту же писать на языке с динамической типизацией так, чтобы в результате получился сопровождаемый код, а не малопонятная каша - это целое искусство, которому надо учиться много лет. В итоге получается, чтобы стать хорошим Питонистом нужно инвестировать много лет, и времени на овладение Питона уходит примерно столько же, сколько и на Цепепе или на Хаскель. Только на Цепепе или Хаскеле получаются программы, которые на 3-4 порядка быстрее, чем на Питоне. И в сопровождении они всё равно лучше.

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

Что наворотили-то?

100500 фич, которые помнить надо. И тонкую разницу между ними типа = vs :=

Последствия будут видны через некоторое время. Станет питон менее привлекательным — ваша правда. PHP прилично усложнился за то же время, и что — издох? Усложнение это вообще или взросление языка и вырастание из коротких штанишек?

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

Про объективные критерии я сразу пояснил, пока что-либо более менее комплексное оценивает человек, с любыми критериями будут разные результаты. Даже применив самую простую бритву — Бритву Оккама — разные люди получат разные результаты, ибо проблема не в бритве, а в людях.

Первый критерий слишком прост чтобы не быть объективным. Смотришь проблему, если она сужает область применения, ставишь галочку и идёшь далее, верифицируешь результат по второму критерию. Если проблема никак не решается, то это однозначно фундаментальная проблема, если же решается, оцениваешь эффективность решения. И только тут возникает неоднозначность эффективности. Применяешь бритву эффективности, которую тоже можно попытаться сформулировать, но мы этой хернй страдать больше не будем.

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

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

Тебе того, что было выше не хватило?

принципиально не нужны

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

А у меня нет никакой аргументации, кроме эффективности труда программиста

Возвращаемся к бритве эффективности и объективности критериев.

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

На башне ты тоже программируешь?

Пример типичного применения баша (например постинстол):

  • Создаёшь юзера.
  • Создаёшь директорию.
  • Назначаешь права.

Это похоже на программу? «Программа» тут звучит слишком пафосно, это просто сценарий (скрипт).

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

Так в ракетке тоже надо слой писать.

В отличие от питона, для g-object-introspection мне не потребовалось писать модуль на Си. Но в целом, в любом языке без прямого управления памяти придётся писать слой привязки сишных объектов к GC.

В качестве клея советую попробовать D. Компилируется, можно использовать как скриптов ой (rdmd), можно сборщик мусора отключить и писать как на крестах.

Так тогда уж лучше писать на плюсах.

Одна беда, *.h напрямую нельзя в код включить, приходится вручную адаптировать.

Интересно, как будет адаптирован, например, strcat? Чтобы можно было написать a = «abc»; b = strcat(a, «cde») и получить адекватный результат.

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

У нас, в общем, появился победитель. Но, наверное не нужно было его собирать с -Ofast

10^0: 0.00 
10^1: 0.00 
10^2: 0.00 
10^3: 0.00 
10^4: 0.00 
10^5: 0.00 
10^6: 0.00 
10^7: 0.05 
10^8: 0.50 
10^9: 5.02 
10^10: 7.05 
10^11: 6.10 
10^12: 0.00 
10^13: 6.61 
10^14: 1.41 
10^15: 0.00 
10^16: 9.68 
ugoday ★★★★★
()
Ответ на: комментарий от WitcherGeralt

Первый критерий слишком прост чтобы не быть объективным.
Если проблема никак не решается, то это однозначно фундаментальная проблема, если же решается, оцениваешь эффективность решения. И только тут возникает неоднозначность эффективности.

В таком случае, под первый критерий не попадёт практически никто. Все задачи в принципе решаются на асме, вопрос лишь в эффективности.

Тебе того, что было выше не хватило?

Ок, значит мы пришли к согласию, что существуют языки, компилируемые под явамашину и в джаваскрипт, которые решают некоторые проблемы эффективности работы программиста, по сравнению с чистой жабой и js.

В таком случае, больше возражений к тебе у меня нет.

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

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

А я думал, ты умный.

Индюк тоже думал и в суп попал.

Я ошибался.

Назначение питона, если опускать банальное скриптование

Лол. По-мимо того, что я не понимаю сути существования Питона, я не понимаю что такое «скриптование», банальное или усложнённое. Мне понятно что такое программирование.

Можешь просветиться в википедии про «скриптование» и в русском словаре про «банальный».

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

Лол. Зачем нативному коду какой-то там клей? Вот смотри, был 1 язык, скажем, цепепе. Ты заявляешь, что вот необходим «клей», чтобы уже был не 1 язык, а 2. Теперь у нас 2 ужаса: цепепе и Питон.

«Клей» нужен для того, чтобы легко и приятно решать задачи, не требующие максимальной производительности. Нативный код — чтобы решать задачи, нагружающие CPU, максимально эффективно и быстро. Эта модель такая, предположение, которое оказалось удачным на тот момент. Какой C++? Он язык того же класса, что и Си, как он мог быть клеем для него? На нем было легко и просто программировать?

Медленный для чего?

Для всего. Какую задачу ни возьми, везде тормоза. Ну вот есть такая система сборки SCons. На Питоне написана. Адепты этой системы часто говорят так: «у нас есть вся мощь питона!!!1 мы тут склеим и тут заклеим и тут наколбасим, потому что это же питон, а не какой-то там cmake». Однако пока SCons на базе хвалёного питона только начинает запускаться, CMake уже за это время давным давно отрабатывает и программа компилится, в то время как SCons склеивает своим питоном мир. После недели работы, эта система была послана далеко и надолго, а питон получил репутацию пожизненного тормоза.

Прохладная история. OK, SCons плохой. Дальше что? Не хватает еще ЖелезногоЖука с похожей историей про тормозного питона, который насильно заставил кого-то применить его не по назначению.

Что значит «медленный»?

То и значит. 1 сервер с программой на цепепе заменит 1000 серверов с аналогом на чистом питоне. Ну ты сейчас, конечно, начнёшь говорить про биндинги, клей, PyPy и т.д. Не прокатит. 1/1000 - таково примерное соотношение цепепе к питону.

Конечно, заменит. Даже C++ не нужен, Go справится. Если для тебя этот признак ненужности, это твоё дело. Но скорее всего эту программу на питоне написать значительно быстрее, чем на C++, и кто-то готов платить за это. Нужность, она бывает и сугубо практическая. Как только кривая обучения C++ станет как у питона, вот тогда заживем.

Слабая типизация — что?

Пардон, динамическая. Что я хотел этим сказать, см. ниже.

Из всего списка остается одна многопоточность как слабое место.

Список не поменялся. Питон - тормоз, это раз. Далее, сказать, что Питон позволяет добиться взаимозаменяемости программистов нельзя. Чем больше кодовая база на Питоне, тем отвратительнее выглядит процесс его сопровождения. Рассказы про то, что Питон простой - это такие же фантазии, как и что JS простой. По факту же писать на языке с динамической типизацией так, чтобы в результате получился сопровождаемый код, а не малопонятная каша - это целое искусство, которому надо учиться много лет. В итоге получается, чтобы стать хорошим Питонистом нужно инвестировать много лет, и времени на овладение Питона уходит примерно столько же, сколько и на Цепепе или на Хаскель. Только на Цепепе или Хаскеле получаются программы, которые на 3-4 порядка быстрее, чем на Питоне. И в сопровождении они всё равно лучше.

Если у тебя претензии к динамической типизации, надо было с этого и начинать.

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

У нас, в общем, появился победитель.
числодробильня
си

Кто бы сомневался.

Надо ещё на фортране попробовать.

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

Не прокатит. 1/1000 - таково примерное соотношение цепепе к питону.

Во-первых, не 1/1000. Даже в худшем случае (обычный питон без типов, много расчётов) где-то 1/50. Во-вторых, задачи, которые действительно загружают процессор крайне редки. Почти всегда всё упирается в скорость ввода/вывода.

И наконец, например, uvicorn на тесте fortunes даёт 78406 откликов в секунду, а ffead-cpp-postgresql всего 4515 (пруф). При том, что uvicorn написан на питоне, а ffead-cpp-postgresql на C++.

Поэтому не надо тормоза SCons'а относить на язык программирования. Если его переписать на C++ не меняя алгоритмов, сильно быстрее он не станет.

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

чтобы стать хорошим Питонистом нужно инвестировать много лет, и времени на овладение Питона уходит примерно столько же, сколько и на Цепепе или на Хаскель.

Это не правда.

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

Все задачи в принципе решаются на асме

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

предлагаю дискуссию закончить

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

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

Моя не знать. Код возврата 126.

./example_c-fast $(( 10**15 )) debug                                                 126 ↵
0.000000 = 0.000000i
./example_c-fast $(( 10**16 )) debug
0.041613 = 0.010908i
ugoday ★★★★★
()
Ответ на: комментарий от monk

Думаю, int переполняется в отрицательное значение.

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

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

Скрипт — это такая несложная quick-and-dirty программа, призванная автоматизировать что-то в рамках выполнения более сложной программы (например, операционной системы). Желательно, чтобы язык для скриптов был максимально прост и понятен. Лет 20 назад питон очень хорошо подходил для этой ниши. Потом он стал лезть в другие ниши, попутно усложняясь. В результате получилось, pardon my French, ни в пизду, ни в Красную Армию.

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

Лол. Зачем нативному коду какой-то там клей? Вот смотри, был 1 язык, скажем, цепепе. Ты заявляешь, что вот необходим «клей», чтобы уже был не 1 язык, а 2. Теперь у нас 2 ужаса: цепепе и Питон.

Это нужно не нативному коду. Код лишён свободы воли, желаний и потребностей. Это нужно вам. Лично вам и всем «настоящим» программистам. Не согласны? Сейчас проиллюстрирую.

Вот, положим прилетели марсиане и запретили всем пользоваться скриптовыми языками. Что произойдёт на следующий день? К вам, лично к вам, приходит начальник и говорит, что начиная с прямо щаз вы прекращаете заниматься чем вы там раньше занимаетесь и начинаете на своём С++ писать автоматизацию склада, расчёт возвратов по НДС, интерактивную страничку для сайта компании и прочие очень важные и нужные задачи. Потому что кто-то должен посчитать НДС, а те кто раньше это делали ушли из профессии из-за марсиан. Нравится?

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

Как встраиваемый язычок он уже давно не интересен по озвученой причине.

Что не так с http://www.micropython.org/ ? Запускается за 150 микросекунд на 168МГц процессоре. Работает в 192Кб ОЗУ.

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

Все задачи в принципе решаются на асме

Нет.

Да. Ты отрицаешь очевидное.

Ты будто всё больше закидываешься чем-то мощным с каждым витком дискуссии

Да не только я, тут похоже весь лор упорот, один ты в твёрдом уме и ясной памяти. Кстати, ты мне хамишь подобным образом уже не в первом посте.

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

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

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

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

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

Простыни уже в треде понаписал как не надо и что не надо. А можно конкретики в студию - список, на твой взгляд, правильных языков/систем/тулзов?

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

А ты тот же анонимус, который только закрыл дискуссию сообщением выше или уже другой?

Правильных языков очень много, а однозначно неправильные я уже называл. Слегка дополню список мертвячинкой типа Алгола, огромную любовь к которому мне тут приписали, Ады, Бейсика и рандомным хипстосимптомом них-синдрома — Crystal.

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

А ты тот же анонимус, который только закрыл дискуссию сообщением выше или уже другой?

Он другой анонимус. А я в сторонке постою.

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

Тебя справшивают, какие с твоей точки зрения однозначно правильные, ты в ответ «правильных языков очень много». При этом выше исключил из правильных все, компилирующиеся в JVM или JS (и, видимо, CLR). Затем все интерпретаторы. Теперь вот Аду с Алголом.

Что осталось из «очень много»? Си, Си++ и Фортран?

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

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

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

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

ты невнимательный: «правильных языков очень много» - это си и ещё алгол-68, но он умер

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

Кристал как раз идеальный кандидат на замену скриптопараше. Ты вкури систему типов то и макросы егойные, очень годно. Сишка с GC у нас уже взлетела, хотеть теперь нормальный высокоуровневый язычок вроде кристала в мейнстриме. И все, ворох динамического говна на палках из 90-х можно спокойно отнести на мусорку.

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

Усложнение это вообще или взросление языка и вырастание из коротких штанишек?

Поживем - увидим. Но, как и всякая годная технология, python точно повлиял на другие языки - Go, Swift, Kotlin. Причем взяли оттуда именно то, за что я его и любил.

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

Что не так с http://www.micropython.org/ ?

Я имел в виду не то. Лет 15 назад я отдавал свою аппликуху умеющим так-сяк программировать инженеру, медику, экономисту, а допиливать расширения предлагалось на python - они его осваивали за 2-3 вечера чтения 50-100 страниц документации и были в восторге.
А теперь им надо сунуть толстый талмуд только краткого описания языка.

cab ★★★★
()
Ответ на: комментарий от monk
extern(C) char* strcat ( 
  scope return char* s1, 
  scope const(char*) s2 
) pure nothrow @nogc;

https://dlang.org/library/core/stdc/string/strcat.html

strcat уже адаптирован, просто import core.stdc.string.
Вот переделанный string.h в string.d https://github.com/dlang/druntime/blob/master/src/core/stdc/string.d

А можно так:

#!/usr/bin/env rdmd

import std.stdio;

void main() {
  auto a = "abc";
  auto b = a ~ "cde";
  writeln(b);
}

$ ./strconcat.d
abccde

Я, если честно сказать, сам ещё не шибко въехал, как D использовать толком.
Вот ради интереса хотел на нём написать модуль .so для Emacs. На C всё без проблем.
Кто-то на русте даже спокойно наваял. А я на D не осилил emacs-module.h
перегнать в родной для D вариант вручную.
В общем, либа собралась, но вызов (require «module») приводил к сегфолту.

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

твёрдой конкретики

В качестве конкретики тебя только бинарщина устраивает, которая невозможна.

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

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

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

Не вникал в суть спора, но правду глаголишь.

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

Я ошибался.

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

Можешь просветиться в википедии про «скриптование» и в русском словаре про «банальный».

Нет, спасибо. При всём уважении к Википедии, я не считаю этот ресурс просветительским. Потому что про Вася (Петин работник) мог вполне легко расписать и преукрасить там понятие «скриптование». С какой стати Вася будет меня просвещать? Лол.

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

Ты хотел сказать не решать задачи, а описывать их решение. Ну что ж, я понял то, что ты хотел сказать. Однако легко и приятно можно описывать задачи на разных языках. Причём тут Питон - мне не понятно.

Нативный код — чтобы решать задачи, нагружающие CPU, максимально эффективно и быстро.

CPU нагружают любые задачи. Нативный код - это результат работы компилятора. То, что Питон является тормозным интерпретатором ничего не значит, кроме как то, что он является тормозным интерпретатором. Это проблемы Питона, что он не умеет превращаться в нативный код столь же эффективно, как хотя бы тот же SBCL. Хотя Common Lisp по выразительности не только не уступает Питону, но и превосходит его. Отсюда следует, что Питон - просто ненужный тормоз. То, что он стал популярным - это воля случая. История из той же оперы, что и про цепепе. Тот тоже стал популярным не потому, что является крутым языком, а просто случайно.

Эта модель такая, предположение, которое оказалось удачным на тот момент. Какой C++? Он язык того же класса, что и Си, как он мог быть клеем для него? На нем было легко и просто программировать?

Опять этот клей. На цепепе можно писать так же просто, как и на Питоне. Я даже создавал тему в форуме - Продуктивность разработки на Питоне vs C++. Но никто так и не смог объяснить, в чём превосходство Питона над C++ в части продуктивности разработки. Да я и сам этого так и не понял, в чём выигрыш Питона. И сделал вывод, что вот отличии от Васи и его работодателя Пети, мне Питон не нужен, что смысла в нём нет.

Прохладная история. OK, SCons плохой. Дальше что?

Дальше то, что Питон не подходит для реальных задач, сложнее ЗдравствуйтеМира. Плохой не SCons, а Питон.

Конечно, заменит. Даже C++ не нужен, Go справится.

Ну вот и зачем, спрашивается, нужен Питон, когда даже Go справится? Лол.

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

Во-первых, не 1/1000. Даже в худшем случае (обычный питон без типов, много расчётов) где-то 1/50.

Ну откуда эта инфа про 1/50? Напиши какую-нибудь агрегатную функцию для того же Постгреса, на который ты ссылаешься на C и на Питоне и ты увидишь далеко не 1/50.

Почти всегда всё упирается в скорость ввода/вывода.

Не только в скорость ввода/вывода. Тот же FFI - сильно накладная операция, даже в SBCL. Поэтому когда наивные одуванчики полагают, что через биндинги к либам на крестах или си они сделают на Питоне так же быстро, как на крестах или на си, то они сильно ошибаются как раз потому, что FFI - это всегда затратно.

И наконец, например, uvicorn на тесте fortunes даёт 78406 откликов в секунду, а ffead-cpp-postgresql всего 4515 (пруф). При том, что uvicorn написан на питоне, а ffead-cpp-postgresql на C++.

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

Поэтому не надо тормоза SCons'а относить на язык программирования. Если его переписать на C++ не меняя алгоритмов, сильно быстрее он не станет.

Ага, главное верить.

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

На башне ты тоже программируешь?

Да. Это называется интерактивное программирование. Его ещё называют «живым программированием». У тебя не возникает подобных вопросов, когда кто-то работает с REPL Питона или Лиспа?

Пример типичного применения баша (например постинстол):

Да, это пример интерактивного программирования, ничего удивительного или нового.

Это похоже на программу? «Программа» тут звучит слишком пафосно, это просто сценарий (скрипт).

Не понимаю о чём ты. Какой тут пафос? Лол.

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

Скрипт — это такая несложная quick-and-dirty программа

Если я напишу quick-and-dirty программу на цепепе в 10 строчек - это будет скрипт?

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

Неоднозначно всё. Нет бинарщины.

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

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

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

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

исключил из правильных все, компилирующиеся в JVM или JS

Сама Джава с Джаваскриптом при этом остались.

Си, Си++ и Фортран

— это заведомо уберменские языки, их не трогаем.

Голанг, Раст, Луа, Хаскель, R, Guile.

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

Не ясна нужность D. Уже, похоже, ясна ненужность Vala, просто потому что никто на ней не пишет, хотя она должна была занять пустую нишу. Swift нужен только чтобы Objective-C наконец сдох.

За каждый из них могу аргументировать, остальное либо забыл, либо нинужно.

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

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

Процитируй, где я такое сказал?

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

Скрипт — это такая несложная quick-and-dirty программа, призванная автоматизировать что-то в рамках выполнения более сложной программы (например, операционной системы).

Если я напишу quick-and-dirty программу на цепепе в 10 строчек - это будет скрипт?

А почему бы и нет. Если он остальным условиям отвечает. Вот только цепепе плохой язык для скриптов. Потому что

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

Да ещё автокомпиляцию прикрутить неплохо бы. С каким-нибудь #! /usr/bin/c++script.

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

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

Да, есичо, это всё не истина в последней инстанции, а только мои попытки сформулировать, что такое скрипт и чем отличается от «полноценной программы». Очевидно, граница там не очень чёткая.

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

Голанг, Раст, Луа, Хаскель, R, Guile.

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

Не ясна нужность D.

Если ты уже включил раст и го, то D скорее не нужен. Обычные дебаты в инете бывают типа Rust.vs.Go.vs.D.vs.(иногда)Nim. Go+Rust, скорее всего, покроют все случаи, где может пригодиться D.

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

Классификация языков по степени нужности/ненужности, крутости/убогости, няшности/говённости и т.п. — древнее программерское развлечение. На вот, развлекись, если ещё не.

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

Это не делает Питон нужным в принципе, это делает Питон нужным Пете и его наёмнику Васе.

Когда Петь сотни, тысячи и десятки тысяч, то таки это делает Питон нужным.

Вся твоя писанина суть шлангование. Рассматривать и сравнивать сферических Питонов, C++ и прочих не имеет смысла. В реальном мире питон нужен, со всеми его недостатками. Удачи в отрицании реальности.

А когда люди толкуют про «нимагу понять!», зачастую речь идет о «не хочу принять». Заставить кого-то захотеть против его воли проблематично, поэтому отвали.

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

@nogc

И в чём тогда преимущество перед С++? В Racket (или Python) обвязка всегда нормально интегрирует библиотеку и GC.

(define-curses newwin (_fun _int _int _int _int
                            -> _WINDOW-pointer)
  #:wrap (allocator delwin))

гарантирует, что GC автоматически вызовет delwin. В D придётся помнить, какие объекты свои, а какие пришли из сишной библиотеки.

И auto a = «abc» не даст тебе char*. Надо явно писать toStringz(...). И, судя по всему, передать эту строку внутрь сишной библиотеки вообще никак, так как

«When passing a char* to a C function, and the C function keeps it around for any reason, make sure that you keep a reference to it in your D code. Otherwise, it may become invalid during a garbage collection cycle and cause a nasty bug when the C code tries to use it.» (с) https://dlang.org/phobos/std_string.html

В Racket я могу явно указать, что объект будет храниться не в GC:

(define cstring (malloc _byte 6 #"Hello" 'raw))

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