The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Релиз языка программирования Haxe 4.0

27.10.2019 09:03

Доступен релиз тулкита Haxe 4.0, включающего одноимённый мультипарадигменный высокоуровневый язык программирования со строгой типизацией, кросс-компилятор и стандартную библиотеку функций. Проектом поддерживается трансляция в С++, HashLink/C, JavaScript, C#, Java, PHP, Python и Lua, а также компиляция в байт-код JVM, HashLink/JIT, Flash и Neko, с доступом к родным возможностям каждой целевой платформы. Код компилятора распространяется под лицензией GPLv2, а стандартной библиотеки и развиваемой для Haxe виртуальной машины Neko под лицензией MIT.

Язык является expression-ориентированным со строгой типизацией. Поддерживаются приёмы объектно-ориентированного, обобщённого и функционального программирования. Синтаксис Haxe близок к ECMAScript и расширяет его такими возможностями, как статическая типизация, автовывод типов, сопоставление шаблонов, дженерики, основанный на итераторах цикл "for", AST-макросы, GADT (Generalized Algebraic Data Types), абстрактные типы, анонимные структуры, упрощённые определения массивов, выражения для условной компиляции, прикрепление метаданных к полям, классам и выражениям, интерполяция строк ('My name is $name'), параметры типов ("new Main<String>('foo')") и многое другое.


   class Test {
       static function main() {
           var people = [
               "Elizabeth" => "Programming",
               "Joel" => "Design"
           ];
   
           for (name in people.keys()) {
               var job = people[name];
               trace('$name does $job for a living!');
           }
       }
   }

Основные нововведения версии 4.0:

  • Новый синтаксис для указания типа функций "(name:String, age:Int)->Bool" или "(String, Int)->Bool" вместо "String->Int->Bool".
  • Синтаксис стрелочных функций "(a, b) -> a + b" вместо "function(a, b) return a + b".
  • Защита от проблем, связанных с использованием значений Null (экспериментальная функция, включается при желании для определённых полей, классов или пакетов).
  • Ключевое слово "final" для полей классов и локальных переменных, которые являются иммутабельными. "final" также можно использовать для определения функций чтобы запретить их переопределение при наследовании и для классов/интерфейсов, которые не могут быть унаследованы.
  • Поддержка стандарта Unicode для базового типа "String" на всех целей компиляции за исключением Neko.
  • Переписанный с нуля встроенный интерпретатор, который теперь поставляется под именем Eval. Благодаря новому интерпретатору скрипты и макросы выполняются намного быстрее. Поддерживается режим интерактивной отладки.
  • Новая целевая система для компиляции (target) Hashlink - высокопроизводительный runtime, разработанный специально для Haxe, поддерживающий компиляцию в байткод для JIT или C, имеет простую интеграцию с C, а также доступ к низкоуровневым числовым типам и указателям.
  • Реализована новая целевая система JVM, которая позволяет генерировать байткод jvm, пропуская этап компиляции Java-кода через добавление флага "-D jvm" при таргетировании в Java.
  • Возможность inline-развёртывания на месте вызова функций или конструкторов, даже если они не объявлены таковыми.
  • Возможность включения статических расширений при объявлении типа (например "enum") с помощью "@:using(path.ToExtension)".
  • Абстрактные типы теперь поддерживают "set"-версию оператора "@:op(a.b)" для перезагрузки выражений "obj.foo = bar".
  • Синтаксис цикла "for" теперь поддерживает итерацию "ключ-значение": "for (key => value in collection) {}".
  • Поддержка использования xml-like разметки в выражениях: "var a = <hi/>;". Пока эта возможность доступна только для парсинга макросами и находится на этапе дизайна.
  • Синтаксис для опциональных полей в "полной" нотации типов анонимных структур: "{ var ?f:Int; }" (альтернатива "краткой" "{ ?f:Int }").
  • Значения перечислений теперь могут быть значениями по умолчанию для аргументов функции: "function foo<T>(option:Option<T> = None)".
  • Синтаксис "enum abstract Name(BasicType) {}" больше не требует префикса "@:" в "enum".
  • Авто-нумерация для абстрактных перечислений:
    
       enum abstract Foo(Int) {
         var A; // 0
         var B; // 1
       }
       enum abstract Bar(String) {
         var A; // "A"
         var B; // "B"
       }
    
  • Ключевое слово "extern" больше не требует использование префикса "@:".
  • Удалена возможность "implements Dynamic" для доступа к полям класса через строки. Доступно для extern-классов или через реализацию абстрактным типом.
  • Добавлен синтаксис "A & B" для пересечения типов, который на данный момент применяется только для анонимных структур и ограничений параметров типа. Старый синтаксис ограничений удалён.
  • Создание пустых экземпляров "Map" доступно через синтаксис "var map:Map<Int, String> = [];" по аналогии с массивом.
  • Добавлена структура данных "haxe.ds.ReadOnlyArray".
  • Метаданные теперь могут иметь пространства имен ("@:prefix.name function() {...}"). Аналогично с определениями: "#if (some.flag ... #end".
  • Новый протокол сервисов для IDE, используемых в плагине к VSCode.
  • Обновлены внешние определения (extern) для Web APIs и добавлены отсутствующие.


 
  1. Главная ссылка к новости (https://github.com/HaxeFoundat...)
  2. OpenNews: Увидел свет язык программирования Nim 1.0
  3. OpenNews: Сравнение производительности сетевого драйвера в вариантах на 10 языках программирования
  4. OpenNews: Открыты исходные тексты языка программирования V
  5. OpenNews: Открыты исходные тексты языка программирования Flow9
  6. OpenNews: Выпуск языка программирования Julia 1.1
Автор новости: Рыбла
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/51763-haxe
Ключевые слова: haxe, lang
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (149) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 09:45, 27/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  []     [к модератору]
  • +51 +/
    В названии не хватает буквы "р".
     
     
  • 2.7, Аноним (7), 10:47, 27/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +1 +/
    Это о многом говорит.
     
     
  • 3.105, Аноним (105), 02:04, 28/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +13 +/
    > Это о многом говорит.

    Но в основном о комментаторе.

     
  • 2.13, Bbore (?), 11:19, 27/10/2019 [^] [^^] [^^^] [ответить]  [] []     [к модератору]
  • +1 +/
    Факс или нахер?)))
     
     
  • 3.15, Аноним (15), 12:06, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Второе.
     
  • 2.139, Аноним (139), 19:35, 28/10/2019 [^] [^^] [^^^] [ответить]  [] []     [к модератору]
  • +1 +/
    а что такое хаксеп?
     
     
  • 3.159, Ивал (?), 18:33, 31/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Светлый путь
     
  • 2.160, Azudim (??), 15:15, 03/11/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    Хахе :)
     

  • 1.4, Аноним (4), 10:25, 27/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  [] []     [к модератору]
  • +4 +/
    И какова же (зявленная) целевая сфера применения? Уэб, ембеддед, аппликатион девелопмент?
     
     
  • 2.5, анономус (?), 10:32, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +5 +/
    насколько я знаю на нёи всякую индюшатину активно пилят
     
  • 2.8, Omnomnom (?), 10:57, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +2 +/
    https://haxe.org/use-cases/
     
  • 2.10, Капитан (??), 10:58, 27/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +9 +/
    https://haxe.org/use-cases/
    В основном веб-сервисы и геймдев (Northgard, Dead Cells). Более строгая система типов в сравнении с надстройками вроде TypeScript, спека без жсных undefined, ===, прототипов и тд.
     
     
  • 3.79, vitalif (ok), 21:27, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > ncannasse
    > Haxe creator, co-founder at Shiro Games (Northgard, Evoland)

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

    Но по крайней мере да, то, что они это успешно заюзали под игры - уже что-то...

     
     
  • 4.100, Аноним (100), 23:23, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +7 +/
    Просто не у всех есть желание и ресурсы пеариться. Язык на самом деле годный. По сути TypeScript для не-хипсторов: больше для реального применения, чем для возюканья с описанием типов (от которых в TS порой глаза на лоб лезут и появляются мысли, что JS-программист это приговор - настолько упороться могут только они и переход на TS ничего в этом не меняет).
     
     
  • 5.128, Георгий (??), 12:56, 28/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Так и не понял, как там делать проекты, чтобы зависимости сами устанавливались, как в pip, maven и т.п. Какая-то путаница там со сборкой проектов и package-менеджерами.
     
  • 2.138, Аноним (138), 18:21, 28/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    Если игры можно писать - остальное подтянется
     

  • 1.9, Аноним (9), 10:58, 27/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  [] []     [к модератору]
  • –4 +/
    >интерполяция строк ('My name is $name'),

    Кто придумал для этого использовать одинарные кавычки вместо обратных, как в JS?

     
     
  • 2.14, Аноним (14), 11:54, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +18 +/
    Haxe:

    1) двойные кавычки — без интерполяции
    2) одинарные кавычки — интерполяция

    JS:

    1) двойные кавычки — без интерполяции
    2) одинарные кавычки — ВНЕЗАПНО тоже без интерполяции, делают ровно ТО ЖЕ, что и двойные
    3) обратные кавычки — интерполяция (пришлось заюзать в спеках ТРЕТИЙ символ, потому что первые ДВА символа оказались заняты для ОДНОГО и того же)

     
     
  • 3.18, Аноним (18), 12:37, 27/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +2 +/
    А с чего вы решили что они должны на JS ориентироваться?

    JS: 'foo${n}bar'

    c#: $"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now."

    kotlin: "My Age Is: $age"

    бидон:    
    a = 12
    b = 3
    print(f'12 multiply 3 is {a * b}.')

     
     
  • 4.19, Аноним (18), 12:39, 27/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +2 +/
    сорян, что немного не туда ответил, но считаю, что есть языки программирования, а есть js и php
     
     
  • 5.57, OpenEcho (?), 18:09, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +2 +/
    И на чем же пилит элита програмистов , и при этом достигнув такой же ну или хо... большой текст свёрнут, показать
     
     
  • 6.68, JL2001 (ok), 19:08, 27/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +2 +/
    > но нормальный то человек должен понимать, что молоток в руках обезьяны
    > - это оружие, в то время как у других - мощный
    > и удобный инструмент и что проблема не в молотке, а в
    > тех кто его использует.

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

     
     
  • 7.77, OpenEcho (?), 21:24, 27/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +1 +/
    > если молоток надо постоянно приматывать проволокой и придерживать, но он всё равно
    > норовит тебе свалиться на ногу, или если молоток какой-то песочный или
    > пластилиновый или просто резиновый - то что надо говорить?

    Вы знаете для веба более лучшие инструменты и людей умеющих за разумную плату делать то же что JS & PHP?

    Почему то Гугло карты работающие на JS работают, у вас же тот же инструмент должен вам падать на ногу... может просто вы его не умеете танцевать ?

     
     
  • 8.101, хотел спросить (?), 23:24, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +2 +/
    Никто не знает потому что их просто нет JS - говноязык, накаченный стероидам... текст свёрнут, показать
     
     
  • 9.102, Crazy Alex (ok), 23:43, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    GWT Можно в принципе не продолжать, кто с этим непотребством дело имел - те в к... текст свёрнут, показать
     
     
  • 10.152, хотел спросить (?), 03:03, 29/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    От этого Java не стало таким же убожеством как JS Да и бридж весьма неплох, смо... текст свёрнут, показать
     
  • 7.80, Аноним84701 (ok), 21:28, 27/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    > или просто резиновый

    Ну, любители странных аналогий могут конечно и обычным стальным молотком (благо, есть резиновые насадки) стучать по плитке, ламинату, дереву, черепице, тонкой жести и т.д – но резиновый, обычно, все же удобнее.


     
     
  • 8.87, JL2001 (ok), 22:17, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +1 +/
    вы описываете киянку, а не молоток и когда у вас молоток превращается в киянку -... текст свёрнут, показать
     
     
  • 9.92, Аноним84701 (ok), 22:38, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +2 +/
    Хм, а я думал, что это просто разновидность молотка КИЯ 769 НКА -и мн род -... текст свёрнут, показать
     
  • 6.71, Аноним (71), 20:33, 27/10/2019 [^] [^^] [^^^] [ответить]  [] []     [к модератору]
  • +/
    > другие же, наоборот, поверив в diversity, достигают реальных высот...

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

     
     
  • 7.81, OpenEcho (?), 22:03, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +1 +/
    Если вы собираетесь всю жизнь кодить только на любимом языке до старости и у вас... большой текст свёрнут, показать
     
  • 6.83, SOska (?), 22:11, 27/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    Массой goto... ну че сообщиш торвалдсу что его код уг?
     
     
  • 7.93, OpenEcho (?), 22:40, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +4 +/
    > Массой goto... ну че сообщиш торвалдсу что его код уг?

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

    Я говорил, что видел людей, которые на полном серьезе писали АРМ ГУИ (под дос) для электростанций, что то типа:

    printf("%s\n","someshit");L1:printf("%s","-------");if(i++<x) {goto L1;}else{goto L2;}; other_shit();

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

     
  • 4.21, Аноним (9), 13:25, 27/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • –3 +/
    С того, что заевляется, что  Haxe - реализация ECMAScript.
     
     
  • 5.24, Аноним84701 (ok), 14:13, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +3 +/
    > С того, что заевляется, что  Haxe - реализация ECMAScript.

    Где и кем заёвляется? Анонимом?
    https://haxe.org/documentation/introduction/language-introduction.html
    > The Haxe Programming Language was designed to be simple yet powerful. Its syntax largely follows the ECMAScript standard, but deviates where necessary.

     
     
  • 6.37, Аноним (9), 16:09, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • –2 +/
    Вот-тут - absolutely unnecessary.
     
  • 3.22, Аноним (9), 13:26, 27/10/2019 [^] [^^] [^^^] [ответить]  [] []     [к модератору]
  • +5 +/
    >одинарные кавычки — ВНЕЗАПНО тоже без интерполяции, делают ровно ТО ЖЕ, что и двойные

    Нет, не ровно. В двойных не надо одинарные эскейпить. В одинарных не надо эскейпрть двойные.

     
     
  • 4.28, SOska (?), 15:06, 27/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +8 +/
    Нанотехнологии
     
     
  • 5.39, Аноним (9), 16:10, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • –1 +/
    Что сказать-то хотел?
     
  • 4.61, НяшМяш (ok), 18:46, 27/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • –1 +/
    Прямо как в баше.
     
     
  • 5.136, Аноним (136), 17:14, 28/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +1 +/
    Не, в баше же двойные кавычки с интерполяцией, а одинарные без
     
  • 3.121, Аноним (121), 10:13, 28/10/2019 [^] [^^] [^^^] [ответить]  [] []     [к модератору]
  • +1 +/
    > 1) двойные кавычки — без интерполяции
    > 2) одинарные кавычки — ВНЕЗАПНО тоже без интерполяции, делают ровно ТО ЖЕ, что и двойные

    Так известно почему так. Потому что некоторые в HTML-е юзают одинарные, а кто-то двойные. Здесь ' или " равносильны. Вот тебе один кейс, почему так. Не вижу причин для паники

     
     
  • 4.125, КО (?), 10:36, 28/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    >Потому что некоторые в HTML-е юзают одинарные, а кто-то двойные.

    А некоторые и те и другие '"' или "'".

     
  • 3.143, Аноним (143), 21:22, 28/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    > Haxe:
    >
    > 1) двойные кавычки — без интерполяции
    > 2) одинарные кавычки — интерполяция

    То есть ровно наоборот по сравнению с shell, perl, ruby, groovy, php и ещё кучей ЯП? Потрясающее решение!

     

  • 1.11, Аноним (11), 11:18, 27/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  [] []     [к модератору]
  • –2 +/
    > поддерживается трансляция в С++
    > имеет простую интеграцию с C

    Может, сразу на C/C++ писать?

     
     
  • 2.12, Аноним (11), 11:19, 27/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • –4 +/
    В том числе и веб на Wt.
     
     
  • 3.109, Аноним (109), 03:55, 28/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Да нет никаких проблем. Делаешь импорт себе APR и начинаешь использовать Memory Pool и Reference count и все отлично. А зачем тащить отдельно какой-то набор библиотек да еще и написанных так себе мне вот не совсем понятно.
     
  • 2.25, Аноним84701 (ok), 14:19, 27/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    >> поддерживается трансляция в С++
    >> имеет простую интеграцию с C
    > Может, сразу на C/C++ писать?

    Может, лучше не быть ламером и писать сразу опкоды?


     
     
  • 3.29, SOska (?), 15:07, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • –1 +/
    Да
     

  • 1.16, Аноним (15), 12:07, 27/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  []     [к модератору]
  • +/
    Чисто академическая ценность?
     
  • 1.17, Аноним (18), 12:21, 27/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  []     [к модератору]
  • +/
    Какой смысл транслировать в C#, если можно в il код?
     
     
  • 2.20, Эх (?), 12:52, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +2 +/
    Не разбираюсь, но из минусов: нельзя будет делать вставки на шарпе и работать код будет немного медленее без всех оптимизаций, что дает C# компиль. А так, скорее нет смысла все перепиливать для подобного таргета.
     

  • 1.23, Аноним (23), 13:54, 27/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  []     [к модератору]
  • +1 +/
    И какие программы на этом есть в линуксовых репах?
     
  • 1.27, ogmy (ok), 15:04, 27/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  []     [к модератору]
  • +30 +/
    Двадцать лет читаю OpenNet.
    Это занятие уже могло бы детей заводить.
    В 2019 решил завести аккаунт что впервые что то написать.

    С каждым годом сообщество все больше превращается в стадо безмозглых упырей с одной извилиной.
    Хаем все почем зря хотя сами ни хрена не понимаем.
    JS говно, PHP говно, С++ говно, новый язык программирования(технология) говно.
    Зачем конструктивная критика если любой писюн знает волшебное слово!

    Если бы весь мир был бы как текущее сообщество, с таким развитием мы бы до сих пор с палками бегали по лесам.
    Благо не все такие, но адекватные люди просто тонут в море дураков.

    Если вы не писали на языке или не использовали технологию в течении хотя бы пяти лет просто захлопните варежку.
    Вы не понимаете о чем говорите!

     

     ....большая нить свёрнута, показать (52)

  • 1.44, Аноним (44), 16:36, 27/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  [] []     [к модератору]
  • +1 +/
    Вопрос, зачем сабж если есть Rust?
     
     
  • 2.47, Аноним (47), 17:07, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    На нем можно таргет в раст запилить
     
  • 2.66, a3k (?), 19:03, 27/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +1 +/
    Rust слишком специфичный. А сабж -- это просто JS, только нормальный.
     
     
  • 3.111, Аноним (111), 06:07, 28/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +1 +/
    JS который генерирует cpp -> нативные бинарники.
     
  • 2.158, ммнюмнюмус (?), 23:22, 30/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    Зачем куча спец-языков, когда есть супер-язык, из которого остальные генерятся =)
     

  • 1.46, Аноним (47), 17:06, 27/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  [] []     [к модератору]
  • –1 +/
    Годнота
    использую для пэхэпэ
    Таргет на перл бы запилилли ещё
     
     
  • 2.51, JL2001 (ok), 17:19, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    >  использую для пэхэпэ

    вы прогаете на Haxe и компилите в php? можете рассказать почему компилите именно в php и как вообще изначально выбрали Haxe для разработки?

     
     
  • 3.56, Аноним (55), 18:02, 27/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +2 +/
    Я не тот Аноним, но предположу что он пишет на нормальном языке из сабжа, а транслирует в лапшичный пхп.
     
     
  • 4.62, JL2001 (ok), 18:54, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > Я не тот Аноним, но предположу что он пишет на нормальном языке
    > из сабжа, а транслирует в лапшичный пхп.

    да, я так и думал
    мне интересны причины выбора этого языка для исходников и php для цели исполнения

    предполагаю что у них на php большое и переиспользуемое наследство

     
  • 3.69, Эх (?), 19:15, 27/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +1 +/
    Тоже другой, но может кому будет интереснен недавний доклад по haxe/php, или слайды из описания ролика полистать:
    https://youtu.be/IeXgTkh9NAs
    Если кратко, то там общий код между php сервером и c#/js клиентами. Остальное перечисление фич языка и особенности реализации трансляции. Почти идентичная презентация на русском здесь:
    https://youtu.be/K-37iSCV13o
     
  • 3.161, Аноним (161), 19:44, 09/11/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    дак потомучто php это популярный язык - для решения бизнес задач а следовательно зарабатывания денег

    сам пишешь на нормальном статически типизированном языке - а заказчику отдаешь результат в виде php кода

    к тому же из haxe в js можно транслировать -  и шарить некоторую бизнес логику

    т е получется практически фулстек на haxe

     
  • 3.162, Аноним (161), 19:59, 09/11/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > и как вообще изначально выбрали Haxe для разработки?

    когда были попытки найти бесплатный инструмент для програния под flash платформу на linux
    а там еще появлялся типа adobe air, js и все дела
    а там как раз появился таргет под php - ну и решил а что бы не попробовать
    этот чудесный "один язык для всего"

    успел попрогать под flash, расширения на js под firefox (во времена ), всякую вебню транслируемую в Php

     
     
  • 4.163, Аноним (161), 20:01, 09/11/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    *расширения на js под firefox (во времена XUL)
     

  • 1.73, Аноним (44), 20:59, 27/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  [] []     [к модератору]
  • +/
    offtop: смотрю исходники gcc 9.2 и не могу найти место кодогенерации.
    Вопросы:
    - gcc генерирует машинный код или он генерирует ассемблер который скармливает gas?
    - если первое то где в исходниках gcc 9.2 место кодогенерации?
     
     
  • 2.75, Аноним (45), 21:20, 27/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +1 +/
    gimple нашёл?
     
     
  • 3.96, Аноним (44), 23:02, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Да, нашёл, спасибо. gimple я так понимаю строит IR, если так то где именно IR переводиться в машинный код?
     
     
  • 4.99, Аноним (44), 23:12, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +1 +/
    У меня такое ощущение, что там из IR создаётся код на ассемблере и потом скармливается gas.
    Исходники по адресу gcc/config/i386/gas.h и т.п. подобный файл намекают на это.
     
  • 4.108, Аноним (108), 02:45, 28/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +4 +/
    Код GIMPLE переводится в архитектурно-зависимый RTL. После пары десятков проходов он достаточно прямолинейно конвертируется в код для ассемблера, за вывод отвечают final.c и insn-output.c, генерируемый программой genoutput.c из архитектурно-зависимых определений в config/.
    Читайте документацию: https://gcc.gnu.org/onlinedocs/gccint/RTL-passes.html
     
     
  • 5.134, Olololo (?), 15:01, 28/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • –1 +/
    Т.е. как я в первом посте и сказал написал, gcc генерирует листинг ассемблера и скармливает его gas.
    Можно было просто ответить - да, и не писать эту простыню.
     
  • 2.78, Ordu (ok), 21:24, 27/10/2019 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • –1 +/
    Я лет десять не интересовался как работает gcc, и с тех пор я мог всё забыть и перепутать. Но насколько я помню, gcc генерировал промежуточный код, который затем скармливался бэкэнду. Примерно так, как это делает llvm сейчас, только у gcc'шного промежуточного кода вроде не существовало бинарного кодирования, при выводе он кодировался в ascii-представление по типу языка ассемблера. То есть, llvm ничего нового не сделал, он просто чуть больший акцент поставил на промежуточном представлении.

    Ну и собственно, если бы я пытался найти кодогенерацию в gcc, то я первым делом задался бы вопросом что именно я ищу. Потому что если мне интересны те места, где gcc выводит x86_64 или ARM инструкции, то это надо искать в бекэнде, а если мне интересно где gcc генерит промежуточное представление, то наверное надо начать с какого-нибудь фронтенда, там по-любому должны быть вызовы каких-нибудь функций gcc, не зависящих от фронтенда/бекенда, которые создают структуры данных, соответствующие промежуточному представлению. Даже более того, в этом случае я бы начал с чтения документации к gcc, потому что там должно быть что-то (может быть промежь опций компилятора), что позволяет получать это промежуточное представление в текстовом виде, и если найти код выводящий это промежуточное представление, то скорее всего там где-нибудь рядом будет код, создающий это промежуточное представление.

     
     
  • 3.97, Аноним (44), 23:08, 27/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • –1 +/
    Комментарий большой, но по сути ни о чём и вот почему. Я спросил, где именно кодогенерация, чтобы вам было понятнее я просил где IR переводится в машинный код.
    Про архитектуру компиляторов я прочитал не одну книжку и в курсе про части при построении компиляторов - front-end, optimizer, back-end.
     
     
  • 4.104, Ordu (ok), 01:30, 28/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • –1 +/
    > Я спросил, где именно кодогенерация, чтобы вам было понятнее я просил где IR переводится в машинный код.

    Разве из моего ответа не очевидно, что это не очевидно?

    > Про архитектуру компиляторов я прочитал не одну книжку и в курсе про части при построении компиляторов - front-end, optimizer, back-end.

    И это тоже.

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

     
     
  • 5.115, Sw00p aka Jerom (?), 08:18, 28/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    >Я не могу заглянуть в твою голову и увидеть там прочтённые тобой книжки. Я вижу только то, что ты написал.

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

     
     
  • 6.133, Olololo (?), 15:00, 28/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Для таких дебилов, как ты и тот кому ты отвечал в моей фразе - "gcc генерирует машинный код или он генерирует ассемблер который скармливает gas?" было специально использованно слово - __машинный__.
    Только дебил мог рассказывать про генерацию IR на вопрос про генерацию машинного кода.
    IR != машинный код.
     
     
  • 7.137, Ordu (ok), 18:11, 28/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > было специально использованно слово - __машинный__.

    И что с того? Из использования слово "машинный" каким-то образом вытекает, что ты читал много книжек о компиляции и знаешь про существование аббревиатуры IR? Расскажи мне как я должен был рассуждать, чтобы придти к такому выводу, я всегда готов учиться новому. Как из твоего вопроса вытекает, что ты не ошибаешься в том, что именно тебе нужно из-за непонимания архитектуры gcc? Какие именно буквы должны были навести меня на понимание этого?

    Я использовал словосочетание машинный код ещё тогда, когда я не знал ничего про компиляторы, считал их инструментами для слабаков, и был уверен, что истинный программист должен писать на ассемблере со вставками машинного кода. Я не знал тогда про IR, а если бы узнал, то счёл бы это глупостью снижающей эффективность компиляции, стоящей на пути истинной оптимизации кода и безбожно жрущей процессорные такты. Что в твоём сообщении указывало на то, что ты не видишь мир так, как я видел его 20+ лет назад?

    > Только дебил мог рассказывать про генерацию IR на вопрос про генерацию машинного кода.

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

     
     
  • 8.142, Sw00p aka Jerom (?), 20:24, 28/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • –1 +/
    А чего еще с дебила взять, как не дебильно поставленный вопрос Есть что-то, и о... текст свёрнут, показать
     
     
  • 9.144, Ordu (ok), 23:45, 28/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Не, это совершенно нормальная история для людей Они произносят слова, вкладывая... текст свёрнут, показать
     
     
  • 10.147, Sw00p aka Jerom (?), 00:32, 29/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Для дебилов - да И он проявил это во всей красе Он задался вопросом, а получив... текст свёрнут, показать
     
  • 10.148, Sw00p aka Jerom (?), 00:36, 29/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    5 134, Olololo , 15 01, 28 10 2019 Вот тут его неадекватность и проявилась С... текст свёрнут, показать
     

  • 1.110, Аноним (111), 06:06, 28/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  []     [к модератору]
  • +1 +/
    Haxe это как Nim только лучше. У Nim совсем убогая стандартная библиотека, куча ограничений, постоянные грабли с "а данному методу нужен временный объект для результата, по другому кодогенерацию мы не смогли".
     
  • 1.112, Аноним (-), 07:22, 28/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  []     [к модератору]
  • +/
    зачем высокоуровневому языку выглядеть так страшно? В чем тогда профиты использования его вместо более низкоуровневых?

    Лучше бы какой нибудь питон с трансляцией во все подряд сделали

     
     
  • 2.164, Аноним (161), 20:04, 09/11/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    в haxe решили сделать мудрее - просто добавили трансляцию в  python
    чтобы ты мог писать на нормальном языке и транслировать в свой любимый язык
     
  • 2.165, Аноним (161), 20:10, 09/11/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    я писал на питоне с 2.4
    думал офигенный язык даже пусть появлялись несовместимости с 2.6, 2.7 - я все равно терпел и писал код переносимым
    но потом появилась третья не совместимая версия а потом еще и еще
    и я в итоге психанул  и ушел на php
     

  • 1.122, JL2001 (ok), 10:13, 28/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  [] []     [к модератору]
  • +/
    почему они не воспользовались llvm?
    там таргеты кодогенерации не для всего "трансляция в С++, HashLink/C, JavaScript, C#, Java, PHP, Python и Lua, а также компиляция в байт-код JVM, HashLink/JIT, Flash и Neko", но раз создали с нуля свои, то и в llvm создали бы
     
     
  • 2.130, Георгий (??), 13:08, 28/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +3 +/
    Когда Haxe зарождался (2005), LLVM еще плюшевый был.
    Emscripten стал известен только в 2011 году, судя по Google Trends (не знаю, когда появился).
     

  • 1.124, Skullnet (?), 10:24, 28/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  []     [к модератору]
  • +/
    По сравнению с Go хороший язык.
     
  • 1.126, Попугай Кеша (?), 10:41, 28/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  []     [к модератору]
  • +/
    Был у нас один чудик. 2012-й год. Хвалился Haxe. Умный такой. А по факту - был наркоманом. И еще любил переменные одной буквой называть. Разрабатывал он правда на JS/Node.JS. Видимо боялся, что его заменить могут, поэтому хотел сам разбираться в своем коде.
     
     
  • 2.166, Аноним (161), 20:13, 09/11/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    haxe это практически java только проще и с выводом типов

    хотя если нахерачить макросов и вставок js - да сложно разобратся будет

     
  • 2.167, Аноним (161), 20:15, 09/11/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    с другой стороны - на js можно еще больше лапши наделать

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

     

  • 1.150, qsdg (ok), 01:31, 29/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  [] []     [к модератору]
  • +/
    Какой язык лучше для кастомных DSL?

    То есть чтобы читалось почти как натуральный язык, но чтобы не нужно было писать свой парсер/транспилятор.

    Я слышал народ юзал Scala, кастомер даже не знал что это язык программирования. Какие ещё есть варианты?

     
     
  • 2.156, Аноним (143), 13:42, 29/10/2019 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > чтобы читалось почти как натуральный язык

    AppleScript.
    Да, это сарказм.

     

  • 1.151, Аноним (151), 01:49, 29/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  []     [к модератору]
  • +/
    JavaScript каким он должен быть.
     
  • 1.153, Денис Александрович (?), 07:11, 29/10/2019 [ответить] [﹢﹢﹢] [ · · · ]      [к модератору]
  • +/
    Как это я первые 3 релиза пропустил?!
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру