Опубликован релиз языка программирования Crystal 1.16, разработчики которого пытаются совместить удобство разработки на языке Ruby с высокой производительностью приложений, свойственной языку Си. Синтаксис Crystal близок к языку Ruby, но не полностью совместим с ним, несмотря на то, что без переработки выполняются некоторые ruby-программы. Код компилятора написан на языке Crystal и распространяется под лицензией Apache 2.0...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=63052
Конпиляется всё ещё только шлангом? Точнее, не конпиляется вообще..
До сих пор компилираует "Привет, Мир!" пять минут?
>с высокой производительностью приложений, свойственной языку СиЧитайть умеешь?
Мусьё в силах понять разницу между производительностью работы программы и скоростью компиляции этой программы компилятором из исходников? И, кстати, скорость компиляции си-программ тоже так себе.
Быстрее Си (не путать с Си++) только разве у Паскаля.
У си отвратительная скорость компиляции. https://www.opennet.dev/opennews/art.shtml?num=56449 Для ускорения компиляции нужны некоторые фундаметнальные изменения, типа отказа от взаиморекурсивного включения файлов. Кроме паскаля нужно обратить внимание как минимум на go и ocaml.
У окамла вообще кажется лучший компилятор, что был придуман.
Да
Это ещё что за def - end конструкции? Где блин фигурные скобочки?
Да и то и другое что-то прошлый век, отступов вполне достаточно.
Ты про питоновские отступы что ли? Абсолютно тупое решение. Стоит туда сюда код покопипастить, сразу всё сбивается.
Зато приучает к порядку.
Не, ну если ваша работа "детей к порядку приучать" то что вы здесь-то делаете? Чат второй ясельной группы детсада 122 в whatdsup'е ведётся...
Nim
Отступы должны ставится автоматически, как на https://try.ocamlpro.com/. Вы ещё попросите программистов самостоятельно синтаксис подсвечивать, словно текст в ворде набирается, и с неправильной подсветкой - не компилировать.
Второй раз мне уже про эти чудеса рассказывают, прям даже спросить хочется - а другие практические преимущества, окромя автоматической расстановки скобочек и отступов есть? Где и для чего можно с практической пользой написанным на - попользоваться? Глядишь - заценю/пойму чего...
MLDonkey на OCaml написан.
Ээээто должно мне что-то сказать? Т.е. память мне подсказывает, что лет *цать назад я это название слышал, но и только.
Ну, не знаю, может надо с практической пользой закачать торрент.
> Ну, не знаю, может надо с практической пользой закачать торрент.А... у этого клиента есть какие-то практические преимущества перед <clientname> кроме того, что он написан на языке, ide которого справляется с расстановкой скобочек и отступов?
Сейчас вряд ли, поскольку другие сети (он поддерживает несколько разных) вроде бы умерли, а торрент-клиентов понаписано много. Но он достаточно легковесный был, если правильно помню.Впрочем, можно считать преимуществом работу со строками - исключены некоторые ошибки.
вы бы еще Kazaa вспомнили бы :)))
Просто помню, что этот MLDonkey авторы OCaml написали с целью прорекламировать язык. Достаточно сложный проект и далеко не худший для своего времени. Может, стоит вспоминать про него в темах с рекламой других языков? :)
А как для настоящего времени? Что в нём устарело, чего не хватает?
> Что в нём устарело, чего не хватает?вопрос некорректный, вот к примеру, чего не хватает в русском языке? - русских слов?
GNUtella
>Второй раз мне уже про эти чудеса рассказываютВ исходном сообщении речь шла об оформлении блоков кода. Какие ещё вы хотите преимущества найти? Тут в пору спрашивать, а почему это есть только для Ocaml, а где авторы других языков, неуж-то неосилили?
>а другие практические преимуществаЯзык даёт уникальное сочетание фич, конкурента, который давал бы эти вещи сразу - нет.
- Мощная система типов, предотвращающая кучу проблем типа Null Pointer Excepiton, здесь конкуренты разве что Rust и Haskell, (и куча других малоизвестных языков), другие относительно известные языки типа Kotlin-а или C# только движутся в этом направлении и неизвестно, придут ли к нему окончательно. Как говорится, скомпилировалось - значит работает. Сюда же следует добавить лёгкость рефакторинга
- Язык не слишком сложный в отличии от хаскеля и c++, но и не слишком простой, в отличии от go и lua.
- Быстрая компиляция, здесь из конкурентов может быть только go и pascal(не пробовал). Следует заметить, что некоторым скриптовым языкам типа typescript тоже нужна компиляция, и она бывает очень долгой
- Довольно легко читать чужой код, в отличии от того же хаскеля или c++, в отличии от условного php, js в коде нет неожиданной магии
- Можно собрать код статически и деплоить только один файл, как в go. Вычёркиваем всякие питоны и прочее, где нужен как сам интерпетатор, так и куча библиотек
- Язык гибкий. Хаскель форсирует написания чистого(без побочных эффектов) функционального кода, go - наоборот форсирует написание изменяемого кода с глобальным состоянием, Ocaml позволяет брать эти возможности по необходимости. Можно даже программировать с использованием ООП(да, здесь есть наследование, в отличии от того же раста)
- Стабильность: у языка есть стабильный релиз, переписывать код после каждой новой версии не придётся. Сразу вычёркиваем кучу языков типа zig или v. Аналогично, у языка есть библиотеки и инструменты, например, можно собрать его в js.
- Язык препятствует возникновению случайных ошибок, типа опечатак в имени переменной - будет ошибка компиляции. В условном питоне молча объявится новая переменная, в условном js запросто появится NaN
- Код сохраняет семанитку языка: в отличии от си не будет ошибок сегментации и прочих UB.
- Есть REPL, что довольно удобно для написания прототипов.
- AOT компиляция, что делает код довольны быстрым, в отличии от того же python. Если сравнивать с языками где есть продвинутый JIT типа js, то будет гораздо более экономный расход памяти
- Начиная с Ocaml 5 есть поддержка многоядерности, как в условном си или go, в отличии от js или python, которые будут ютится на одном ядре
- Можно расписывать и дальше, но я думаю, что и этого уже хватит
>Где и для чего можно с практической пользой написанным на - попользоваться?Функциональное программирование с сильной типизацией очень удобно для работы с исходным кодом, в частности компилятор rust изначально был написан на Ocaml. А так, язык универсальный, на нём можно писать почти что угодно. Хотите - MirageOS как unikernel программу, которая будет работать без операционной системы сразу под управлением гипервизора, хотите - пишите плагины для i3 типа Spatial shell, Jane Street для финансовых операций используют, хотите - вот человек для тренировки написал game boy и запустил в браузере https://habr.com/ru/articles/645237/.
Воу! Крутая штука, не то, что этот наш гвидобейсик - а то, что за 30 лет так ничего полезного и не (пере|на)писали - то, понятно, фигня.
А если это чудо еще и в emacs под NixOS - то и вовсе, все дивчОнки мои будут!
>А если это чудо еще и в emacs под NixOSСенсей-сама, как вы догадались, что я пишу в эмаксе под NixOS?
Благодаря скобкам можно написать огромную программу в одну строку
Там же, где и в Ruby -- взаимозаменяемы с do ... end.
ты ещё про пустые скобки у методов спроси,
и вообще про все сишные "чипыжи"
Fiber::ExecutionContext::MultiThreadedмода на многословность?
на понятность
пять плюс восемь равно тринадцатьпонятность
>в виде легковесных потоков, именуемых файберами (Fiber)Слово Fiber с аглицкого переводится как "клетчатка". Эти легковесные потоки должны переводится как "клетчатки".
Целлюлоза
Волокно же!
Fiber optics - клетчаточная оптика?
n00by считает что правильнее - нитчатая оптика.
нить - результат прядения, а прядение это:https://ru.wiktionary.org/wiki/прядение
"""
процесс продольного складывания и спирального скручивания отдельных волокон для получения длинной и прочной нити
"""То есть волокна это кусочки такие, а точнее:
https://ru.wiktionary.org/wiki/волокно
"""
тонкая непряденая нить растительного, минерального или синтетического происхождения
"""И вот тут прикол, нить это пряденное волокно, волокно это непряденая нить :)
Синоним волокна - фибра:https://ru.wiktionary.org/wiki/фибра
"""
жилка, нерв, волокно животной ткани
"""
"Нить" это переводится, и потоки так называются.
Ну, вроде как "thread" - нить, а "fiber" - волокна, из которых состоит эта нить. И очень логично названо: тред - поток исполнения с аппаратной поддержкой в процессоре и в распространенных ОС обычно еще и вытесняющиеся по времени, а уже внутри потока куча файберов - сопрограмм с "кооперативной" многозадачностью (вытеснения нет по времени, передача управления следующему файберу происходит или добровольно явно или при входе в вызов ввода/вывода).
Для английского действительно логично. С переводом возникает путаница, thread переводят и как "поток" (встречаю такое чаще), и как "нить". Последней вариант используют обычно, когда "легковесных потоков" нет. В любом случае, оно не клетчатка.ЗЫ у thread-а нет аппаратной поддержки в процессоре (IA32/AMD64) в смысле каких-то команд или специально предназначенных регистров. Под "аппаратно" понимается вызов планировщика по таймеру, может заодно меняться регистр fs или gs, через который адресуется thread local storage, но это "просто сегментный" регистр, без особого смысла как у ss (сегмент стека).
Фибры.
И после этого, ещё Rust ругают за синтаксис?
Синтаксис у него может и не самый плохой, но отсутствие хорошей IDE портит всё впечатление.
IDE нужна для джунов, вполне комфортно писать и без неё. Тут всё впечатление портит сам язык.
Для любого крупного проекта нужна IDE, или как минимум языковой сервер
Нет.
Ага. Особенно, если окромя хелловрота ничего писать и не собираешься.
программиста-писаки-в-стол ответ
"Блокнот" и компилятор командной строки.
И мазохизм, конечно
Emacs!
> языковой серверНе напоминай про эту мерзость
Это лучшее, что случалось с IDE. Теперь редактор можно развивать отдельно, а поддеркжу языка - отдельно, и не мирится с отвратительной IDE ради хорошей поддержки языка
Есть crystalline, хотя проект лишь "пассивно обновляется" автором.https://github.com/elbywan/crystalline/blob/master/assets/sm...
> вполне комфортно писать и без неё.Хелловорлды — да.
Так чего растоманы кинулись за си++ повторять. Вот и ругают поэтому. Своей головой думать надо было.
Да, у Crystal синтаксис гораздо лучше.
Надоели уже новости о pet-язычках, на которых никто кроме автора не пишет и писать не будет. В которых даже идей новых нет. Crystal, nim, zig, v, сколько этого мусора уже наплодили...
а где есть идеи?
Поезд уже ушёл, ага. Llm учить не на чем --> ненужно.
Вас кто-то насильно заставляет их внимательно читать? Или если Вам не нужно, то и всем остальным должно быть не нужно? Какое-то детское-потребительское мышление
> Crystal, nim, zig, v, сколько этого мусора уже наплодили...Продолжайте список
>разработчики которого пытаются совместить удобство разработки на языке RubyИнтересно, какие это удобства писать на руби? Скобки при вызове можно опускать, как следствие для функционального программирования возникает проблема - имя функции неотличимо от вызова, как следствие возникают примеры типа этого
coll.reduce(0, &:+)
Подобная проблема внезапно есть в php.
Скобки можно опускать, но на вложенных вызовах появляются проблемы, в них опускать ничего нельзя
a b == a(b)
a(b(c))>с вычислением макросов
Макросы не гигиеничны
>В языке применяется статическая проверка типов, реализованная без необходимости явного указания типов переменных и аргументов методов в кодеИдея с выводом типов весьма интересна
>генерацией кода во время компиляцииКомпиляция весьма долгая, словно в хаскеле
Идеи в языке интересны, но язык далеко не самый удобный
Лучше уж бороться со скобочками в руби и опционвльно собираться в натив, чем бороться с питонистами, не понимающими, что такое map и упорно заставляющими писать типы в скриптухе.
>и упорно заставляющими писать типы в скриптухе.Это позор питона, ведь код
def test(a : int):
print(a)
test("a")работает без ошибок. Кроме того, питонистам пора открыть для себя Ocaml, там тип переменных нужно писать крайне редко, так как он выводится
List.iter print_string ["hello "; "world"]
let result = let sum a b = a + b in
List.map sum [1; 2; 3]Хотя в этих строках тип данных не указан ни разу, компилятор знает тип каждой переменной
Кому позор, а кому и регулярно помогает находить трудновыявимые баги до того, как они себя проявят. Да и в своём коде ещё ладно, а вот в коде зависимостей не всегда очевидно. Видимо, ты никогда не работал ни с чем сложнее привет мира, и не понимаешь, чем полезна индикация ожидаемого типа программисту (и не компилятору).
>Кому позор, а кому и регулярно помогает находить трудновыявимые баги до того, как они себя проявятВ нормальных языка будет ошибка компиляции, ещё до запуска программы. В питоне может-быть где-то промелькнёт ошибка линтера, однако далеко не факт, что её хоть кто-то исправит. Это первый момемнт.
Второй момент - питон превращается в некую жабу, где нужно писать тип буквально на каждой строке.
Никто не заставляет это делать, пихай, что хочешь. Тайпскрипт вон по понятным причинам лучше жс прижился в приличных проектах. В питоне система типов хоть и более адекватная, но без тайпхинтов не очень удобно (и всегда возможно) угадывать.
> Никто не заставляет это делать, пихай, что хочешь.Так не пойдёт, а как же затгавить его за то, что он позорит весь дом высокой культуры программирования?
Некоторый смысл в аннотациях есть, но их объявили то ли серебряной пулей, то ли святым граалем и будут носиться с ними, пока не пройдёт мода и станет безопасно говорить про их ограниченную применимость и чужеродность (место для типизации в языке надо было предусматривать немного раньше, лет так на 30).
Вот пример про моду и затаскивание в питон весьма странных вещей.
A curated list of awesome DI Frameworks for Python
https://github.com/sfermigier/awesome-dependency-injection-i...Они там совсем ку-ку? Паттерн внедрения зависимостей называется "паттерном", потому что это вещь, которую приходится делать руками из-за ограниченности джавы. Как для сишников виртуальные методы превращаются в паттерн, потому в языке нет ни классов, ни слова virtual, так и вещи, которые делаются в одну строку в питоне, превращаются в паттерн в джаве.
То есть эти люди пытаются перенести ограниченность джавы в питон. И у них даже есть моральный фундамент в виде книжки Боба Мартина, который, может быть, забыл написать, что паттерны - это обычно компенсация недостаточной выразительности языка типа джавы.
Фундамент этот со временем пошатнулся, так и с утиной типизацией со временем начнут говорить, что в ней надо видеть плюсы и уметь ей пользоваться. Что в других языках с типизацией могут упорно бороться ради достижения обобщённого программирования, а в языках типа питона оно есть по умолчанию и что это благо, которое неплохо дополняется именованными параметрами и assert'ами, без ненужных попыток превратить написание программы в доказательство теоремы, как иногда случается с избыточной типизацией.
Нужно что-то такое для питона. Да, я знаю, что есть mypyc, nuitka, codon и несолько других проектов.
Cython.
> Cython.Он более низкоуровневый чем сrystal?
Он не только более низкоуровневый, у него гораздо слабее система типов. Для Crystal код типа этого10.times do
a = Random.rand 10if a > 6
b = "2"
elsif a > 3
b = "error"
else
b = 1
endif b.is_a?(String)
puts "b is string"
c = b.to_i?
else
c = b
endif !c.nil?
puts c + 1
end
endне проблема, crystal позволяет присваивать переменной значения разных типов, и обрабатывать в зависимости от типа, cython так не сможет
Более низкоуровневый, чем CPython. Но, наверное, не сильно более.
Это всё не то (да и не даёт никакого профита), ты, видимо, ищешь shedskin или cython.
Возьмем по ведру фишек от каждого яп'а и с этим попытаемся взлететь.
Отличный план, только высота полета низенькая