metaclass: (дзедline)
[personal profile] metaclass
http://juick.com/dmz/2163653
Алгебраические типы данных и сопоставление с образцом - то, чего дичайше не хватает в "мейнстримных языках".
В принципе, ничто не мешает закатить солнце вручную - например, написать мелкий кодогенератор, который будет из описания типа генерить код класса-типа и его наследников-вариантов и паттерн-матчинг на дельфи-C#-жабе-прочем. Но это элемент зла, проще уж F# использовать.

Date: 2012-12-13 01:18 pm (UTC)
From: [identity profile] iigoncharenko.livejournal.com
А еще бы рекурсивных типов данных...

Date: 2012-12-13 01:53 pm (UTC)
From: [identity profile] stop-nonsense.livejournal.com
А чем ADT не рекурсивны?

Date: 2012-12-13 02:04 pm (UTC)
From: [identity profile] iigoncharenko.livejournal.com
Пардон - это я Пирса (TAPL) начитался и еще не отошел...
А про "мелкий кодогенератор" - идея хорошая.
Вот только потом будет постоянно хотется его (мелкого) раскормить до размеров Слона, запихать туда тайпчекер, оптимизатор посредством rewrite-rules, deforestation на их основе и т.д.
P.S. Когда смотрю на Хаскель, SQL Server (с его оптимизацией плана исполнения), DataFlow/MapReduce у современных вычислительных гридов, то понимаю, что в центре - одна и та же идея...

Date: 2012-12-13 03:19 pm (UTC)
From: [identity profile] volodymir-k.livejournal.com
Не знаю, интересно ли вам, но вообще-то
"алгебраические" типы легко эмулировать например обычными классами (или например в Яве енум-классами),
а "сопоставление" -- обычные if(x instanceof X).

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

Date: 2012-12-13 03:29 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Да, я так и эмулирую. Поэтому я и упомянул кодогенератор - код в таком случае достаточно повторяющийся, можно генерировать.

Date: 2012-12-14 08:28 am (UTC)
From: [identity profile] jakobz.livejournal.com
В C# еще можно юзать оверлоады + dynamic. Типа
void Print(int n) { Console.Write(n.ToString()); }
void Print(string s) { Console.Write(s); }

Print((dynamic) something)

Но это все неудобно и не совсем то.

Date: 2012-12-14 08:29 pm (UTC)
From: [identity profile] volodymir-k.livejournal.com
в 8-й явке введут новый байткод и оптимизацию dynamiccast щобы от моды не отставать

это как раз то самое, но место выполнение case оператора выносится в отдельный метод (к тому же с именем, которое надо придумывать и писать)

однако в явке уже с 6 можно писать свои классы (со своими методами) прямо посреди блока кода, так что можно далеко не ходить

но зачем это всё, если уже есть скала и там всё хорошо

Date: 2012-12-13 04:18 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
А визитор паттерн привинчивать ко всей подряд хрени?

Date: 2012-12-13 05:56 pm (UTC)
From: [identity profile] 4da.livejournal.com
в LLVM кстати так сделано.

Date: 2012-12-17 11:11 am (UTC)
From: [identity profile] iigoncharenko.livejournal.com
А смотрел ли кто-нибудь на следующее ?
1. jADT (Java Algebraic DataTypes)
2. FunctionalJava - fj.data
3. ohl (Project ohl - Охламон на googlecode)

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 16th, 2025 03:25 am
Powered by Dreamwidth Studios