|
Новый язык программирования Nemerle (май 2011 г.) | ☑ | ||
---|---|---|---|---|
0
Stagor
04.08.11
✎
13:24
|
Кто-нибудь применял или хотя бы ознакомился?
wiki:Nemerle |
|||
5
Мулька
04.08.11
✎
13:28
|
(3) Асемблером на ЕС ЭВМ игрался
|
|||
6
quest
04.08.11
✎
13:28
|
(0) открой для себя Лисп (причем любой - от cl до clojure)
|
|||
7
aka AMIGO
04.08.11
✎
13:30
|
(5) ммм.. и я тоже что-то писал, это вторая фаза, ЕС :)
но основной мой в то время был КОБОЛ :) считал зарплату в ящике :) |
|||
8
Ненавижу 1С
гуру
04.08.11
✎
13:33
|
(0)там есть неопределено?
|
|||
9
andrewks
04.08.11
✎
13:33
|
(0) и какой с него профит?
|
|||
10
aka AMIGO
04.08.11
✎
13:35
|
=9 да, и интересно, каждый язык слегка объектно-ориентированный..
куда этот ориентирован? :) зы вику читать лень.. :) |
|||
11
andrewks
04.08.11
✎
13:35
|
(10) ты хотел сказать: предметно-... ?
|
|||
12
aka AMIGO
04.08.11
✎
13:37
|
(11) угу, конечно :)
|
|||
13
wade25
04.08.11
✎
13:37
|
(0) На данный момент нет интеграции LINQ, только через небезопасный код в C#, но это бредого и никому не нужно =)
ИМХО языку уже 5 лет, а он до сих пор для многих как новинка. F#, вроде классный, удобный, с большим количеством уже написаных полезных библиотек, но... |
|||
14
aka AMIGO
04.08.11
✎
13:41
|
C# с двадцатилетними (если не больше) традициями, мощнейший язык, по возможностям ему равных нет.. достаточно знать один.. имхо, конечно..
и уж конечно, библиотеки непревзойденные.. всё равно по умолчанию интеграция с в него.. |
|||
15
ДенисЧ
04.08.11
✎
13:42
|
Вот вам про него, изучайте...
http://www.rsdn.ru/forum/nemerle/ |
|||
16
Stagor
04.08.11
✎
13:42
|
(3) Да! На Бк-0010, но к чему вопрос то?
(9) Вот: Ряд языковых средств кардинальным образом отличает Nemerle от C#, Java, C++. Это макросы и замыкания, причём в виде, более характерном для Lisp или других функциональных языков, нежели для С++. Система макросов позволяет описывать на Nemerle новые синтаксические конструкции и использовать их наравне со встроенными. В действительности, большинство директивных управляющих конструкций, в том числе операторы if, when, циклы всех видов, реализованы в виде макросов стандартной библиотеки Nemerle. |
|||
17
wade25
04.08.11
✎
13:44
|
(14) Лол, C++ по возможностям делает C#...
Хотя по технологиям шарпей вырывается, но эт уже политика майкрософт( |
|||
18
Господин ПЖ
04.08.11
✎
13:45
|
>или хотя бы ознакомился?
накуа? их уже вагон, языков этих |
|||
19
andrewks
04.08.11
✎
13:47
|
(16) макросы? и чё? даже на древнющих ассемблерах макросы были
|
|||
20
aka AMIGO
04.08.11
✎
13:47
|
(17) я имел в виду именно CPP, так у меня домашний дистрибутив называется.. а еще есть TurboC, близкий родич :)
|
|||
21
Krendel
04.08.11
✎
13:47
|
(14) Не буду утверждать, но вот понятие "мощный" относится как раз к языкам более низкого уровня характеризуя возможность реализации большего спектра задач. Если я не прав поправьте
|
|||
22
Stagor
04.08.11
✎
13:50
|
(19) Можно управляющие конструкции свои создавать
типа "if () {} else {}" и свой синтаксис, в отличии от С++ и С# |
|||
23
Господин ПЖ
04.08.11
✎
13:51
|
(22) и накуа это? чтобы запутаться в конец?
false = true true = false счастливой отладки? |
|||
24
aka AMIGO
04.08.11
✎
13:52
|
(22) они все утяжеляют конечный код..
а это всё = время реакции программного модуля |
|||
25
andrewks
04.08.11
✎
13:54
|
круче классов и подсистем/библиотек трудно, наверное, что-то придумать.
следующий прорыв - AI, прямо перед бунтом машин :) |
|||
26
wade25
04.08.11
✎
13:54
|
(24) Угу, получется, сначала раскодирует макросы, потом, в мсил, потом в джит и далее -->
Хотя, механизм преобразования в промежуточный я читал, никак на производительность не влияет... |
|||
27
Stagor
04.08.11
✎
13:54
|
(24) 1С8 в этом далеко продвинулся!
|
|||
28
Stagor
04.08.11
✎
13:55
|
(25) Это только задержка во время компиляции!
|
|||
29
Stagor
04.08.11
✎
13:55
|
вот, что мне ещё понравилось, но это есть и в других языках (в 1С нет)
Наличие локальных функций (лексических замыканий). Функция является полноправным объектом, то есть может быть сохранена в переменной, передана в качестве аргумента в другую функцию или возвращена из функции. |
|||
30
andrewks
04.08.11
✎
13:55
|
(28) чо?
|
|||
31
andrewks
04.08.11
✎
13:56
|
(29) и чо? тупо через класс реализуешь, в чём профит-то?
|
|||
32
Stagor
04.08.11
✎
13:58
|
(30) развертка макроса в момент компиляции. в момент выполнения все работает быстро!
|
|||
33
Stagor
04.08.11
✎
13:58
|
(31) Класс нельзя сделать в момент выполнения программы!
|
|||
34
andrewks
04.08.11
✎
14:00
|
будущее - за кросс-платформенными, легко портируемыми решениями, и за предметно-ориентированными языками
и, кстати, по какой лицензии он идёт? |
|||
35
Stagor
04.08.11
✎
14:02
|
(34) "по какой лицензии он идёт" - не знаю!
"за предметно-ориентированными языками " - скорее всего да. Каждая компания будет делать свой ЯП и ОС! Гугл (язык Go, ОС: Android, Crome, Соц сеть G+, поисковик Google) |
|||
36
Rabbit
04.08.11
✎
14:04
|
(14)(17) Python сделает и того и другого, если говорить о прикладном уровне.
|
|||
37
andrewks
04.08.11
✎
14:11
|
дык он .NET требует. и в чём соль?
|
|||
38
wade25
04.08.11
✎
14:20
|
(37) Там написано, поддерживает моно =)
|
|||
39
Ненавижу 1С
гуру
04.08.11
✎
15:04
|
(14) Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как язык разработки приложений для платформы Microsoft .NET Framework и впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270.
|
|||
40
Pasha
04.08.11
✎
15:17
|
(0) Как говорится...сами придумали - сами пускай и кодят :) А нам и 1С сойдет :)
|
|||
41
IKSparrow
04.08.11
✎
15:22
|
(0) Любишь "новенькое"? Обрати тогда свой взор в сторону Forth. Вот это отличный инструмент. А всё остальное фигня.
|
|||
42
IKSparrow
04.08.11
✎
15:23
|
+(41) Собственно, всё что в Немерли, было придумано ещё до него в Форте.
|
|||
43
Stagor
05.08.11
✎
13:49
|
(41) Форт я знаю, программировал на Форт-79, даже писал интерпретатор Форта в качестве курсовой в институте.
Был ещё калькулятор MK-61 и МК-52 там язык был, по идеологии, Форт! Только Форт неудобный, как и Лисп. Хотя от этих языков все "современные" фишки в языках типа C# 4.0 и плагин R# |
|||
44
Rabbit
08.08.11
✎
02:21
|
Заколебали вы своим Фортом. Устарел он.
|
|||
45
Злопчинский
08.08.11
✎
03:02
|
Приходилось.. армейские спецвычислители эпзодически, ассемблер на ЕС ЭВМ вовсю в хвост и гриву, своя "ОС", кросс-ассемблер, алгол вовсю...
. от ассемблера ЕС остались самые положительные впечатления... где бы еще эмулятор найти... . |
|||
46
Злопчинский
08.08.11
✎
03:04
|
(41) у нас парень в группе на Forth налабал компилятор для PL/1 - работали на док-станциях ЕС7970 (это те, что пришли на смену 7920)
|
|||
47
Rie
08.08.11
✎
05:30
|
(43) Forth сам эти "современные фишки" заимствовал - у того же Лиспа :-)
|
|||
48
Rie
08.08.11
✎
05:32
|
(42) Отличных инструментов не бывает. Бывают отличные инструменты для чего-то.
А за пределами "гибкий язык для микроконтроллеров" - какой кайф от Forth? |
|||
49
Rie
08.08.11
✎
05:34
|
(13) Поскольку F# цепляется к .NET, библиотек у него примерно столько же, сколько и у любого другого.
|
|||
50
IVIuXa
08.08.11
✎
05:34
|
(17)
гыыы сравнил напиши web приложение на с++ |
|||
51
Rie
08.08.11
✎
05:36
|
(17) Что значит "делает"? Все языки эквивалентны, вопрос только в удобстве для конкретной задачи.
|
|||
52
Rie
08.08.11
✎
05:38
|
(9) Основной профит - довольно аккуратно сочетаются императивная и функциональная парадигмы + развитые макросредства.
|
|||
53
IVIuXa
08.08.11
✎
05:45
|
(52)
ну вот маты пошли... :) |
|||
54
Rie
08.08.11
✎
05:54
|
(53) Это одобрительные маты :-)
|
|||
55
sergeante
08.08.11
✎
10:15
|
лучше б водки выпили!
|
|||
56
Ненавижу 1С
гуру
08.08.11
✎
10:18
|
(51) почему эквивалентны?
SQL эквивалентен C#? |
|||
57
Rie
08.08.11
✎
10:20
|
(56) Потому что все они - не более чем разукрашенная машина Тьюринга (или её эквиваленты).
|
|||
58
ДенисЧ
08.08.11
✎
10:28
|
(57) Ага? SQL - тоже машина Тьюринга? Чистый скуль, разумеется?
|
|||
59
GoldenDawn
08.08.11
✎
10:33
|
все вы будете писать на том за что будут платить
хоть на 1с хоть пальцем на заборе |
|||
60
Rie
08.08.11
✎
10:34
|
(58) "Совсем чистый" SQL - нет. Но его и языком программирования назвать - рука не подымается.
А вот если дать ему хотя бы одну точку опоры... |
|||
61
Rie
08.08.11
✎
10:35
|
(59) А это уже вполне решаемая задача - убедить заказчика в том, что писать надо именно на вот этом, иначе не взлетит, а падая - пришибёт.
|
|||
62
Steel_Wheel
08.08.11
✎
11:02
|
Коллеги, а объясните: что такое есть LINQ и чем лучше SQL?
|
|||
63
Rie
08.08.11
✎
11:03
|
(62) LINQ - расширение C# для работы с наборами данных (не обязательно SQL - можно массив, можно своё что-нибудь хитровывернутое).
|
|||
64
Shurjk
08.08.11
✎
11:16
|
(0) А для чего он почитал в вики про него, не нашел никаких специализаций.
|
|||
65
Rie
08.08.11
✎
11:21
|
(64) Так он общего назначения. Как, к примеру, C#.
|
|||
66
Steel_Wheel
08.08.11
✎
11:23
|
Я просто недавно ASP .NET MVC ковырял, там в примере сайт связывался с SQL базой данных, а все запросы были через LINQ. Вот я и задумался: почему бы не использовать нативные запросы, а именно LINQ в этом случае
|
|||
67
Rie
08.08.11
✎
11:27
|
(66) Не знаю, как в конкретном примере. Но в общем случае LINQ позволяет ваять более сложные запросы, к тому же аккуратно встраивается в язык на предмет типизации и т.п. Ну и обращаться можно не только к SQL - например, можно к XML-дереву запрос составить.
|
|||
68
Steel_Wheel
08.08.11
✎
11:30
|
Надо будет почитать на досуге
|
|||
69
Shurjk
08.08.11
✎
11:36
|
(65) Чем тогда C# не устраивает?
|
|||
70
Rie
08.08.11
✎
11:40
|
(69) C# движется постепенно в том же направлении, IMHO. Но до Nemerle (опять же, IMHO) двигаться будет ещё довольно долго, тщательно обеспечивая совместимость с предыдущими версиями.
Мне мультипарадигменные гибриды (вроде Nemerle или того же Scala) кажутся очень удобными (как минимум сильно сокращают ненужную писанину). Проблема в том, что для них пока мало чего есть. |
|||
71
Shurjk
08.08.11
✎
11:55
|
(70) Вот в этом то и вопрос будут ли их развивать. Мне кажеться особого смысла в их развитии нет.
|
|||
72
Rie
08.08.11
✎
12:44
|
(71) Смысл-то есть. Другое дело - есть ли ресурсы? Microsoft вбухал кучу средств в C# - он и будет дальше двигать C#, тем более, что сделан C# неплохо, и на этой базе можно его спокойно расширять протестированными на всяких Nemerle и т.д. возможностями.
С другой стороны, .NET (или JRE, если кому потребуется) - им ведь безразлично, из какого языка к ним обращаться. И тот же Nemerle мог бы стать базой для семейства DSL, причём не кастрированных, как 1Сик, а весьма развитых. Ну и как пример - та же Scala, если верить http://www.langpop.com/ потихоньку добралась до популярности Forth. |
|||
73
Stagor
08.08.11
✎
16:09
|
(70) "(как минимум сильно сокращают ненужную писанину)"
многие так говорят, но пусть приведут пример кода, где на C# он занимает больше, а на Nemerle в 4 раза меньше или на том же Scala? Нигде не видел подобного сравнения! |
|||
74
Rie
08.08.11
✎
16:15
|
(73) Код HelloWorld на всех языках будет иметь примерно один и тот же размер.
Однако ты же не станешь возражать, что код на C# можно значительно сократить после того, как в C# ввели ламбда-выражения с выводом типов? |
|||
75
Stagor
08.08.11
✎
16:28
|
(74) Это не пример!
Вот, пример: Допустим есть задача - найти все комбинации 8-ми ферзей на шахматной доске, что бы ферзи не угрожали друг другу! Если на Nemerle или Scala или F# этот код будет в 4 раза в рамках этой задачи, чем на C# / LISP или тот же Форт! А, то каждый хвалит свой язык, а как до практики дело - то на всех языках эта задача решается одинаково! |
|||
76
Rie
08.08.11
✎
17:01
|
(75) Почему это не пример? В C# постепенно добавляют возможности из функциональных языков. И я показал, что введение в C# ламбды и type inferring сокращает код. Это как раз совсем чистый пример - демонстрация сокращения кода за счёт некоторой возможности на примере одного и того же языка.
Вот строка кода: transform.onSourceNameChanged += (obj, args) => { toolStripTextBoxSourceName.Text = args.Data; }; Перепиши её на C# 2.0 - и посмотри, насколько _удлинится_ код. Придётся описать класс делегата, функцию для делегата - с явным указанием типов параметров, создать делегата... Выше я писал, что C# постепенно приобретает возможности функциональных языков. И вполне возможно, что какая-нибудь версия C# 18.0 будет во всех отношениях удобнее того же Nemerle. Но пока что - этого нет. |
|||
77
Steel_Wheel
08.08.11
✎
17:08
|
(76) Так делегат же в любом случае должен будет. Или я не прав?
|
|||
78
Steel_Wheel
08.08.11
✎
17:09
|
имею в виду, что должен быть делегат с такой же сигнатурой, как у лямбда-функции
|
|||
79
Rie
08.08.11
✎
17:26
|
(78) Естественно, класс делегата был где-то описан - без него нельзя было бы построить описание класса.
Но не надо вспоминать, как там называется второй тип функции, не надо описывать функцию и выдумывать ей имя, не надо выписывать new ПолезтьПосмотретьКакТамНазываетсяТипДелегата(...) и т.д. Скажем, в Java меня сильно раздражают обработчики событий тем, что посреди несложного текста появляется объект анонимного класса, реализующего какой-то там интерфейс, с описанием соответствующего метода. Понятно, что всё это - просто синтаксическое неудобство. Но сначала приходится всё это писать, а потом - читать. |
|||
80
Rie
08.08.11
✎
17:31
|
+(79) Кстати, класс делегата описан потому, что transform - объект моего класса. Если бы это был системный класс, то описание было бы "где-то", так что ещё на одну строку было бы короче.
|
|||
81
Stagor
09.08.11
✎
10:49
|
(76) Этот код не выполняет ничего полезного.
Вот я и предложил сделать задачу о 8 ферзях. С помощью Nemerle, и что бы кода было меньше, чем хотя бы в обычном Си, и хотя бы раза в 2. |
|||
82
Stagor
09.08.11
✎
10:50
|
А то делегаты, объекты, лямда-функции - все это абстракции. Давайте сделаем конкретный пример.
Думаю в рамках задачи о 8 ферзях на Си будет самое компактное решение без всяких объектов! |
|||
83
Rie
09.08.11
✎
10:53
|
(76) Эта строка выдернута из конкретного проекта, и заверяю - она там не просто полезна, а необходима.
(82) Бесспортно. HelloWorld имеет примерно один и тот же объём на любом языке. |
|||
84
Stagor
09.08.11
✎
11:02
|
(83) Каждая строка выдернута из какого-нибудь контекста. Каждая строка в этом контексте просто необходима.
При чем тут "HelloWorld", я вам говорю про задачу о 8-ми ферзях. Вполне конкретная задача по программированию с поиском. |
|||
85
Rizhij_Nikitos
09.08.11
✎
11:23
|
О чем вы спорите?!?!?! 1С - ЛУЧШЕ ВСЕХ!!!
|
|||
86
Rie
09.08.11
✎
11:29
|
(84) А намного ли сложнее задача о 8 ферзях, нежели HelloWorld? Пара десятков строк - хоть на функциональном, хоть на императивном языке программирования.
Вот, к примеру, Haskell (самый "чистый" функциональный язык программирования на сегодня): is_in _ [] = False is_in a (x:xs) | a == x = True | xs == [] = False | True = is_in a (xs) diag_transform board func = [func x y | (x, y) <- zip board [0..]] valid_pos p g board | is_in p board = False | is_in (p+g) (diag_transform board (+)) = False | is_in (p-g) (diag_transform board (-)) = False | True = True new_board g size board = [board ++ [x] | x <- [0..(size-1)], valid_pos x g board] add_board [] = [] add_board (x:xs) = x ++ add_board xs trans_board g size boards_list = add_board [new_board g size x | x <- boards_list] queens_rec g size pos_list = if g == size then pos_list else queens_rec (g+1) size (trans_board g size pos_list) queens board_size = queens_rec 1 board_size (new_board 0 board_size []) Что видим? А то, что _для данной задачи_ любые более-менее мощные механизмы попросту не нужны - в силу простоты задачи. Ты сам говоришь - "безо всяких объектов". |
|||
87
Reset
09.08.11
✎
11:30
|
(84) Ты как древний человек, утверждающий что молоток лучше ноутбука, потому что им гвоздь забить удобнее. Какие вычисления? Давайте конкретную полезную задачу решим - забить гвоздь!
|
|||
88
Reset
09.08.11
✎
11:31
|
(86) Не получится у вас диалога... уровень ваш отличается слишком.
|
|||
89
Rie
09.08.11
✎
11:40
|
(88) Не заметил разницы уровней. Вижу только разные точки зрения.
И с тем, что "8 ферзей" на C (даже не на C++) писать ничуть не хуже, чем на C#, Nemerle или Haskell - полностью согласен. И могу ещё кучу задач назвать (причём вполне реальных и объёмных), для которых C - лучшее, что можно найти. |
|||
90
Cthulhu
09.08.11
✎
11:46
|
(47): теплое с мягким.
(86): а теперь на brain... :)))) |
|||
91
Reset
09.08.11
✎
11:59
|
(89) Я к тому, что ты его понимаешь, а он тебя - нет.
|
|||
92
Stagor
09.08.11
✎
12:11
|
(91) С чего ты взял, что не понимаю? Понимаю.
Чисто вычислительные задачи можно писать сплошняком на любом языке. Все языки одинаково неудобны для таких задач. Для задачи о 8-ми ферзях подошел бы предметно-ориентированный язык, который оперировал фигурами (в данном случае ферзями) и расположением на доске. Программа бы была записана примерно так: Расположить Ферзь(8) условие (Каждый Ферзь(_) != Угроза) |
|||
93
Rizhij_Nikitos
09.08.11
✎
12:12
|
(90)>+++[>++++++++++<-]>.
|
|||
94
Rie
09.08.11
✎
19:28
|
(92) Для любой задачи лучшим был бы соответствующий предметно-ориентированный язык. Желательно - ориентированный именно на данную задачу. Тогда программа состояла бы ровно из одного оператора.
Однако такого не бывает - и приходится либо создавать DSL для этого класса задач "с нуля" или же надстраивать какой-либо из языков общего назначения. И тут уже интересны возможности языка общего назначения для такого расширения. В C единственным способом были функции, в C++ - появились классы. И т.д. |
|||
95
Mnemonic1C
09.08.11
✎
19:35
|
(94) Ну в С ещё были структуры (и есть), или я что то путаю?
|
|||
96
Rie
09.08.11
✎
19:42
|
(95) Были, конечно. И массивы, и объединения. Но я имел в виду возможность описывать понятия "предметной области".
|
|||
97
Steel_Wheel
10.08.11
✎
09:25
|
(95) Были, но в них методы нельзя было прописывать
|
|||
98
Stagor
10.08.11
✎
12:46
|
(94) Да! Думали, что вместо предметно-ориентированных языков будут просто свои библиотеки шаблонов С++ типа STL.
а вот и не вышло. (96) Не так то удобно описывать предметную область классами, как показала практика. Должна быть ещё "визуальная окантовка" предметки! (97) В Си есть ссылка на функцию - т.е. можно сделать все, что угодно! |
|||
99
Steel_Wheel
10.08.11
✎
14:45
|
(98) Слушай, а подскажи: есть
struct MyStruct { int a; } Как добавить в MyStruct ссылку на функцию, которая могла бы вернуть а или присвоить ему значение? Только чур структуру в эту функцию не передавать |
|||
100
ДенисЧ
10.08.11
✎
14:46
|
truct MyStruct
{ int a; void MyFunc(int param){a = param;}; } |
|||
101
Steel_Wheel
10.08.11
✎
14:47
|
(100) Это чистый С?
|
|||
102
ДенисЧ
10.08.11
✎
14:48
|
(101) это чистый с++ :-)
|
|||
103
Steel_Wheel
10.08.11
✎
14:52
|
(102) :)
а Stagor про С говорил... |
|||
104
Stagor
11.08.11
✎
09:02
|
(103) Если я ничего не путаю то как то так:
struct MyStruct { int a; int (*p)(const char *, const char *); } |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |