Имя: Пароль:
IT
IT-новости
Новый язык программирования 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 *);

}
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.