Re[24]: "альтернативные" языки
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.02.07 13:04
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Осталось выяснить связь между моралью и стремлением к "чистоте" языка.


Слово метафора тебе знакомо?
... << RSDN@Home 1.2.0 alpha rev. 675>>
AVK Blog
Re[8]: "альтернативные" языки
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 14.02.07 05:53
Оценка: +2
VladD2,

Блин, совсем вылетело из головы, что ты меня спрашивал...

List<String>[] data = new ArrayList<String>[10]; // такие коллекции недопустимы
List<String> data1 = new ArrayList<String>(); // а так мона


VD>Что за проблема не дает создать массив ArrayList-ов?


Всё из-за того, что дженерики исчезают в рантайме.
Если глянуть рефлекшном data1, то он окажется обычным ArrayList. Таким образом, невозможно в рантайме отличить ArrayList<String> от ArrayList<Integer>, и теоретически можно написать
data[0] = new ArrayList<String>();
data[1] = new ArrayList<Integer>();

и всё пройдёт молча, а это очень плохо.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[25]: "альтернативные" языки
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.02.07 07:53
Оценка:
Здравствуйте, AndrewVK, Вы писали:
AVK>Слово метафора тебе знакомо?
В первом или во втором значении? (з.ы. шутка).
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[12]: "альтернативные" языки
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.02.07 19:08
Оценка:
Здравствуйте, Gajdalager, Вы писали:

G>Если бы не список
Автор: VladD2
Дата: 02.02.07
, я бы решил, что ты предлагаешь человеку учть *только* "язык на букву N".


Это список того что нужно изучять для расширения кругозора. А начинать надо по любому с одного языка. И только Руби с Немерле подходят для этого. Причем я бы выбрал естественно послелдний.

G>ИМХО, язык всегда заточен под определенную парадигму/стиль/как там еще назвать. Если программировать на нем в ключе этой парадигмы — хорошо, если нет — не очень.. Даже у Н есть свой стиль программирования, который ты так рассхваливаешь.


Ошибашся. Немерле одинаково хорошо поддерижват все стил (кроме ЛП).
Для обучения это самое оно. И это никак не свзяано с предпочтениями в реальном программировании.

G> Друое дело, что в Н очень малы затраты при программировании в чуждом ему ключе (например, строго императивно).


Нет там никаких затрат, так как нет там никаких "чуждых ключей". Он просто поддерживает структуроное програмировани, ООП, ФП, МП.

G>Да и, в конце концов, разные языки учить — это фан


Это кому как. Можно и перегрузить. В общем, я считаю, что перечисленный список хорош для общего развития. И чтобы не зацикливаться на одном решении. А начинать обучать можно и нужно на одном универсальном языке. Вот еще бы ЛП включить. Было бы вообще здорово. Может со временем так и будет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: "альтернативные" языки
От: BulatZiganshin  
Дата: 14.02.07 20:04
Оценка:
Здравствуйте, VladD2, Вы писали:

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

case x of
1, 2..5, even -> do_something
/regexp/, "str" -> do_nothing

за синтаксис не отвечаю, я давно им не пользовался. в целом, руби у меня стоит на втором месте в списке любимых после хаскела хотя крупные системы я на нём писать естественно не рекомендую
Люди, я люблю вас! Будьте бдительны!!!
Re[14]: "альтернативные" языки
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.02.07 01:21
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

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


BZ>case x of

BZ> 1, 2..5, even -> do_something
BZ> /regexp/, "str" -> do_nothing

Сдается мне, что match (сопоставление с образцом) по мощьнее будет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: "альтернативные" языки
От: Константин Л.  
Дата: 15.02.07 15:14
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Константин Л., Вы писали:


VD>>>Перебирать из довольно бессмысленно так как они могут иметь разные типы данных. Хотя в макросах их можно и переберать и даже генерировать. К примеру, параметры методов тоже генерируеются как кортежи.


КЛ>>хаха, и что? От этого это становится бесмысленным? Че за бред?


VD>Ну, придумай осмысленную задачу. И вообще, ты же сам сравнивал кортежи со структурами. Тебя не удивляет, что струтуру тоже нельзя перебрать?


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

VD>Еще интересно почему ты не считашь бредом тот факт, что параметры метода тоже невозможно перебрать (если список фиксирован)?


КЛ>>>> А об их отсутствии (точнее о том, что это плохо и они заменяются кортежами.) я уже писал.


VD>>>(задумчиво) Да, ты много пишешь...


КЛ>>а это к чему? У тебя с этим проблемы? Не читай


VD>Не догадливый?


нет
Re[14]: "альтернативные" языки
От: BulatZiganshin  
Дата: 15.02.07 15:48
Оценка:
КЛ>так вот если бы кортеж можно было перебрать, то это было бы знач. преимущество над структурой. Иногда очень нужно пребрать поля какой-либо структуры.

"кортеж с перебором" называется полиморфным списком. в языках типа явы он будет иметь тип что-то типа List<Object>
Люди, я люблю вас! Будьте бдительны!!!
Re[14]: "альтернативные" языки
От: FR  
Дата: 15.02.07 15:49
Оценка:
Здравствуйте, Константин Л., Вы писали:


КЛ>так вот если бы кортеж можно было перебрать, то это было бы знач. преимущество над структурой. Иногда очень нужно пребрать поля какой-либо структуры.


Так во многих языках кортежи без проблем перебираются:

питон:
def aprint(*args):
    for arg in args:
        print arg
        
aprint(1, 2, 3, "test")


D:
import std.stdio;

void aprint(A...)(A a)
{
    foreach(t; a)
        writefln(t);
}

void main()
{
    aprint(1, 2, 3, "test");
}


В D кстати и структура легко превращатся в тупл:
import std.stdio;

void aprint(A...)(A a)
{
    foreach(t; a)
        writefln(t);
}

struct S
{   
    int x;
    char [] msg;
}

void main()
{
    static S s = {123, "test"};
    aprint(s.tupleof);
}
Re[14]: "альтернативные" языки
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.02.07 17:05
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>так вот если бы кортеж можно было перебрать, то это было бы знач. преимущество над структурой. Иногда очень нужно пребрать поля какой-либо структуры.


Дык есть языки которые позволяют это сделать. Только перебирать их в рантайме смысла немног. Это делается во время компиляции.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: "альтернативные" языки
От: Константин Л.  
Дата: 15.02.07 21:34
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Константин Л., Вы писали:


КЛ>>так вот если бы кортеж можно было перебрать, то это было бы знач. преимущество над структурой. Иногда очень нужно пребрать поля какой-либо структуры.


VD>Дык есть языки которые позволяют это сделать. Только перебирать их в рантайме смысла немног. Это делается во время компиляции.


отлично. Это мне нравится. Я с тобой за немерле уже все видеть перестал
Re[15]: "альтернативные" языки
От: Константин Л.  
Дата: 15.02.07 21:36
Оценка: -1
Здравствуйте, BulatZiganshin, Вы писали:


КЛ>>так вот если бы кортеж можно было перебрать, то это было бы знач. преимущество над структурой. Иногда очень нужно пребрать поля какой-либо структуры.


BZ>"кортеж с перебором" называется полиморфным списком. в языках типа явы он будет иметь тип что-то типа List<Object>


не знаю как он там называется, но то что он не есть Java::List<Object> (если я все правильно понял) — это точно. В том то и прокол, чтобы сохранить информацию о типе.
Re[16]: "альтернативные" языки
От: BulatZiganshin  
Дата: 16.02.07 07:02
Оценка:
BZ>>"кортеж с перебором" называется полиморфным списком. в языках типа явы он будет иметь тип что-то типа List<Object>

КЛ>не знаю как он там называется, но то что он не есть Java::List<Object> (если я все правильно понял) — это точно. В том то и прокол, чтобы сохранить информацию о типе.


в static языках за это отвечает reflection
Люди, я люблю вас! Будьте бдительны!!!
Re[17]: "альтернативные" языки
От: Константин Л.  
Дата: 16.02.07 10:30
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

BZ>>>"кортеж с перебором" называется полиморфным списком. в языках типа явы он будет иметь тип что-то типа List<Object>


КЛ>>не знаю как он там называется, но то что он не есть Java::List<Object> (если я все правильно понял) — это точно. В том то и прокол, чтобы сохранить информацию о типе.


BZ>в static языках за это отвечает reflection


я тебе про Фому, ты мне про Ерёму. Кортеж с разнотипными элементами отличается от списка однотипных объектов, пусть даже полиморфных. Равзе разница не очевидна?
Re[18]: "альтернативные" языки
От: BulatZiganshin  
Дата: 16.02.07 10:43
Оценка: :)
Здравствуйте, Константин Л., Вы писали:

КЛ>Здравствуйте, BulatZiganshin, Вы писали:


BZ>>>>"кортеж с перебором" называется полиморфным списком. в языках типа явы он будет иметь тип что-то типа List<Object>


КЛ>>>не знаю как он там называется, но то что он не есть Java::List<Object> (если я все правильно понял) — это точно. В том то и прокол, чтобы сохранить информацию о типе.


BZ>>в static языках за это отвечает reflection


КЛ>я тебе про Фому, ты мне про Ерёму. Кортеж с разнотипными элементами отличается от списка однотипных объектов, пусть даже полиморфных. Равзе разница не очевидна?


нет
Люди, я люблю вас! Будьте бдительны!!!
Re[19]: "альтернативные" языки
От: Константин Л.  
Дата: 16.02.07 12:21
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

nemerle:

using System.Console;

namespace test
{
   module Test
   {
      public test() : void
      {
         def tuple = ("string", 10, 1.5);
     def lst = [ "string" : System.Object , 10  : System.Object, 1.5  : System.Object ];

         foreach(o in lst)
           WriteLine($"$o");
      }

      public Main() : void
      {
         test();
      }
   }
}


а теперь?
Re[20]: "альтернативные" языки
От: BulatZiganshin  
Дата: 16.02.07 12:49
Оценка:
КЛ>nemerle:

но ведь можно сделать и язык с поддержкой туплов в foreach. для хаскела есть такая библиотека — OOHaskell, если не ошибаюсь, и в ней модуль OOList, реализующий полиморфные списки для хаскела черех туплы. вот такая вот загогулина..
Люди, я люблю вас! Будьте бдительны!!!
Re[14]: "альтернативные" языки
От: ambel-vlad Беларусь  
Дата: 17.02.07 22:15
Оценка:
Hi Константин Л.

VD>>Ну, придумай осмысленную задачу. И вообще, ты же сам сравнивал кортежи со структурами. Тебя не удивляет, что струтуру тоже нельзя перебрать?


КЛ>так вот если бы кортеж можно было перебрать, то это было бы знач. преимущество над структурой. Иногда очень нужно пребрать поля какой-либо структуры.


А зачем перебирать надо? Может проще сразу присвоить соответсвующим переменным нужные значения.
Вот тебе пример из Питона

def testFun():
 return ("aaa", "b")

(a,b)=testFun()
print a
print b


В результате получишь вывод
aaa
b


Даже гораздо лучше чем перебор.

--
С Уважением
Posted via RSDN NNTP Server 2.0
Re: "альтернативные" языки
От: DaBro  
Дата: 17.02.07 22:48
Оценка:
Да полюбому надо!
Вот банальный пример — тебя не затрахало писать скрипты в формате cmd без возможности обработать исключения?
Наверное да. Python может сделать то же самое, только остановиться если что-то не так.
Ты пробовал делать эксперную систему на строго-типизированном языке? На Prolog это сделать проще — особенно если "мышцы" на ОО языке сделаны.
Ты пробовал сделать анализатор языка на С? А на FP(например haskel)? Что тебе больше по-душе?

Вот и все мои аргументы...
Re[15]: "альтернативные" языки
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.02.07 00:36
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:


КЛ>>так вот если бы кортеж можно было перебрать, то это было бы знач. преимущество над структурой. Иногда очень нужно пребрать поля какой-либо структуры.


BZ>"кортеж с перебором" называется полиморфным списком. в языках типа явы он будет иметь тип что-то типа List<Object>


Кортеж с перебором называется "кортеж", а список списоком. Я еще не видел языков где допускались бы списки с разными типами элементов. Обычно допускаются списки с элементами одного типа в которые можно помещать некие подтипы этого типа. Причем выявлять конкретные типы можно только в рантайме. Что с одной стороные несколько медленее, а с другой может привести к рантайм-ошибкам. К тому же, обычно, кортеежи организуются в памяти как непрерывный кусок памяти, а списки в виде некий ссылочных структур. Это приводит к тому. что кортежи более эффектинвы.

В общем, это разные структуры данных. А то можно и массивом все проблемы решать.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.