Доступен релиз инструментария Haxe 4.1, включающего одноимённый мультипарадигменный высокоуровневый язык программирования со строгой типизацией, кросс-компилятор и стандартную библиотеку функций. Проектом поддерживается трансляция в С++, HashLink/C, JavaScript, C#, Java, PHP, Python и Lua, а также компиляция в байт-код JVM, HashLink/JIT, Flash и Neko, с доступом к родным возможностям каждой целевой платформы. Код компилятора распространяется под лицензией GPLv2, а стандартной библиотеки и развиваемых для Haxe виртуальных машин HashLink и Neko под лицензией MIT...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=52974
Хороший язык. Разрабатывать на нем, конечно же, не буду.
Да и котлин уже есть.
можно на котлине не разрабатывать?
а вот это никак нет
А вот и можно, плюсы уже есть.
Котлин jvm Онли ну ещё за немного жс
Для утомлённых джавой вопщем
Хотя форсят как мульт платформ
А хекс истинный мультиплатформенный яп
Проблему с GIL в Python он решает?
Проблема с GIL только у кодеров, которые не понимают зачем нужен GIL и питон вообще
Ну то есть у 90%
Расскажи нам, зачем же нужен GIL? Почему нельзя без GIL обойтись?
Может быть потому что без GIL весьма велика вероятность возникновения состояния "гонка за ресурсами", а накладные расходы интерпретатора существенно возрастают?ЗЫ Вообще-то на этот вопрос, в свое время, Гвидо уже ответил весьма и весьма развернуто. Больше читаем, и меньше возмущаемся на формах, приятель. А заодно учимся понимать как могут помочь делу сопрограммы, и почему в бинарных библиотеках ограничения GIL не действуют.
> и почему в бинарных библиотеках ограничения GIL не действуютПока к питоновским структурам дынных не обращаешься, иначе нужна синхронизация?
Тут все немного сложнее. Событийно-ориентированного механизма на этом уровне нет. Следовательно, требуется реализовать несколько нитей-тредов и заставить один из них тупо ждать пока бинарная библиотека не отработает.В момент, когда такой поток делает запрос к бинарной библиотеке он отпускает GIL (глобальная блокировка так же отпускается при переходе потока-владельца в ожидание событий ввода-вывода и каждые 100 тиков проца), и другие нити могут спокойно в это время работать. Когда же от бинарной библиотеки приходит ответ, то нить может сохранить полученный ответ в очереди для использования другими потоками. Конечно, в этот момент /момент сохранения/ так же будут действовать правила GIL, но это будет уже не так важно, потому что тяжелые много-поточные вычисления, реализованные на уровне внешней библиотеки, к этому моменту уже будут завершены.
Чтобы обойти ущербность Python разрабатывали вложенные интерпретаторы для обхода GIL, но что-то пошло не так. Запустить несколько экземпляров Python интерпретаторов реализуемо. Pandas и Numpy это расширения написанные на C. Me
> Чтобы обойти ущербность Python разрабатывали вложенные интерпретаторы для обхода GIL,
> но что-то пошло не так. Запустить несколько экземпляров Python интерпретаторов реализуемо.
> Pandas и Numpy это расширения написанные на C. MeНесколько интерпретаторов... точнее субинтрепретаторы (subinterpreters) появились совсем недавно, в питоне 3.8, и в данный момент их реальное использование, я бы сказал, действительно натыкается на ряд концептуальных проблем (маршалинг штука медленная, а идея общей памяти с указателями пока не имеет своего пепа, насколько мне известно). Так что, ИМХО, фича является скорее эксперементальной, нежели реально работающей в продуктиве. Хотя концепция очень интересная, поскольку субинтерпретаторы легче чем процессы, хотя и тяжелее нитей, в смысле накладных расходов на их запуск.
Но еще раз - это все только-только появилось. Так что кукарекать о том, что "что-то пошло не так" немного рановато))) Хотя те, кто о питоне судит в русле его "ущербности" как раз так и кукарекают.
Одна из причин ущербности Python это реальная мультипоточность которая может быть только в расширениях, но это уже совсем другой язык C. Синонимы к слову ущербность недостаточность и неполноценность.
Он позволяет не беспокоиться о состояниях гонки внутри интерпретатора. Использование для этого более гранулярных локов очень сильно затормозило бы однопоточные программы, для которых питон чаще всего и используют. А введение async/await (ну и всякие twisted с greenlet) позволяют и сетевые программы успешно писать.
> Для чего нужен GIL?Он нужен для конкурентной многозадачности без сложного кода атомарного доступа к одним и тем же объектам из разных потоков. Это нужно, чтобы банальное присвоение любого объекта не прерывалось на середине. Я не знаю, когда был введён GIL, но судя по патчу для Python 1.4, который его удаляет, в 1996 году он уже стал частью Питона.
Глобальный блокировщик -- идея очень простая, и введена как раз поэтому. Да, она не позволяет работать на множестве ядер, но будем честными, в 1996 году об этом точно никто не задумывался. Я не знаю, когда именно был введён GIL, но первые x86 двухядерные процы появились сильно позже, да и многопроцессорные системы были достаточно редкими, чтобы о них париться.
В ядре линукса было что-то похожее, Big Kernel Lock
> Почему нельзя без GIL обойтись?
Можно. Если есть деньги на развитие и поддержку проекта, то вполне можно заменить мегалок на много атомарных. В Джаве нет. В Шарпе нет. В Linux нет с 2011 года (заметим, спустя шесть лет с выхода многоядерного x86).
Но это сложно, однозначно приведёт огромному количеству сложноуловимых багов и на первых порах сильно просадит однопоток. А на последних сделает добавление новых фич очень затратным делом.
Теперь ответ на вопрос, а какие есть альтернативы в Питоне: многопроцесность. Да, как в хроме, можно запустить питонов по количеству ядер и организовать проброс сообщений между ними через очереди (Queue). В большинстве случаев этого хватает. Тот же flask так делает. Часто сложный, долгий код выносят в C(++), где можно наплодить потоков как душе угодно, если они не меняют в разных потоках переменные питоновского кода.
Кстати, GIL -- это то самое "лучше чем ничего". Года три назад, в PHP многопоток был небезопасен, в JavaScript его не было вовсе, в Lua каком-нибудь и до сих пор нет. В нативных языках типа C(++) или Fortran атомарное присвоение не гарантируется, там проще. В Rust подрублен серьёзный статический анализ. Не знаю, как там в остальных языках.
> Кстати, GIL -- это то самое "лучше чем ничего". Года три назад, в PHP многопоток был небезопасен, в JavaScript его не было вовсеВ JavaScript такая же кооперативная многозадачность, чем по сути GIL и является. Ну а node.js в libuv есть пул потоков.
> В нативных языках типа C(++) или Fortran атомарное присвоение не гарантируется, там проще.
В C++ начиная с 11 года стандартизирована модель памяти и есть атомики.
> Глобальный блокировщик -- идея очень простая, и введена как раз поэтомуОт которой постоянно пытаются избавиться
Так Python создавался для обработки текста. И как замена bash скриптам ok. Но писать на нем приложения в десятки тысяч строк идиотизм потому что они рассыпаются из-за обычных опечаток. Или писать миллионы тестов
> Так Python создавался для обработки текста.Откуда инфа? Это про perl.
> потому что они рассыпаются из-за обычных опечаток
Ну это претензия к любому динамически типизируеимому языку. Да и зависит от связности кода. А по теме есть опциональная проверка типов.
> В Rust подрублен серьёзный статический анализ.Который предотвращает только data races (подкласс race conditions). Это, конечно, облегчает, но не избавляет от необходимости следить за низкоуровневыми деталями реализации многопоточности.
Для стандартных задач принято использовать либы напр. https://github.com/rayon-rs/rayon и
https://tokio.rs/ | https://async.rs/
Да
Пишеш код на хекс
И компилируеш в jvm таргет
Нахе* нужен! ;)
Кому?
Хипстерам же, ну! Чё б ни изучать, лишь бы не работать. :)
Нет ничего более убогого, чем фигурные скобки в качестве операторных.
ну как же, есть - отступы
Пора бы уже свести все языки к принудительным отступам со скобками, чтобы все страдали и этот унылый срач закончился.
И никаких Lint. А если бы еще проверяло орфографию в названиях переменных и т.д. - брал бы сразу. Как наделают своих сокращений и завернут в крокодилы/простыни - сиди и думай что сказать то хотели. А так сразу на уровне компиляции по рукам давать.
Освой уже Go, бро :)
Кто-нибудь юзает? и для каких кейсов
Для игор https://github.com/abagames
Для ненужнаfxd
Для ненужнов нужна космическая капсула, чтобы выкинуть их всех в космос и они перестами переводить ресурсы на земле.
> Для ненужнов нужна космическая капсула, чтобы выкинуть их всех в космос и
> они перестами переводить ресурсы на земле.верно. авторы сабжа займут места в партере.
https://haxe.org/use-cases/
Веб еще норм, особенно если захочешь потом написать мобильное приложение, реюзнув логику / структуры данных клиента/сервера.
> https://haxe.org/use-cases/
> Веб еще норм, особенно если захочешь потом написать мобильное приложение, реюзнув логику
> / структуры данных клиента/сервера.не-гумновеб структуры нельзя реюзать??
Узнай что такое структуры данных пожалуйста, вместо триггеринга на слово веб в предложении
final people = [
"Elizabeth" => "Programming",
"Joel" => "Design"
];Выглядит по PHP-шному, где это просто ядерная смесь понятия "массив" и "ассоциативный массив" -- реально бесит в итоге.
Это синтаксис ассоциативного массива (Map<String, String> если точнее), для обычных будет [1, 2, 3] например (Array<Int>)
Это пол беды, а вот как он узнает, что "Elizabeth" это name?
name это имя переменной о которой знает программист который этот код написал. Не передергивайте
я полагаю, он не передергивает, а реально не понял, что за херня тут написана и где определения этих name и job. А их и нету ;-)
ну учитывая, что это строгая типизация то вполне справедливое замечание. но видимо этот язык похож этой чертой на питона, где такое норма, но все же действительно странно.
из for name => job - где name и job - это просто первое что придумал афтырь, очевидно же ж.
Потому что Map это структура ключ-значение. Такой for тоже (key => value), где можно назвать их как удобнее для итерации. Знает, потому что ключ слева, а значение справа =)
А как узнать, что 180 - это количество комментариев на опеннете, а не iq?Как всегда, либо называть понятным образом переменные, либо добавлять domain level типизацию через инструменты определения пользовательских типов, присутствующие в данном языке.
По пхпшному - это смешать все в кучу. Тут же явно задаётся map string-string.
"р" в конце не хватает.
что люди ни делают только бы не почитать пол часа ман перл
У вчерашней школоты не модно жи)
Вменяемые люди, рационально используют свое время
> Вменяемые люди, рационально используют свое времяпокупают поддержку Майкрософт Лангуаге Фор Професионалс Про++ !!!1111 пыщпыщ
87 в нике - это год производтсва? тогда не удивлен
Что пережитки коммунизма не делают, лишь бы теплое с мягким сравнивать.
> почитать пол часа ман перл
> пережитки коммунизмаРаспространенный вариант, когда под одним идиотским комментарием оставили другой идиотский комментарий :)
и что это даст пользователям Haxe?
Ответ на вопрос, "зачем нужен нахе"? Ответ: нахе-р не нужен.
блин, а смешно, даже немного неловко
> Ответ на вопрос, "зачем нужен нахе"? Ответ: нахе-р не нужен.мимо, для ответа на этот вопрос перл не нужен.
> ман перлЭй некрофил, а по теме есть сказать что? А может новость почитать внимательнее и после комментировать? А еще лучше не полениться и вначале хотя бы вики глянуть по haxe?
Сколько максимально можно сделать платформ?
хороший язык, только не понятно как не нем начинать проект. В с++ просто, cmake, main.cpp, в rust тоже всё подробно описано в мануале, а тут?
Здесь у каждой платформы можно прочитать какой сетап:
https://haxe.org/manual/target-details.html
Для большинства достаточно команды типа `haxe --js main.js --main Main`
Для Java/С# можно поставить вспомогательную библиотеку для использования jar/dll либ.
Для C++ вспомогательная часть для компиляции в кучу платформ тоже в либе реализована.
Еще более простое описание, начиная с DE вот на этой странице для части таргетов:
https://haxe.org/documentation/introduction/
Вкратце: поставить хакс, vscode c плагином (https://marketplace.visualstudio.com/items?itemName=nadako.v...), открыть им пустую папку и в палитре команд выбрать "Haxe: Initialize Project".
Хвост воблы, глаза иволги, вот это всё.
Спасибо за ссылки, сейчас копаюсь как оно в lua транслируется, идея супер у языка
Молодец. Защитил диплом-то?
А так чего не сделают, что бы C/C++ не изучать.
Да, себе и другу
https://store.steampowered.com/developer/shirogames
https://store.steampowered.com/developer/MotionTwin
Забавный академический язык )