ulidtko 24.02.2012 21:20 уважением

Всю неделю вынашивал концепцию языка, совмещающего статическую и динамическую типизацию. Эксплуатирующего преимущества обоих парадигм, и защищённого от их недостатков.

И вот, сегодня мне рассказали про тип dynamic в C#.
http://msdn.microsoft.com/en-us/library/...

Похоже, пришло время взглянуть на mono поближе.

1. rtsome 24.02.2012 21:23

в статическом языке эмулировать динамику так сложно — просто охуеть.

2. ulidtkortsome /1 24.02.2012 21:26 уважением

да, тип TVariant в старом добром делфи меня сильно вдохновлял на эти размышления.

Но ты не путай эмуляцию через всякие костыли вроде QVariant с нативной поддержкой в языке. Прозрачной. С точно таким же синтаксисом вызова метода через точку, например. Да и вообще, с методами как таковыми — вместо указателей на функции. Это качественное отличие, я считаю.

4. rtsomeulidtko /2 24.02.2012 21:35

>костыли вроде QVariant с нативной поддержкой в языке
я не путаю, ибо в душе не ебу ни того ни другого.
просто мне совершенно очевидно как реализовать язык с динамической типизацией, и наверняка те два варианта именно так и выглядят.

5. ulidtkoulidtko /2 24.02.2012 21:44 уважением

C#'s principal designer and lead architect at Microsoft is Anders Hejlsberg, who was previously involved with the design of Turbo Pascal, Embarcadero Delphi (formerly CodeGear Delphi and Borland Delphi), and Visual J++.

ололололо.

6. gds 24.02.2012 21:56 umodni8819BA77

да, динамика иногда бывает полезна в статически-типизированных языках. Настолько, что мне пришлось реализовывать её для окамла. А вариантов особо не видел, разве что обмазываться кодогенерацией.
Среди целей было не столько "прозрачно вызывать методы", сколько 1. возможность присовывать в значения те методы, типы которых компилятор не знает на момент линковки библиотеки (что в простом случае нереально), 2. рантайм-интроспекция значений. Заодно почти нахаляву получил и различные [де]сериализации, работающие по структуре значения, способ заглянуть в значение, вытащить оттуда что-то, параметризованные типы (например, если известно, как отображать список значений в целом (например, "заключить в квадратные скобки и разделить элементы через " ; ""), и известно, как отображать конкретное значение, то можно отобразить список, содержащий эти значения, простым вызовом метода типа show).
Ну а дальше — пошло-поехало, вплоть до разбора урлов в индуктивный тип данных.
А вызов метода, да, непрозрачен. Как-то наподобие "(call_method2 "meth" type_obj type_arg1 type_arg2 type_res) obj arg1 arg2" вместо "obj#meth arg1 arg2", но при однотипности методов этот код пишется один раз, а используется везде при работе с методом. Можно было бы побороть синтаксис, сделав синтаксическое расширение, но пока я без них обхожусь, и всё реализовано средствами обычной библиотеки, в этом есть какая-то прелесть.

7. dorfe 24.02.2012 22:26

facepalm

8. dorfeulidtko /5 24.02.2012 22:28

очень быстро

9. jtootflHooFool /3 25.02.2012 00:56

аргументы?

11. ulidtko238328 /10 25.02.2012 11:21 уважением

спасибо, годнота

Do you really want to delete ?