Mar. 17th, 2008

Просто некоторый надоедливый факт.
Сравним:
public class TextTag
{
  private int begin;
  public int Begin
  {
    get { return begin; }
    set { begin = value; }
  }

  private int length;
  public int Length
  {
    get { return length; }
    set { length = value; }
  }

  private Dictionary<string,object> attributes = new Dictionary<string,object>();
  public object this[string attributeName]
  {
    get { return attributes[attributeName]; }
    set
    {
      if (attribues.ContainsKey(attributeName))
        attributes[attributeName] = value;
      else
        attributs.Add(attributeName,value);
    }
  }

  public TextTag(int begin, int length)
  {
    this.begin = begin;
    this.length = length;
  }
}

new TextTag(0,15);

vs
(defclass tag ()
  ((begin
    :accessor tag-begin
    :type integer
    :initarg :begin)
   (length
    :accessor tag-length
    :type integer
    :initarg :length)
   (attributes
    :type hash-table
    :initform (make-hash-table))))

(defun attribute-of (tag attribute-name)
  (gethash attribute-name (slot-value tag 'attributes)))

(defun set-attribute-of (tag attribute-name attribute-value)
  (setf (gethash attribute-name (slot-value tag 'attributes)) attribute-value))

(defsetf attribute-of set-attribute-of)

(make-instance 'tag :begin 0 :length 15)


Когда пишу на c#, чувствую себя очень неуютно… Все эти лишние вещи, которые надо сначала писать, а потом читать, которые путаются, лезут в глаза, вызывают ошибки компиляции… В любом случае, syntactic sugar matters, и лисп самый «сахарный» в этом отношении.

Unison

Mar. 17th, 2008 11:24 pm
Есть такая замечательная утилита — unison. Она позволяет поддерживать несколько каталогов (возможно, расположенных на разных компьютерах) в идентичном состоянии, синхронизируя изменения между ними. Время синхронизации примерно пропорционально объему изменений (за счет использования протокола обмена данными наподобие rsync). Не требует поднятия дополнительных сервисов, для синхронизации по сети достаточно, чтобы до удаленной машины можно было добраться через ssh, и на ней стоял unison (в принципе, наличие его на другой машине не обязательно, но тогда трафика будет существенно больше). Имеет простые настройки и понятые интерфейс (command-line и gui). Работает под *nix, mac os x, windows.

Применений у нее масса. Одно из них — поддержание нескольких компьютеров (декстоп и ноутбук; или домашний десктоп, ноутбук и рабочий десктоп) в актуальном состоянии. Я использую её для синхронизации $HOME на ноутбуке и домашнем декстопе. Два раза эта утилита спасала ценные данные за счет наличия копии на другом компьютере.

Profile

dmitry_vk

April 2023

S M T W T F S
      1
234567 8
9101112131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 5th, 2026 07:15 pm
Powered by Dreamwidth Studios