LINUX.ORG.RU

GHC 8.0.1

 ,


4

8

Спустя 6 лет с момента релиза 7.0 выпущена новая версия компилятора языка Haskell — GHC 8.0.1.

Главные изменения:

  • Новое расширение DuplicateRecordFields, позволяющее использовать в различных типах поля с одинаковыми именами.
  • Поддержка превращения do-нотации в код, использующий класс Applicative вместо Monad.
  • Расширения Strict и StrictData, отключающие ленивое вычисление кода и данных соответственно в пределах модуля.
  • Поддержка инъективных (injective) семейств типов и рекурсивных суперклассов.
  • Улучшена генерация стектрейсов.
  • Новый генератор кода для платформы PPC64. Поддержка операционной системы AIX.
  • Улучшена поддержка платформы ARM.
  • Поддержка LLVM 3.7.
  • Новый аллокатор памяти для 64-битных платформ.
  • Добавлена поддержка пользовательских ошибок при проверке типов.
  • Windows XP более не поддерживается.

>>> Полный список изменений

>>> Подробности

★★★★★

Проверено: Shaman007 ()
Последнее исправление: Psych218 (всего исправлений: 5)
Ответ на: комментарий от EvgenijM86

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

и сейчас мы поймем почему

Представьте себе, например, описание 1000 NPC в игре, каждый из которых может иметь разное колличество полей.

Представил.. И мы делаем расширяемый record аналогичный или средствами vinyl или hlist, хоть с наследованием.

Ну тогда изучайте линзы и прочие сделанные на коленке вещи.

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

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

https://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-630004.1

Убедил, в IT используются толкования класса, отличные от оопэшного. Только вот из контекста начала срача однозначно следует, что использовалось оопэшное толкование.

(a+b)+c и a+(b+c) могут не совпадать в C++.

И тут ты такой приводишь пример, где не совпадает.

Но ты едва ли сможешь, ибо это только теоретически возможно, потому что singned overflow - UB. А это - банальная перестраховка на случай появления архитектур с какой-нибудь извращённой реализацией signed integer. На существующих же архитектурах сложение просто сведётся к его аппаратной реализации, в которой совпадает.

В Lisp и C++?

В Haskell. Насчёт Lisp и С++ - это к hateyourfeel, это он лепетал, что оопэшные классы попадают под определение классов из теории категорий.

Впрочем, цитату из Буча уже привели.

Забавно, что классы из Хаскеля не попадают даже под настолько общее определение.

«share a common structure and a common behavior.»

«common structure»

там самый общий случай — n-битное целое

Там в начале есть однозначное определение. В нём про константность и необходимость n ничего не сказано.

И чему равен n для бигнама?

n, очевидно.

Ты ссылки хоть просматривай

Просмотрел:

«n-bit integer (general case): standard libraries' or third-party arbitrary arithmetic libraries' BigDecimal or Decimal classes in many languages such as Python, C++, etc.»

«Some languages, such as Lisp, Smalltalk, REXX, Haskell, Python, and Perl 6 support arbitrary precision integers (also known as infinite precision integers or bignums).»

«a computer has only a finite amount of storage, so they too can only represent a finite subset of the mathematical integers»

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

A class is a set of objects that share a common structure and a common behavior.

Не, тот чтец мне обещал вычитать альтернативное определение из того же параграфа в википедии.

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

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

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

Оно и хаскелёвым классам не противоречит, в отличие от википедического.

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


Забавно, что классы из Хаскеля не попадают даже под настолько общее определение.

«share a common structure and a common behavior.»

«common structure»



Если «common structure» - это наличие методов соответствующих типов, а «common behavior» - соблюдение законов, то определение абсолютно точное.

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

оопэшные классы попадают под определение классов из теории категорий.

Я в этом треде про теорию категорий вообще ничего не писал. Ты всё ещё баклажан.

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

И тут ты такой приводишь пример, где не совпадает.

Некоторые компиляторы (в частности gcc при определённых флагах оптимизации) signed overflow трактуют как аварийное завершение программы.

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

«common structure» - это наличие методов соответствующих типов

Наличие методов - это даже на поведение не тянет.

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

Я в этом треде про теорию категорий вообще ничего не писал.

Ну дал маху маленько, из теории множеств.

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

Некоторые компиляторы (в частности gcc при определённых флагах оптимизации) signed overflow трактуют как аварийное завершение программы.

И тут ты такой приводишь пример, где (a + b) + c даёт завершение, а a + (b + c) - не даёт.

Esper
()
Ответ на: комментарий от Esper
#include <stdio.h>
#include <limits.h>

int main()
{
    int a = INT_MAX;
    int b = 1;
    int c = -2;

//    printf("%d\n", (a + b) + c);
    printf("%d\n", a + (b + c));

    return 0;
}

Компилировать вот так: gcc -ftrapv -O0 overflow.c

Если раскомментировать первый printf, ВНЕЗАПНО прилетит SIGABRT. Так что утрись и покинь тред уже.

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

Если раскомментировать первый printf, ВНЕЗАПНО прилетит SIGABRT.

И что из всего этого следует?

покинь тред уже.

Не, тут ещё много нерассказанных историй от кул-чтецов и кул-толкователей структуры. Да и время от времени прибегает очередной дурачок верещать «В Цацкиле есть классы!11».

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

И тут ты такой приводишь пример, где (a + b) + c даёт завершение, а a + (b + c) - не даёт.

/me привёл пример.

И что из всего этого следует?

Не знаю, ты мне скажи.

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

Не знаю, ты мне скажи.

Это monk начал противопоставлять сложение в IT и математике. Пусть он и рассказывает.

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

Ты заявлял что сложение int в C обладает ассоциативностью. Я показал что это не так.

Хотя, я вообще с трудом понимаю что ты тут несёшь. Наверное, ты шизофреник.

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

во тебе реально заняться нечем в этом треде)

anonymous
()

Кто на нем что пишет, чем он лучше php?

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

надо unsigned типы брать, signed integer overflow это UB

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

Скажите, можно ли на Хаскеле писать проги для десктопа?

Можно. Есть привязки к GTK и wxWidgets.

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

Поражаюсь твоему терпению. Зачем время тратишь на этих ничтожных утырков?

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

Уже вышла новая платформа Haskell Platform 8.0.1!

Ей кто-то пользуется? Когда выйдет LTS на 8.0.1, будет гораздо интереснее.

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

Я уже пользуюсь) Правда, distributed-process и Chart-diagrams не завелись, но кое-где я могу подождать пока на предыдущей версии платформы.

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

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